hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mfd/rkx110_x120/rkx110_x120.h
....@@ -9,11 +9,13 @@
99 #define _RKX110_X120_H
1010
1111 #include <drm/drm_panel.h>
12
+#include <drm/drm_bridge.h>
13
+#include <drm/drm_connector.h>
1214 #include <dt-bindings/mfd/rockchip-serdes.h>
1315 #include <linux/i2c.h>
1416 #include <video/videomode.h>
1517
16
-#define MAX_PANEL 2
18
+#define RK_SERDES_MAX_ROUTE 2
1719 #define RK_SERDES_PASSTHROUGH_CNT 11
1820
1921 #define SERDES_VERSION_V0(type) 0x2201
....@@ -142,11 +144,14 @@
142144
143145 struct rkx110_combrxphy {
144146 enum combrx_phy_mode mode;
147
+ uint8_t lanes;
145148 u64 rate;
146149 struct configure_opts_combphy mipi_dphy_cfg;
147150 };
148151
149152 struct rkx120_dsi_tx {
153
+ struct rkx120_combtxphy *combtxphy;
154
+
150155 int bpp; /* 24/18/16*/
151156 enum serdes_dsi_bus_format bus_format;
152157 enum serdes_dsi_mode_flags mode_flags;
....@@ -221,6 +226,7 @@
221226 u32 remote0_port1;
222227 u32 remote1_port0;
223228 u32 remote1_port1;
229
+ u32 route_flag;
224230 };
225231
226232 struct rk_serdes_chip {
....@@ -233,9 +239,11 @@
233239 struct pattern_gen {
234240 const char *name;
235241 struct rk_serdes_chip *chip;
242
+ struct rk_serdes_route *route;
236243 u32 base;
237244 u32 link_src_reg;
238245 u8 link_src_offset;
246
+ u8 type;
239247 };
240248
241249 struct rk_serdes_pt_pin {
....@@ -259,9 +267,12 @@
259267 struct rk_serdes {
260268 struct device *dev;
261269 struct rk_serdes_chip chip[DEVICE_MAX];
270
+ struct regulator *supply;
262271 struct gpio_desc *reset;
263272 struct gpio_desc *enable;
273
+ struct gpio_desc *irq_gpio;
264274
275
+ int irq;
265276 /*
266277 * Control by I2C-Debug
267278 */
....@@ -276,15 +287,13 @@
276287 struct dentry *debugfs_remote1;
277288 struct dentry *debugfs_rate;
278289
279
- struct videomode *vm;
290
+ struct rk_serdes_route *route[RK_SERDES_MAX_ROUTE];
280291 u32 stream_type;
281292 u32 version;
282
- u32 route_flag;
283293 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;
288297
289298 int (*i2c_read_reg)(struct i2c_client *client, u32 addr, u32 *value);
290299 int (*i2c_write_reg)(struct i2c_client *client, u32 addr, u32 value);
....@@ -315,13 +324,14 @@
315324 int cmd_cnt;
316325 };
317326
327
+struct rk_serdes_panel;
318328 struct rk_serdes_panel {
319329 struct drm_panel panel;
330
+ struct drm_bridge bridge;
331
+ struct drm_connector connector;
320332 struct device *dev;
321333 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;
325335
326336 struct panel_cmds *on_cmds;
327337 struct panel_cmds *off_cmds;
....@@ -329,14 +339,27 @@
329339 struct regulator *supply;
330340 struct gpio_desc *enable_gpio;
331341 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;
332354 };
333355
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);
335357 void rkx110_linktx_video_enable(struct rk_serdes *serdes, u8 dev_id, bool enable);
336358 void rkx110_linktx_channel_enable(struct rk_serdes *serdes, u8 ch_id, u8 dev_id, bool enable);
337359 void rkx120_linkrx_engine_enable(struct rk_serdes *serdes, u8 en_id, u8 dev_id, bool enable);
338360 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);
340363 int rkx120_rgb_tx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id);
341364 int rkx120_lvds_tx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id,
342365 u8 phy_id);
....@@ -354,8 +377,8 @@
354377 void rkx120_pcs_enable(struct rk_serdes *serdes, bool enable, u8 pcs_id, u8 dev_id);
355378 void rkx110_ser_pma_enable(struct rk_serdes *serdes, bool enable, u8 pma_id, u8 remote_id);
356379 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);
359382 void rkx110_x120_pattern_gen_debugfs_create_file(struct pattern_gen *pattern_gen,
360383 struct rk_serdes_chip *chip,
361384 struct dentry *dentry);
....@@ -363,4 +386,15 @@
363386 bool is_rx);
364387 void rkx120_linkrx_passthrough_cfg(struct rk_serdes *serdes, u32 client_id, u32 func_id,
365388 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);
366400 #endif