From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 03 Jan 2024 09:43:39 +0000
Subject: [PATCH] update kernel to 5.10.198

---
 kernel/drivers/mfd/rkx110_x120/rkx110_x120.h |   62 ++++++++++++++++++++++++-------
 1 files changed, 48 insertions(+), 14 deletions(-)

diff --git a/kernel/drivers/mfd/rkx110_x120/rkx110_x120.h b/kernel/drivers/mfd/rkx110_x120/rkx110_x120.h
index 67c2d1f..319a328 100644
--- a/kernel/drivers/mfd/rkx110_x120/rkx110_x120.h
+++ b/kernel/drivers/mfd/rkx110_x120/rkx110_x120.h
@@ -9,11 +9,13 @@
 #define _RKX110_X120_H
 
 #include <drm/drm_panel.h>
+#include <drm/drm_bridge.h>
+#include <drm/drm_connector.h>
 #include <dt-bindings/mfd/rockchip-serdes.h>
 #include <linux/i2c.h>
 #include <video/videomode.h>
 
-#define MAX_PANEL 2
+#define RK_SERDES_MAX_ROUTE		2
 #define RK_SERDES_PASSTHROUGH_CNT	11
 
 #define SERDES_VERSION_V0(type)		0x2201
@@ -142,11 +144,14 @@
 
 struct rkx110_combrxphy {
 	enum combrx_phy_mode mode;
+	uint8_t lanes;
 	u64 rate;
 	struct configure_opts_combphy mipi_dphy_cfg;
 };
 
 struct rkx120_dsi_tx {
+	struct rkx120_combtxphy *combtxphy;
+
 	int bpp; /* 24/18/16*/
 	enum serdes_dsi_bus_format bus_format;
 	enum serdes_dsi_mode_flags mode_flags;
@@ -221,6 +226,7 @@
 	u32 remote0_port1;
 	u32 remote1_port0;
 	u32 remote1_port1;
+	u32 route_flag;
 };
 
 struct rk_serdes_chip {
@@ -233,9 +239,11 @@
 struct pattern_gen {
 	const char *name;
 	struct rk_serdes_chip *chip;
+	struct rk_serdes_route *route;
 	u32 base;
 	u32 link_src_reg;
 	u8 link_src_offset;
+	u8 type;
 };
 
 struct rk_serdes_pt_pin {
@@ -259,9 +267,12 @@
 struct rk_serdes {
 	struct device *dev;
 	struct rk_serdes_chip chip[DEVICE_MAX];
+	struct regulator *supply;
 	struct gpio_desc *reset;
 	struct gpio_desc *enable;
+	struct gpio_desc *irq_gpio;
 
+	int irq;
 	/*
 	 * Control by I2C-Debug
 	 */
@@ -276,15 +287,13 @@
 	struct dentry *debugfs_remote1;
 	struct dentry *debugfs_rate;
 
-	struct videomode *vm;
+	struct rk_serdes_route *route[RK_SERDES_MAX_ROUTE];
 	u32 stream_type;
 	u32 version;
-	u32 route_flag;
 	u8 remote_nr;
-	struct rkx110_combrxphy combrxphy;
-	struct rkx110_dsi_rx dsi_rx;
-	struct rkx120_combtxphy combtxphy;
-	struct rkx120_dsi_tx dsi_tx;
+	u8 lane_nr;
+	u8 channel_nr;
+	u8 route_nr;
 
 	int (*i2c_read_reg)(struct i2c_client *client, u32 addr, u32 *value);
 	int (*i2c_write_reg)(struct i2c_client *client, u32 addr, u32 value);
@@ -315,13 +324,14 @@
 	int cmd_cnt;
 };
 
+struct rk_serdes_panel;
 struct rk_serdes_panel {
 	struct drm_panel panel;
+	struct drm_bridge bridge;
+	struct drm_connector connector;
 	struct device *dev;
 	struct rk_serdes *parent;
-	struct rk_serdes_route route;
-	unsigned int bus_format;
-	int link_mode;
+	struct rk_serdes_panel *secondary;
 
 	struct panel_cmds *on_cmds;
 	struct panel_cmds *off_cmds;
@@ -329,14 +339,27 @@
 	struct regulator *supply;
 	struct gpio_desc *enable_gpio;
 	struct gpio_desc *reset_gpio;
+
+	struct rk_serdes_route route;
+	struct rkx110_combrxphy combrxphy;
+	struct rkx110_dsi_rx dsi_rx;
+	struct rkx120_combtxphy combtxphy;
+	struct rkx120_dsi_tx dsi_tx;
+
+	unsigned int bus_format;
+	unsigned int id;
+	u32 connector_type;
+
+	bool multi_panel;
 };
 
-int rkx110_linktx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route);
+int rkx110_display_linktx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route);
 void rkx110_linktx_video_enable(struct rk_serdes *serdes, u8 dev_id, bool enable);
 void rkx110_linktx_channel_enable(struct rk_serdes *serdes, u8 ch_id, u8 dev_id, bool enable);
 void rkx120_linkrx_engine_enable(struct rk_serdes *serdes, u8 en_id, u8 dev_id, bool enable);
 void rkx110_set_stream_source(struct rk_serdes *serdes, int local_port, u8 dev_id);
