.. | .. |
---|
9 | 9 | #define _RKX110_X120_H |
---|
10 | 10 | |
---|
11 | 11 | #include <drm/drm_panel.h> |
---|
| 12 | +#include <drm/drm_bridge.h> |
---|
| 13 | +#include <drm/drm_connector.h> |
---|
12 | 14 | #include <dt-bindings/mfd/rockchip-serdes.h> |
---|
13 | 15 | #include <linux/i2c.h> |
---|
14 | 16 | #include <video/videomode.h> |
---|
15 | 17 | |
---|
16 | | -#define MAX_PANEL 2 |
---|
| 18 | +#define RK_SERDES_MAX_ROUTE 2 |
---|
17 | 19 | #define RK_SERDES_PASSTHROUGH_CNT 11 |
---|
18 | 20 | |
---|
19 | 21 | #define SERDES_VERSION_V0(type) 0x2201 |
---|
.. | .. |
---|
142 | 144 | |
---|
143 | 145 | struct rkx110_combrxphy { |
---|
144 | 146 | enum combrx_phy_mode mode; |
---|
| 147 | + uint8_t lanes; |
---|
145 | 148 | u64 rate; |
---|
146 | 149 | struct configure_opts_combphy mipi_dphy_cfg; |
---|
147 | 150 | }; |
---|
148 | 151 | |
---|
149 | 152 | struct rkx120_dsi_tx { |
---|
| 153 | + struct rkx120_combtxphy *combtxphy; |
---|
| 154 | + |
---|
150 | 155 | int bpp; /* 24/18/16*/ |
---|
151 | 156 | enum serdes_dsi_bus_format bus_format; |
---|
152 | 157 | enum serdes_dsi_mode_flags mode_flags; |
---|
.. | .. |
---|
221 | 226 | u32 remote0_port1; |
---|
222 | 227 | u32 remote1_port0; |
---|
223 | 228 | u32 remote1_port1; |
---|
| 229 | + u32 route_flag; |
---|
224 | 230 | }; |
---|
225 | 231 | |
---|
226 | 232 | struct rk_serdes_chip { |
---|
.. | .. |
---|
233 | 239 | struct pattern_gen { |
---|
234 | 240 | const char *name; |
---|
235 | 241 | struct rk_serdes_chip *chip; |
---|
| 242 | + struct rk_serdes_route *route; |
---|
236 | 243 | u32 base; |
---|
237 | 244 | u32 link_src_reg; |
---|
238 | 245 | u8 link_src_offset; |
---|
| 246 | + u8 type; |
---|
239 | 247 | }; |
---|
240 | 248 | |
---|
241 | 249 | struct rk_serdes_pt_pin { |
---|
.. | .. |
---|
259 | 267 | struct rk_serdes { |
---|
260 | 268 | struct device *dev; |
---|
261 | 269 | struct rk_serdes_chip chip[DEVICE_MAX]; |
---|
| 270 | + struct regulator *supply; |
---|
262 | 271 | struct gpio_desc *reset; |
---|
263 | 272 | struct gpio_desc *enable; |
---|
| 273 | + struct gpio_desc *irq_gpio; |
---|
264 | 274 | |
---|
| 275 | + int irq; |
---|
265 | 276 | /* |
---|
266 | 277 | * Control by I2C-Debug |
---|
267 | 278 | */ |
---|
.. | .. |
---|
276 | 287 | struct dentry *debugfs_remote1; |
---|
277 | 288 | struct dentry *debugfs_rate; |
---|
278 | 289 | |
---|
279 | | - struct videomode *vm; |
---|
| 290 | + struct rk_serdes_route *route[RK_SERDES_MAX_ROUTE]; |
---|
280 | 291 | u32 stream_type; |
---|
281 | 292 | u32 version; |
---|
282 | | - u32 route_flag; |
---|
283 | 293 | u8 remote_nr; |
---|
284 | | - struct rkx110_combrxphy combrxphy; |
---|
285 | | - struct rkx110_dsi_rx dsi_rx; |
---|
286 | | - struct rkx120_combtxphy combtxphy; |
---|
287 | | - struct rkx120_dsi_tx dsi_tx; |
---|
| 294 | + u8 lane_nr; |
---|
| 295 | + u8 channel_nr; |
---|
| 296 | + u8 route_nr; |
---|
288 | 297 | |
---|
289 | 298 | int (*i2c_read_reg)(struct i2c_client *client, u32 addr, u32 *value); |
---|
290 | 299 | int (*i2c_write_reg)(struct i2c_client *client, u32 addr, u32 value); |
---|
.. | .. |
---|
315 | 324 | int cmd_cnt; |
---|
316 | 325 | }; |
---|
317 | 326 | |
---|
| 327 | +struct rk_serdes_panel; |
---|
318 | 328 | struct rk_serdes_panel { |
---|
319 | 329 | struct drm_panel panel; |
---|
| 330 | + struct drm_bridge bridge; |
---|
| 331 | + struct drm_connector connector; |
---|
320 | 332 | struct device *dev; |
---|
321 | 333 | struct rk_serdes *parent; |
---|
322 | | - struct rk_serdes_route route; |
---|
323 | | - unsigned int bus_format; |
---|
324 | | - int link_mode; |
---|
| 334 | + struct rk_serdes_panel *secondary; |
---|
325 | 335 | |
---|
326 | 336 | struct panel_cmds *on_cmds; |
---|
327 | 337 | struct panel_cmds *off_cmds; |
---|
.. | .. |
---|
329 | 339 | struct regulator *supply; |
---|
330 | 340 | struct gpio_desc *enable_gpio; |
---|
331 | 341 | struct gpio_desc *reset_gpio; |
---|
| 342 | + |
---|
| 343 | + struct rk_serdes_route route; |
---|
| 344 | + struct rkx110_combrxphy combrxphy; |
---|
| 345 | + struct rkx110_dsi_rx dsi_rx; |
---|
| 346 | + struct rkx120_combtxphy combtxphy; |
---|
| 347 | + struct rkx120_dsi_tx dsi_tx; |
---|
| 348 | + |
---|
| 349 | + unsigned int bus_format; |
---|
| 350 | + unsigned int id; |
---|
| 351 | + u32 connector_type; |
---|
| 352 | + |
---|
| 353 | + bool multi_panel; |
---|
332 | 354 | }; |
---|
333 | 355 | |
---|
334 | | -int rkx110_linktx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route); |
---|
| 356 | +int rkx110_display_linktx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route); |
---|
335 | 357 | void rkx110_linktx_video_enable(struct rk_serdes *serdes, u8 dev_id, bool enable); |
---|
336 | 358 | void rkx110_linktx_channel_enable(struct rk_serdes *serdes, u8 ch_id, u8 dev_id, bool enable); |
---|
337 | 359 | void rkx120_linkrx_engine_enable(struct rk_serdes *serdes, u8 en_id, u8 dev_id, bool enable); |
---|
338 | 360 | void rkx110_set_stream_source(struct rk_serdes *serdes, int local_port, u8 dev_id); |
---|
339 | | -int rkx120_linkrx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id); |
---|
| 361 | +int rkx120_display_linkrx_enable(struct rk_serdes *serdes, |
---|
| 362 | + struct rk_serdes_route *route, u8 remote_id); |
---|
340 | 363 | int rkx120_rgb_tx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id); |
---|
341 | 364 | int rkx120_lvds_tx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id, |
---|
342 | 365 | u8 phy_id); |
---|
.. | .. |
---|
354 | 377 | void rkx120_pcs_enable(struct rk_serdes *serdes, bool enable, u8 pcs_id, u8 dev_id); |
---|
355 | 378 | void rkx110_ser_pma_enable(struct rk_serdes *serdes, bool enable, u8 pma_id, u8 remote_id); |
---|
356 | 379 | void rkx120_des_pma_enable(struct rk_serdes *serdes, bool enable, u8 pma_id, u8 remote_id); |
---|
357 | | -void rkx110_linktx_wait_link_ready(struct rk_serdes *serdes, u8 id); |
---|
358 | | -void rkx120_linkrx_wait_link_ready(struct rk_serdes *serdes, u8 id); |
---|
| 380 | +int rkx110_linktx_wait_link_ready(struct rk_serdes *serdes, u8 id); |
---|
| 381 | +int rkx120_linkrx_wait_link_ready(struct rk_serdes *serdes, u8 id); |
---|
359 | 382 | void rkx110_x120_pattern_gen_debugfs_create_file(struct pattern_gen *pattern_gen, |
---|
360 | 383 | struct rk_serdes_chip *chip, |
---|
361 | 384 | struct dentry *dentry); |
---|
.. | .. |
---|
363 | 386 | bool is_rx); |
---|
364 | 387 | void rkx120_linkrx_passthrough_cfg(struct rk_serdes *serdes, u32 client_id, u32 func_id, |
---|
365 | 388 | bool is_rx); |
---|
| 389 | +void rkx110_irq_enable(struct rk_serdes *serdes, u8 dev_id); |
---|
| 390 | +void rkx110_irq_disable(struct rk_serdes *serdes, u8 dev_id); |
---|
| 391 | +int rkx110_irq_handler(struct rk_serdes *serdes, u8 dev_id); |
---|
| 392 | +void rkx120_irq_enable(struct rk_serdes *serdes, u8 dev_id); |
---|
| 393 | +void rkx120_irq_disable(struct rk_serdes *serdes, u8 dev_id); |
---|
| 394 | +int rkx120_irq_handler(struct rk_serdes *serdes, u8 dev_id); |
---|
| 395 | + |
---|
| 396 | +int rkx110_linktx_dsi_rec_start(struct rk_serdes *serdes, u8 dev_id, u8 dsi_id, bool enable); |
---|
| 397 | +int rkx110_linktx_dsi_type_select(struct rk_serdes *serdes, u8 dev_id, u8 dsi_id, bool is_cmd); |
---|
| 398 | +int rkx110_linktx_dsi_deley_length_config(struct rk_serdes *serdes, u8 dev_id, u8 dsi_id, |
---|
| 399 | + u32 length); |
---|
366 | 400 | #endif |
---|