hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mfd/rkx110_x120/rkx120_combtxphy.c
....@@ -111,9 +111,10 @@
111111 #define GRF_MIPI_STATUS 0x0080
112112 #define PHYLOCK BIT(0)
113113
114
-static void rkx120_combtxphy_dsi_timing_init(struct rk_serdes *des, u8 remote_id)
114
+static void rkx120_combtxphy_dsi_timing_init(struct rk_serdes *des,
115
+ struct rkx120_combtxphy *combtxphy,
116
+ u8 dev_id)
115117 {
116
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
117118 const struct configure_opts_combphy cfg = combtxphy->mipi_dphy_cfg;
118119 u32 byte_clk = DIV_ROUND_CLOSEST_ULL(combtxphy->rate, 8);
119120 u32 esc_div = DIV_ROUND_UP(byte_clk, 20 * USEC_PER_SEC);
....@@ -123,30 +124,30 @@
123124 u32 t_tago, t_tasure, t_taget;
124125 u32 base = RKX120_MIPI_LVDS_TX_PHY0_BASE;
125126
126
- serdes_combphy_write(des, remote_id, base + INTERFACE_PARA,
127
+ serdes_combphy_write(des, dev_id, base + INTERFACE_PARA,
127128 TXREADYESC_VLD(esc_div - 2) |
128129 RXVALIDESC_VLD(esc_div - 2));
129
- serdes_combphy_write(des, remote_id, base + COMMON_PARA0, esc_div);
130
- serdes_combphy_update_bits(des, remote_id, base + TEST_PARA0, FSET_EN, FSET_EN);
130
+ serdes_combphy_write(des, dev_id, base + COMMON_PARA0, esc_div);
131
+ serdes_combphy_update_bits(des, dev_id, base + TEST_PARA0, FSET_EN, FSET_EN);
131132
132133 t_init = DIV_ROUND_UP(cfg.init, t_byte_clk) - 1;
133
- serdes_combphy_write(des, remote_id, base + CLANE_PARA1, T_INITTIME_C(t_init));
134
- serdes_combphy_write(des, remote_id, base + DLANE0_PARA1, T_INITTIME_D(t_init));
135
- serdes_combphy_write(des, remote_id, base + DLANE_PARA1(1), T_INITTIME_D(t_init));
136
- serdes_combphy_write(des, remote_id, base + DLANE_PARA1(2), T_INITTIME_D(t_init));
137
- serdes_combphy_write(des, remote_id, base + DLANE_PARA1(3), T_INITTIME_D(t_init));
134
+ serdes_combphy_write(des, dev_id, base + CLANE_PARA1, T_INITTIME_C(t_init));
135
+ serdes_combphy_write(des, dev_id, base + DLANE0_PARA1, T_INITTIME_D(t_init));
136
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA1(1), T_INITTIME_D(t_init));
137
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA1(2), T_INITTIME_D(t_init));
138
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA1(3), T_INITTIME_D(t_init));
138139
139140 t_clkprepare = DIV_ROUND_UP(cfg.clk_prepare, t_byte_clk) - 1;
140141 t_clkzero = DIV_ROUND_UP(cfg.clk_zero, t_byte_clk) - 1;
141142 t_clkpre = DIV_ROUND_UP(cfg.clk_pre, t_byte_clk) - 1;
142
- serdes_combphy_write(des, remote_id, base + CLANE_PARA2,
143
+ serdes_combphy_write(des, dev_id, base + CLANE_PARA2,
143144 T_CLKPREPARE_C(t_clkprepare) |
144145 T_CLKZERO_C(t_clkzero) | T_CLKPRE_C(t_clkpre));
145146
146147 t_clkpost = DIV_ROUND_UP(cfg.clk_post, t_byte_clk) - 1;
147148 t_clktrail = DIV_ROUND_UP(cfg.clk_trail, t_byte_clk) - 1;
148149 t_hsexit = DIV_ROUND_UP(cfg.hs_exit, t_byte_clk) - 1;
149
- serdes_combphy_write(des, remote_id, base + CLANE_PARA3,
150
+ serdes_combphy_write(des, dev_id, base + CLANE_PARA3,
150151 T_CLKPOST_C(t_clkpost) |
151152 T_CLKTRAIL_C(t_clktrail) |
152153 T_HSEXIT_C(t_hsexit));
....@@ -154,62 +155,63 @@
154155 t_hsprepare = DIV_ROUND_UP(cfg.hs_prepare, t_byte_clk) - 1;
155156 t_hszero = DIV_ROUND_UP(cfg.hs_zero, t_byte_clk) - 1;
156157 t_hstrail = DIV_ROUND_UP(cfg.hs_trail, t_byte_clk) - 1;
157
- serdes_combphy_write(des, remote_id, base + DLANE0_PARA2,
158
+ serdes_combphy_write(des, dev_id, base + DLANE0_PARA2,
158159 T_HSPREPARE_D(t_hsprepare) |
159160 T_HSZERO_D(t_hszero) |
160161 T_HSTRAIL_D(t_hstrail) |
161162 T_HSEXIT_D(t_hsexit));
162163
163
- serdes_combphy_write(des, remote_id, base + DLANE_PARA2(1),
164
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA2(1),
164165 T_HSPREPARE_D(t_hsprepare) |
165166 T_HSZERO_D(t_hszero) |
166167 T_HSTRAIL_D(t_hstrail) |
167168 T_HSEXIT_D(t_hsexit));
168169
169
- serdes_combphy_write(des, remote_id, base + DLANE_PARA2(2),
170
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA2(2),
170171 T_HSPREPARE_D(t_hsprepare) |
171172 T_HSZERO_D(t_hszero) |
172173 T_HSTRAIL_D(t_hstrail) |
173174 T_HSEXIT_D(t_hsexit));
174175
175
- serdes_combphy_write(des, remote_id, base + DLANE_PARA2(3),
176
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA2(3),
176177 T_HSPREPARE_D(t_hsprepare) |
177178 T_HSZERO_D(t_hszero) |
178179 T_HSTRAIL_D(t_hstrail) |
179180 T_HSEXIT_D(t_hsexit));
180181
181182 t_wakeup = DIV_ROUND_UP(cfg.wakeup, t_byte_clk) - 1;
182
- serdes_combphy_write(des, remote_id, base + DLANE0_PARA3, T_WAKEUP_D(t_wakeup));
183
- serdes_combphy_write(des, remote_id, base + DLANE_PARA3(1), T_WAKEUP_D(t_wakeup));
184
- serdes_combphy_write(des, remote_id, base + DLANE_PARA3(2), T_WAKEUP_D(t_wakeup));
185
- serdes_combphy_write(des, remote_id, base + DLANE_PARA3(3), T_WAKEUP_D(t_wakeup));
186
- serdes_combphy_write(des, remote_id, base + CLANE_PARA4, T_WAKEUP_D(t_wakeup));
183
+ serdes_combphy_write(des, dev_id, base + DLANE0_PARA3, T_WAKEUP_D(t_wakeup));
184
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA3(1), T_WAKEUP_D(t_wakeup));
185
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA3(2), T_WAKEUP_D(t_wakeup));
186
+ serdes_combphy_write(des, dev_id, base + DLANE_PARA3(3), T_WAKEUP_D(t_wakeup));
187
+ serdes_combphy_write(des, dev_id, base + CLANE_PARA4, T_WAKEUP_D(t_wakeup));
187188
188189 t_tago = DIV_ROUND_UP(cfg.ta_go, t_byte_clk) - 1;
189190 t_tasure = DIV_ROUND_UP(cfg.ta_sure, t_byte_clk) - 1;
190191 t_taget = DIV_ROUND_UP(cfg.ta_get, t_byte_clk) - 1;
191
- serdes_combphy_write(des, remote_id, base + DLANE0_PARA4,
192
+ serdes_combphy_write(des, dev_id, base + DLANE0_PARA4,
192193 T_TAGO_D0(t_tago) |
193194 T_TASURE_D0(t_tasure) |
194195 T_TAGET_D0(t_taget));
195196 }
196197
197
-static void rkx120_combtxphy_dsi_pll_set(struct rk_serdes *des, u8 remote_id)
198
+static void rkx120_combtxphy_dsi_pll_set(struct rk_serdes *des,
199
+ struct rkx120_combtxphy *combtxphy, u8 dev_id)
198200 {
199
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
200201 u32 base = RKX120_MIPI_LVDS_TX_PHY0_BASE;
201202
202
- serdes_combphy_update_bits(des, remote_id, base + PLL_CTRL_PARA0,
203
+ serdes_combphy_update_bits(des, dev_id, base + PLL_CTRL_PARA0,
203204 RATE_MASK | REFCLK_DIV_MASK | PLL_DIV_MASK,
204205 RATE(combtxphy->rate_factor) |
205206 REFCLK_DIV(combtxphy->ref_div - 1) |
206207 PLL_DIV(combtxphy->fb_div));
207208 }
208209
209
-static void rkx120_combtxphy_dsi_power_on(struct rk_serdes *des, u8 remote_id)
210
+static void rkx120_combtxphy_dsi_power_on(struct rk_serdes *des,
211
+ struct rkx120_combtxphy *combtxphy,
212
+ u8 dev_id)
210213 {
211
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
212
- struct i2c_client *client = des->chip[remote_id].client;
214
+ struct i2c_client *client = des->chip[dev_id].client;
213215 u32 grf_base = RKX120_GRF_MIPI0_BASE;
214216 u32 val;
215217 int ret;
....@@ -218,8 +220,8 @@
218220 PHY_MODE(COMBTX_PHY_MODE_VIDEO_MIPI));
219221
220222 serdes_combphy_get_default_config(combtxphy->rate, &combtxphy->mipi_dphy_cfg);
221
- rkx120_combtxphy_dsi_timing_init(des, remote_id);
222
- rkx120_combtxphy_dsi_pll_set(des, remote_id);
223
+ rkx120_combtxphy_dsi_timing_init(des, combtxphy, dev_id);
224
+ rkx120_combtxphy_dsi_pll_set(des, combtxphy, dev_id);
223225
224226 des->i2c_write_reg(client, grf_base + GRF_MIPITX_CON0, PHYSHUTDWN(1));
225227 des->i2c_write_reg(client, grf_base + GRF_MIPITX_CON1, PWON_PLL(1));
....@@ -233,19 +235,20 @@
233235 dev_err(des->dev, "PLL is not locked\n");
234236 }
235237
236
-static void rkx120_combtxphy_dsi_power_off(struct rk_serdes *des, u8 remote_id)
238
+static void rkx120_combtxphy_dsi_power_off(struct rk_serdes *des, u8 dev_id)
237239 {
238
- struct i2c_client *client = des->chip[remote_id].client;
240
+ struct i2c_client *client = des->chip[dev_id].client;
239241 u32 grf_base = RKX120_GRF_MIPI0_BASE;
240242
241243 des->i2c_write_reg(client, grf_base + GRF_MIPITX_CON0, PHYSHUTDWN(0));
242244 des->i2c_write_reg(client, grf_base + GRF_MIPITX_CON1, PWON_PLL(0));
243245 }
244246
245
-static void rkx120_combtxphy_lvds_power_on(struct rk_serdes *des, u8 remote_id, u8 phy_id)
247
+static void rkx120_combtxphy_lvds_power_on(struct rk_serdes *des,
248
+ struct rkx120_combtxphy *combtxphy,
249
+ u8 dev_id, u8 phy_id)
246250 {
247
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
248
- struct i2c_client *client = des->chip[remote_id].client;
251
+ struct i2c_client *client = des->chip[dev_id].client;
249252 u32 grf_base = (phy_id == 0) ?
250253 RKX120_GRF_MIPI0_BASE : RKX120_GRF_MIPI1_BASE;
251254 const struct {
....@@ -304,29 +307,27 @@
304307 des->i2c_write_reg(client, grf_base + GRF_MIPITX_CON13, TX_IDLE(0));
305308 }
306309
307
-void rkx120_combtxphy_power_on(struct rk_serdes *des, u8 remote_id, u8 phy_id)
310
+void rkx120_combtxphy_power_on(struct rk_serdes *des, struct rkx120_combtxphy *combtxphy,
311
+ u8 dev_id, u8 phy_id)
308312 {
309
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
310
-
311313 switch (combtxphy->mode) {
312314 case COMBTX_PHY_MODE_VIDEO_MIPI:
313
- rkx120_combtxphy_dsi_power_on(des, remote_id);
315
+ rkx120_combtxphy_dsi_power_on(des, combtxphy, dev_id);
314316 break;
315317 case COMBTX_PHY_MODE_VIDEO_LVDS:
316
- rkx120_combtxphy_lvds_power_on(des, remote_id, phy_id);
318
+ rkx120_combtxphy_lvds_power_on(des, combtxphy, dev_id, phy_id);
317319 break;
318320 default:
319321 break;
320322 }
321323 }
322324
323
-void rkx120_combtxphy_power_off(struct rk_serdes *des, u8 remote_id)
325
+void rkx120_combtxphy_power_off(struct rk_serdes *des, struct rkx120_combtxphy *combtxphy,
326
+ u8 dev_id, u8 phy_id)
324327 {
325
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
326
-
327328 switch (combtxphy->mode) {
328329 case COMBTX_PHY_MODE_VIDEO_MIPI:
329
- rkx120_combtxphy_dsi_power_off(des, remote_id);
330
+ rkx120_combtxphy_dsi_power_off(des, dev_id);
330331 break;
331332 case COMBTX_PHY_MODE_VIDEO_LVDS:
332333 break;
....@@ -385,10 +386,8 @@
385386 {
386387 }
387388
388
-void rkx120_combtxphy_set_rate(struct rk_serdes *des, u64 rate)
389
+void rkx120_combtxphy_set_rate(struct rkx120_combtxphy *combtxphy, u64 rate)
389390 {
390
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
391
-
392391 switch (combtxphy->mode) {
393392 case COMBTX_PHY_MODE_VIDEO_MIPI:
394393 rkx120_combtxphy_dsi_pll_calc_rate(combtxphy, rate);
....@@ -403,14 +402,12 @@
403402 combtxphy->rate = rate;
404403 }
405404
406
-u64 rkx120_combtxphy_get_rate(struct rk_serdes *des)
405
+u64 rkx120_combtxphy_get_rate(struct rkx120_combtxphy *combtxphy)
407406 {
408
- return des->combtxphy.rate;
407
+ return combtxphy->rate;
409408 }
410409
411
-void rkx120_combtxphy_set_mode(struct rk_serdes *des, enum combtx_phy_mode mode)
410
+void rkx120_combtxphy_set_mode(struct rkx120_combtxphy *combtxphy, enum combtx_phy_mode mode)
412411 {
413
- struct rkx120_combtxphy *combtxphy = &des->combtxphy;
414
-
415412 combtxphy->mode = mode;
416413 }