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/display-serdes/serdes-bridge.c |   62 ++++++++++++++++++------------
 1 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/kernel/drivers/mfd/display-serdes/serdes-bridge.c b/kernel/drivers/mfd/display-serdes/serdes-bridge.c
index 235d130..6dc82a8 100644
--- a/kernel/drivers/mfd/display-serdes/serdes-bridge.c
+++ b/kernel/drivers/mfd/display-serdes/serdes-bridge.c
@@ -15,7 +15,7 @@
 }
 
 static struct mipi_dsi_device *serdes_attach_dsi(struct serdes_bridge *serdes_bridge,
-						 struct device_node *dsi_node)
+						 struct device_node *remote_node)
 {
 	struct mipi_dsi_device_info info = { "serdes", 0, NULL };
 	struct serdes *serdes = serdes_bridge->parent;
@@ -29,7 +29,7 @@
 	SERDES_DBG_MFD("%s: type=%s, name=%s\n", __func__,
 		       info.type, serdes->chip_data->name);
 
-	host = of_find_mipi_dsi_host_by_node(dsi_node);
+	host = of_find_mipi_dsi_host_by_node(remote_node);
 	if (!host) {
 		dev_err(serdes_bridge->dev, "failed to find serdes dsi host\n");
 		return ERR_PTR(-EPROBE_DEFER);
@@ -49,13 +49,17 @@
 		    (!strcmp(serdes->chip_data->name, "bu18rl82"))) {
 			dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
 					  MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET;
-			SERDES_DBG_MFD("%s: dsi mode MIPI_DSI_MODE_VIDEO_BURST 0x%lx\n",
-				       __func__, dsi->mode_flags);
+			SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_BURST 0x%lx\n",
+				       __func__, serdes->chip_data->name, dsi->mode_flags);
+		} else {
+			dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+			SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n",
+			       __func__, serdes->chip_data->name, dsi->mode_flags);
 		}
 	} else {
 		dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
-		SERDES_DBG_MFD("%s: dsi mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n",
-			       __func__, dsi->mode_flags);
+		SERDES_DBG_MFD("%s: %s dsi_mode MIPI_DSI_MODE_VIDEO_SYNC_PULSE 0x%lx\n",
+			   __func__, serdes->chip_data->name, dsi->mode_flags);
 	}
 
 	ret = mipi_dsi_attach(dsi);
@@ -86,7 +90,7 @@
 		dev_info(serdes_bridge->dev->parent, "serdes sel_mipi %d\n",
 			 serdes_bridge->sel_mipi);
 		/* Attach primary DSI */
-		serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->dsi_node);
+		serdes_bridge->dsi = serdes_attach_dsi(serdes_bridge, serdes_bridge->remote_node);
 		if (IS_ERR(serdes_bridge->dsi))
 			return PTR_ERR(serdes_bridge->dsi);
 	}
@@ -167,14 +171,17 @@
 	if (serdes->chip_data->bridge_ops->init)
 		ret = serdes->chip_data->bridge_ops->init(serdes);
 
-	if (serdes->chip_data->serdes_type == TYPE_DES)
-		serdes_i2c_set_sequence(serdes);
-
-	if (serdes_bridge->panel)
-		ret = drm_panel_prepare(serdes_bridge->panel);
+	if (serdes->chip_data->serdes_type == TYPE_DES) {
+		if (serdes->chip_data->chip_init)
+			serdes->chip_data->chip_init(serdes);
+		ret = serdes_i2c_set_sequence(serdes);
+	}
 
 	if (serdes->chip_data->bridge_ops->pre_enable)
 		ret = serdes->chip_data->bridge_ops->pre_enable(serdes);
+
+	if (serdes_bridge->panel)
+		ret = drm_panel_prepare(serdes_bridge->panel);
 
 	serdes_set_pinctrl_default(serdes);
 
@@ -198,7 +205,8 @@
 		SERDES_DBG_MFD("%s: extcon is true\n", __func__);
 	}
 