-int rkx120_linkrx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id);
+int rkx120_display_linkrx_enable(struct rk_serdes *serdes,
+				 struct rk_serdes_route *route, u8 remote_id);
 int rkx120_rgb_tx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id);
 int rkx120_lvds_tx_enable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id,
 			  u8 phy_id);
@@ -354,8 +377,8 @@
 void rkx120_pcs_enable(struct rk_serdes *serdes, bool enable, u8 pcs_id, u8 dev_id);
 void rkx110_ser_pma_enable(struct rk_serdes *serdes, bool enable, u8 pma_id, u8 remote_id);
 void rkx120_des_pma_enable(struct rk_serdes *serdes, bool enable, u8 pma_id, u8 remote_id);
-void rkx110_linktx_wait_link_ready(struct rk_serdes *serdes, u8 id);
-void rkx120_linkrx_wait_link_ready(struct rk_serdes *serdes, u8 id);
+int rkx110_linktx_wait_link_ready(struct rk_serdes *serdes, u8 id);
+int rkx120_linkrx_wait_link_ready(struct rk_serdes *serdes, u8 id);
 void rkx110_x120_pattern_gen_debugfs_create_file(struct pattern_gen *pattern_gen,
 						 struct rk_serdes_chip *chip,
 						 struct dentry *dentry);
@@ -363,4 +386,15 @@
 				   bool is_rx);
 void rkx120_linkrx_passthrough_cfg(struct rk_serdes *serdes, u32 client_id, u32 func_id,
 				   bool is_rx);
+void rkx110_irq_enable(struct rk_serdes *serdes, u8 dev_id);
+void rkx110_irq_disable(struct rk_serdes *serdes, u8 dev_id);
+int rkx110_irq_handler(struct rk_serdes *serdes, u8 dev_id);
+void rkx120_irq_enable(struct rk_serdes *serdes, u8 dev_id);
+void rkx120_irq_disable(struct rk_serdes *serdes, u8 dev_id);
+int rkx120_irq_handler(struct rk_serdes *serdes, u8 dev_id);
+
+int rkx110_linktx_dsi_rec_start(struct rk_serdes *serdes, u8 dev_id, u8 dsi_id, bool enable);
+int rkx110_linktx_dsi_type_select(struct rk_serdes *serdes, u8 dev_id, u8 dsi_id, bool is_cmd);
+int rkx110_linktx_dsi_deley_length_config(struct rk_serdes *serdes, u8 dev_id, u8 dsi_id,
+					  u32 length);
 #endif

--
Gitblit v1.6.2