[PATCH 3/9] video: rockchip: dw_mipi_dsi: Get GRF base address from phandle

Jonas Karlman <[email protected]> Tue, 4 Aug 2026 10:57:12 +0000
Newsgroups gmane.comp.boot-loaders.u-boot
Message-ID <[email protected]>
The GRF syscon is referenced using the rockchip,grf prop in SoC DTs.

Change to use syscon_regmap_lookup_by_phandle() to get a GRF regmap
instead of using the inconvenient syscon_get_first_range() method.

This has no intended behavior change, all affected SoC DTs have the
rockchip,grf reference and the values being written already contain
correct write-enable mask.

Fixes: bd6375c5511c ("video: rockchip: dw_mipi_dsi: Fix GRF access")
Signed-off-by: Jonas Karlman <[email protected]>
---
Please note that this has only been compile tested.

Cc: Chris Morgan <[email protected]>
Cc: Ondrej Jirman <[email protected]>
---
 drivers/video/rockchip/dw_mipi_dsi_rockchip.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/video/rockchip/dw_mipi_dsi_rockchip.c b/drivers/video/rockchip/dw_mipi_dsi_rockchip.c
index fa512173510b..2e5bcb74589a 100644
--- a/drivers/video/rockchip/dw_mipi_dsi_rockchip.c
+++ b/drivers/video/rockchip/dw_mipi_dsi_rockchip.c
@@ -17,6 +17,7 @@
 #include <mipi_dsi.h>
 #include <panel.h>
 #include <phy-mipi-dphy.h>
+#include <regmap.h>
 #include <reset.h>
 #include <syscon.h>
 #include <video_bridge.h>
@@ -31,7 +32,6 @@
 #include <linux/time.h>
 
 #include <asm/arch-rockchip/clock.h>
-#include <asm/arch-rockchip/hardware.h>
 
 /*
  * DSI wrapper registers & bit definitions
@@ -224,7 +224,7 @@ struct dw_rockchip_dsi_priv {
 	struct mipi_dsi_device device;
 	void __iomem *base;
 	struct udevice *panel;
-	void __iomem *grf;
+	struct regmap *grf;
 
 	/* Optional external dphy */
 	struct phy phy;
@@ -782,13 +782,13 @@ static int dw_mipi_dsi_rockchip_set_bl(struct udevice *dev, int percent)
 static void dw_mipi_dsi_rockchip_config(struct dw_rockchip_dsi_priv *dsi)
 {
 	if (dsi->cdata->lanecfg1_grf_reg)
-		rk_setreg(dsi->grf + dsi->cdata->lanecfg1_grf_reg, dsi->cdata->lanecfg1);
+		regmap_write(dsi->grf, dsi->cdata->lanecfg1_grf_reg, dsi->cdata->lanecfg1);
 
 	if (dsi->cdata->lanecfg2_grf_reg)
-		rk_setreg(dsi->grf + dsi->cdata->lanecfg2_grf_reg, dsi->cdata->lanecfg2);
+		regmap_write(dsi->grf, dsi->cdata->lanecfg2_grf_reg, dsi->cdata->lanecfg2);
 
 	if (dsi->cdata->enable_grf_reg)
-		rk_setreg(dsi->grf + dsi->cdata->enable_grf_reg, dsi->cdata->enable);
+		regmap_write(dsi->grf, dsi->cdata->enable_grf_reg, dsi->cdata->enable);
 }
 
 static int dw_mipi_dsi_rockchip_bind(struct udevice *dev)
@@ -821,7 +821,11 @@ static int dw_mipi_dsi_rockchip_probe(struct udevice *dev)
 		return -EINVAL;
 	}
 
-	priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+	priv->grf = syscon_regmap_lookup_by_phandle(dev, "rockchip,grf");
+	if (IS_ERR(priv->grf)) {
+		dev_err(dev, "unable to find rockchip,grf regmap\n");
+		return PTR_ERR(priv->grf);
+	}
 
 	i = 0;
 	while (cdata[i].reg) {
-- 
2.54.0