-	SERDES_DBG_MFD("%s: %s ret=%d\n", __func__, dev_name(serdes->dev), ret);
+	SERDES_DBG_MFD("%s: %s-%s ret=%d\n", __func__, dev_name(serdes->dev),
+		       serdes->chip_data->name, ret);
 }
 
 static enum drm_connector_status
@@ -230,8 +238,8 @@
 	if (serdes_bridge->panel)
 		ret = drm_panel_get_modes(serdes_bridge->panel, connector);
 
-	SERDES_DBG_MFD("%s:name=%s, type=%d\n", __func__,
-		       serdes->chip_data->name, serdes->type);
+	SERDES_DBG_MFD("%s:name=%s, node=%s\n", __func__,
+		       serdes->chip_data->name, serdes_bridge->dev->of_node->name);
 
 	return ret;
 }
@@ -273,17 +281,22 @@
 		return dev_err_probe(dev, -ENODEV, "failed to get serdes regmap\n");
 
 	serdes_bridge->sel_mipi = of_property_read_bool(dev->parent->of_node, "sel-mipi");
-	if (serdes_bridge->sel_mipi) {
-		serdes_bridge->dsi_node = of_graph_get_remote_node(dev->parent->of_node, 0, -1);
-		if (!serdes_bridge->dsi_node)
-			return dev_err_probe(dev->parent, -ENODEV,
-					     "failed to get remote node for serdes dsi\n");
+	SERDES_DBG_MFD("%s: sel_mipi=%d\n", __func__, serdes_bridge->sel_mipi);
 
-		SERDES_DBG_MFD("%s: sel_mipi=%d\n", __func__, serdes_bridge->sel_mipi);
+	serdes_bridge->base_bridge.of_node = dev->parent->of_node;
+	serdes_bridge->remote_node = of_graph_get_remote_node(dev->parent->of_node, 0, -1);
+	if (!serdes_bridge->remote_node) {
+		serdes_bridge->base_bridge.of_node = dev->of_node;
+		SERDES_DBG_MFD("warning: failed to get remote node for serdes on %s\n",
+			       dev_name(dev->parent));
+		serdes_bridge->remote_node = of_graph_get_remote_node(dev->of_node, 0, -1);
+		if (!serdes_bridge->remote_node) {
+			return dev_err_probe(dev, -ENODEV,
+				     "failed to get remote node for serdes dsi\n");
+		}
 	}
 
 	serdes_bridge->base_bridge.funcs = &serdes_bridge_funcs;
-	serdes_bridge->base_bridge.of_node = dev->parent->of_node;
 	serdes_bridge->base_bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_MODES;
 
 	if (serdes_bridge->sel_mipi) {
@@ -291,7 +304,7 @@
 		SERDES_DBG_MFD("%s: type DRM_MODE_CONNECTOR_DSI\n", __func__);
 	} else if (serdes_bridge->parent->chip_data->connector_type) {
 		serdes_bridge->base_bridge.type = serdes_bridge->parent->chip_data->connector_type;
-		SERDES_DBG_MFD("%s: type 0x%x\n", __func__, serdes_bridge->base_bridge.type);
+		SERDES_DBG_MFD("%s: type %d\n", __func__, serdes_bridge->base_bridge.type);
 	} else {
 		serdes_bridge->base_bridge.type = DRM_MODE_CONNECTOR_eDP;
 		SERDES_DBG_MFD("%s: type DRM_MODE_CONNECTOR_LVDS\n", __func__);
@@ -319,9 +332,8 @@
 	{ .compatible = "rohm,bu18tl82-bridge", },
 	{ .compatible = "rohm,bu18rl82-bridge", },
 	{ .compatible = "maxim,max96745-bridge", },
-	{ .compatible = "maxim,max96752-bridge", },
 	{ .compatible = "maxim,max96755-bridge", },
-	{ .compatible = "maxim,max96772-bridge", },
+	{ .compatible = "maxim,max96789-bridge", },
 	{ .compatible = "rockchip,rkx111-bridge", },
 	{ .compatible = "rockchip,rkx121-bridge", },
 	{ }

--
Gitblit v1.6.2