From dbc4f10f1b6e05241455dcb8cbb22e7c241ccb38 Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Wed, 25 Mar 2020 17:36:49 +0800 Subject: [PATCH] drm/rockchip: rk618: Don't use dev_get_regmap() All child devices share the same one i2c_client, so the device resource (regmap) for the parent device may be changed when the child device initializes its own register map. So the regmap we get from dev_get_regmap() may not be what we want. Change-Id: I6b2d2d676f0406e8e78f79a308138401d6fe3b63 Signed-off-by: Wyon Bi --- drivers/gpu/drm/rockchip/rk618/rk618_lvds.c | 5 +---- drivers/gpu/drm/rockchip/rk618/rk618_rgb.c | 5 +---- drivers/gpu/drm/rockchip/rk618/rk618_scaler.c | 6 ++---- drivers/gpu/drm/rockchip/rk618/rk618_vif.c | 6 ++---- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_lvds.c b/drivers/gpu/drm/rockchip/rk618/rk618_lvds.c index a0ceeb618328..83ee5f093ac0 100644 --- a/drivers/gpu/drm/rockchip/rk618/rk618_lvds.c +++ b/drivers/gpu/drm/rockchip/rk618/rk618_lvds.c @@ -241,6 +241,7 @@ static int rk618_lvds_probe(struct platform_device *pdev) lvds->dev = dev; lvds->parent = rk618; + lvds->regmap = rk618->regmap; platform_set_drvdata(pdev, lvds); ret = rk618_lvds_parse_dt(lvds); @@ -249,10 +250,6 @@ static int rk618_lvds_probe(struct platform_device *pdev) return ret; } - lvds->regmap = dev_get_regmap(dev->parent, NULL); - if (!lvds->regmap) - return -ENODEV; - endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 1, -1); if (endpoint) { struct device_node *remote; diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_rgb.c b/drivers/gpu/drm/rockchip/rk618/rk618_rgb.c index a0187935008f..00b94f2ac93b 100644 --- a/drivers/gpu/drm/rockchip/rk618/rk618_rgb.c +++ b/drivers/gpu/drm/rockchip/rk618/rk618_rgb.c @@ -227,12 +227,9 @@ static int rk618_rgb_probe(struct platform_device *pdev) rgb->dev = dev; rgb->parent = rk618; + rgb->regmap = rk618->regmap; platform_set_drvdata(pdev, rgb); - rgb->regmap = dev_get_regmap(dev->parent, NULL); - if (!rgb->regmap) - return -ENODEV; - rgb->clock = devm_clk_get(dev, "rgb"); if (IS_ERR(rgb->clock)) { ret = PTR_ERR(rgb->clock); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_scaler.c b/drivers/gpu/drm/rockchip/rk618/rk618_scaler.c index c59da7bc4872..d2c9c1cb2fb8 100644 --- a/drivers/gpu/drm/rockchip/rk618/rk618_scaler.c +++ b/drivers/gpu/drm/rockchip/rk618/rk618_scaler.c @@ -350,6 +350,7 @@ static const struct drm_bridge_funcs rk618_scaler_bridge_funcs = { static int rk618_scaler_probe(struct platform_device *pdev) { + struct rk618 *rk618 = dev_get_drvdata(pdev->dev.parent); struct device *dev = &pdev->dev; struct rk618_scaler *scl; int ret; @@ -362,12 +363,9 @@ static int rk618_scaler_probe(struct platform_device *pdev) return -ENOMEM; scl->dev = dev; + scl->regmap = rk618->regmap; platform_set_drvdata(pdev, scl); - scl->regmap = dev_get_regmap(dev->parent, NULL); - if (!scl->regmap) - return -ENODEV; - scl->vif_clk = devm_clk_get(dev, "vif"); if (IS_ERR(scl->vif_clk)) { ret = PTR_ERR(scl->vif_clk); diff --git a/drivers/gpu/drm/rockchip/rk618/rk618_vif.c b/drivers/gpu/drm/rockchip/rk618/rk618_vif.c index a6f2203ed806..ca13750536fc 100644 --- a/drivers/gpu/drm/rockchip/rk618/rk618_vif.c +++ b/drivers/gpu/drm/rockchip/rk618/rk618_vif.c @@ -193,6 +193,7 @@ static const struct drm_bridge_funcs rk618_vif_bridge_funcs = { static int rk618_vif_probe(struct platform_device *pdev) { + struct rk618 *rk618 = dev_get_drvdata(pdev->dev.parent); struct device *dev = &pdev->dev; struct rk618_vif *vif; int ret; @@ -205,12 +206,9 @@ static int rk618_vif_probe(struct platform_device *pdev) return -ENOMEM; vif->dev = dev; + vif->regmap = rk618->regmap; platform_set_drvdata(pdev, vif); - vif->regmap = dev_get_regmap(dev->parent, NULL); - if (!vif->regmap) - return -ENODEV; - vif->vif_clk = devm_clk_get(dev, "vif"); if (IS_ERR(vif->vif_clk)) { ret = PTR_ERR(vif->vif_clk);