.. | .. |
---|
114 | 114 | #define LVDS0_MSBSEL(x) HIWORD_UPDATE(x, BIT(2), 2) |
---|
115 | 115 | |
---|
116 | 116 | static void |
---|
117 | | -rkx110_combrxphy_dsi_timing_init(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 117 | +rkx110_combrxphy_dsi_timing_init(struct rk_serdes *ser, |
---|
| 118 | + struct rkx110_combrxphy *combrxphy, |
---|
| 119 | + u8 dev_id, enum comb_phy_id id) |
---|
118 | 120 | { |
---|
119 | 121 | } |
---|
120 | 122 | |
---|
121 | | -static void rkx110_combrxphy_dsi_power_on(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 123 | +static void rkx110_combrxphy_dsi_power_on(struct rk_serdes *ser, |
---|
| 124 | + struct rkx110_combrxphy *combrxphy, |
---|
| 125 | + u8 dev_id, enum comb_phy_id id) |
---|
122 | 126 | { |
---|
123 | | - struct hwclk *hwclk = ser->chip[DEVICE_LOCAL].hwclk; |
---|
124 | | - struct rkx110_combrxphy *combrxphy = &ser->combrxphy; |
---|
125 | | - struct i2c_client *client = ser->chip[DEVICE_LOCAL].client; |
---|
| 127 | + struct hwclk *hwclk = ser->chip[dev_id].hwclk; |
---|
| 128 | + struct i2c_client *client = ser->chip[dev_id].client; |
---|
126 | 129 | u32 val = 0; |
---|
127 | 130 | u32 grf_base; |
---|
128 | 131 | |
---|
.. | .. |
---|
144 | 147 | serdes_combphy_get_default_config(combrxphy->rate, |
---|
145 | 148 | &combrxphy->mipi_dphy_cfg); |
---|
146 | 149 | |
---|
147 | | - switch (ser->dsi_rx.lanes) { |
---|
| 150 | + switch (combrxphy->lanes) { |
---|
148 | 151 | case 4: |
---|
149 | 152 | val |= LANE3_ENABLE(1); |
---|
150 | 153 | fallthrough; |
---|
.. | .. |
---|
164 | 167 | ser->i2c_write_reg(client, grf_base + GRF_MIPI_RX_CON0, |
---|
165 | 168 | PHY_MODE(COMBRX_PHY_MODE_VIDEO_MIPI) | val); |
---|
166 | 169 | |
---|
167 | | - rkx110_combrxphy_dsi_timing_init(ser, id); |
---|
| 170 | + rkx110_combrxphy_dsi_timing_init(ser, combrxphy, dev_id, id); |
---|
168 | 171 | } |
---|
169 | 172 | |
---|
170 | | -static void rkx110_combrxphy_dsi_power_off(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 173 | +static void rkx110_combrxphy_dsi_power_off(struct rk_serdes *ser, |
---|
| 174 | + struct rkx110_combrxphy *combrxphy, |
---|
| 175 | + u8 dev_id, enum comb_phy_id id) |
---|
171 | 176 | { |
---|
172 | | - struct i2c_client *client = ser->chip[DEVICE_LOCAL].client; |
---|
| 177 | + struct i2c_client *client = ser->chip[dev_id].client; |
---|
173 | 178 | u32 grf_base; |
---|
174 | 179 | |
---|
175 | 180 | grf_base = id ? RKX110_GRF_MIPI1_BASE : RKX110_GRF_MIPI0_BASE; |
---|
.. | .. |
---|
178 | 183 | LANE1_ENABLE(0) | LANE0_ENABLE(0)); |
---|
179 | 184 | } |
---|
180 | 185 | |
---|
181 | | -static void rkx110_combrxphy_lvds_power_on(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 186 | +static void rkx110_combrxphy_lvds_power_on(struct rk_serdes *ser, |
---|
| 187 | + struct rkx110_combrxphy *combrxphy, |
---|
| 188 | + u8 dev_id, enum comb_phy_id id) |
---|
182 | 189 | { |
---|
183 | | - struct i2c_client *client = ser->chip[DEVICE_LOCAL].client; |
---|
| 190 | + struct i2c_client *client = ser->chip[dev_id].client; |
---|
184 | 191 | u32 grf_base = id ? RKX110_GRF_MIPI1_BASE : RKX110_GRF_MIPI0_BASE; |
---|
185 | 192 | u32 val; |
---|
186 | 193 | int ret; |
---|
.. | .. |
---|
209 | 216 | LVDS_RX1_PD(0) | LVDS_RX0_PD(0)); |
---|
210 | 217 | } |
---|
211 | 218 | |
---|
212 | | -static void rkx110_combrxphy_lvds_power_off(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 219 | +static void rkx110_combrxphy_lvds_power_off(struct rk_serdes *ser, |
---|
| 220 | + struct rkx110_combrxphy *combrxphy, |
---|
| 221 | + u8 dev_id, enum comb_phy_id id) |
---|
213 | 222 | { |
---|
214 | | - struct i2c_client *client = ser->chip[DEVICE_LOCAL].client; |
---|
| 223 | + struct i2c_client *client = ser->chip[dev_id].client; |
---|
215 | 224 | u32 grf_base = id ? RKX110_GRF_MIPI1_BASE : RKX110_GRF_MIPI0_BASE; |
---|
216 | 225 | |
---|
217 | 226 | ser->i2c_write_reg(client, grf_base + GRF_MIPI_RX_CON0, |
---|
.. | .. |
---|
219 | 228 | LVDS_RX1_PD(1) | LVDS_RX0_PD(1)); |
---|
220 | 229 | } |
---|
221 | 230 | |
---|
222 | | -static void rkx110_combrxphy_lvds_camera_power_on(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 231 | +static void rkx110_combrxphy_lvds_camera_power_on(struct rk_serdes *ser, |
---|
| 232 | + struct rkx110_combrxphy *combrxphy, |
---|
| 233 | + u8 dev_id, enum comb_phy_id id) |
---|
223 | 234 | { |
---|
224 | 235 | } |
---|
225 | 236 | |
---|
226 | | -static void rkx110_combrxphy_lvds_camera_power_off(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 237 | +static void rkx110_combrxphy_lvds_camera_power_off(struct rk_serdes *ser, |
---|
| 238 | + struct rkx110_combrxphy *combrxphy, |
---|
| 239 | + u8 dev_id, enum comb_phy_id id) |
---|
227 | 240 | { |
---|
228 | 241 | } |
---|
229 | 242 | |
---|
230 | | -void rkx110_combrxphy_power_on(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 243 | +void rkx110_combrxphy_power_on(struct rk_serdes *ser, struct rkx110_combrxphy *combrxphy, |
---|
| 244 | + u8 dev_id, enum comb_phy_id id) |
---|
231 | 245 | { |
---|
232 | | - struct rkx110_combrxphy *combrxphy = &ser->combrxphy; |
---|
233 | | - |
---|
234 | 246 | switch (combrxphy->mode) { |
---|
235 | 247 | case COMBRX_PHY_MODE_VIDEO_MIPI: |
---|
236 | | - rkx110_combrxphy_dsi_power_on(ser, id); |
---|
| 248 | + rkx110_combrxphy_dsi_power_on(ser, combrxphy, dev_id, id); |
---|
237 | 249 | break; |
---|
238 | 250 | case COMBRX_PHY_MODE_VIDEO_LVDS: |
---|
239 | | - rkx110_combrxphy_lvds_power_on(ser, id); |
---|
| 251 | + rkx110_combrxphy_lvds_power_on(ser, combrxphy, dev_id, id); |
---|
240 | 252 | break; |
---|
241 | 253 | case COMBRX_PHY_MODE_LVDS_CAMERA: |
---|
242 | | - rkx110_combrxphy_lvds_camera_power_on(ser, id); |
---|
| 254 | + rkx110_combrxphy_lvds_camera_power_on(ser, combrxphy, dev_id, id); |
---|
243 | 255 | break; |
---|
244 | 256 | default: |
---|
245 | 257 | break; |
---|
246 | 258 | } |
---|
247 | 259 | } |
---|
248 | 260 | |
---|
249 | | -void rkx110_combrxphy_power_off(struct rk_serdes *ser, enum comb_phy_id id) |
---|
| 261 | +void rkx110_combrxphy_power_off(struct rk_serdes *ser, struct rkx110_combrxphy *combrxphy, |
---|
| 262 | + u8 dev_id, enum comb_phy_id id) |
---|
250 | 263 | { |
---|
251 | | - struct rkx110_combrxphy *combrxphy = &ser->combrxphy; |
---|
252 | | - |
---|
253 | 264 | switch (combrxphy->mode) { |
---|
254 | 265 | case COMBRX_PHY_MODE_VIDEO_MIPI: |
---|
255 | | - rkx110_combrxphy_dsi_power_off(ser, id); |
---|
| 266 | + rkx110_combrxphy_dsi_power_off(ser, combrxphy, dev_id, id); |
---|
256 | 267 | break; |
---|
257 | 268 | case COMBRX_PHY_MODE_VIDEO_LVDS: |
---|
258 | | - rkx110_combrxphy_lvds_power_off(ser, id); |
---|
| 269 | + rkx110_combrxphy_lvds_power_off(ser, combrxphy, dev_id, id); |
---|
259 | 270 | break; |
---|
260 | 271 | case COMBRX_PHY_MODE_LVDS_CAMERA: |
---|
261 | | - rkx110_combrxphy_lvds_camera_power_off(ser, id); |
---|
| 272 | + rkx110_combrxphy_lvds_camera_power_off(ser, combrxphy, dev_id, id); |
---|
262 | 273 | break; |
---|
263 | 274 | default: |
---|
264 | 275 | break; |
---|
265 | 276 | } |
---|
266 | 277 | } |
---|
267 | 278 | |
---|
268 | | -void rkx110_combrxphy_set_rate(struct rk_serdes *ser, u64 rate) |
---|
| 279 | +void rkx110_combrxphy_set_rate(struct rkx110_combrxphy *combrxphy, u64 rate) |
---|
269 | 280 | { |
---|
270 | | - struct rkx110_combrxphy *combrxphy = &ser->combrxphy; |
---|
271 | | - |
---|
272 | 281 | combrxphy->rate = rate; |
---|
273 | 282 | } |
---|
274 | 283 | |
---|
275 | | -void rkx110_combrxphy_set_mode(struct rk_serdes *ser, enum combrx_phy_mode mode) |
---|
| 284 | +void rkx110_combrxphy_set_lanes(struct rkx110_combrxphy *combrxphy, uint8_t lanes) |
---|
276 | 285 | { |
---|
277 | | - struct rkx110_combrxphy *combrxphy = &ser->combrxphy; |
---|
| 286 | + combrxphy->lanes = lanes; |
---|
| 287 | +} |
---|
278 | 288 | |
---|
| 289 | +void rkx110_combrxphy_set_mode(struct rkx110_combrxphy *combrxphy, enum combrx_phy_mode mode) |
---|
| 290 | +{ |
---|
279 | 291 | combrxphy->mode = mode; |
---|
280 | 292 | } |
---|