This patch moves of_drm_find_bridge call into probe.

It doesn't need to call of_drm_find_bridge function every time
bind callback is called. It's enough to call this funcation
at probe one time.

Suggested-by: Inki Dae <inki....@samsung.com>
Signed-off-by: Shuah Khan <shua...@osg.samsung.com>
Signed-off-by: Inki Dae <inki....@samsung.com>
---
 drivers/gpu/drm/exynos/exynos_drm_dsi.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c 
b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
index b6a46d9..2412b23 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
@@ -1661,7 +1661,6 @@ static int exynos_dsi_bind(struct device *dev, struct 
device *master,
        struct drm_encoder *encoder = dev_get_drvdata(dev);
        struct exynos_dsi *dsi = encoder_to_dsi(encoder);
        struct drm_device *drm_dev = data;
-       struct drm_bridge *bridge;
        int ret;
 
        ret = exynos_drm_crtc_get_pipe_from_type(drm_dev,
@@ -1685,12 +1684,6 @@ static int exynos_dsi_bind(struct device *dev, struct 
device *master,
                return ret;
        }
 
-       if (dsi->bridge_node) {
-               bridge = of_drm_find_bridge(dsi->bridge_node);
-               if (bridge)
-                       drm_bridge_attach(encoder, bridge, NULL);
-       }
-
        return mipi_dsi_host_register(&dsi->dsi_host);
 }
 
@@ -1798,6 +1791,18 @@ static int exynos_dsi_probe(struct platform_device *pdev)
 
        platform_set_drvdata(pdev, &dsi->encoder);
 
+       if (dsi->bridge_node) {
+               struct drm_bridge *bridge;
+
+               bridge = of_drm_find_bridge(dsi->bridge_node);
+               if (!bridge)
+                       return -EPROBE_DEFER;
+
+               of_node_put(dsi->bridge_node);
+               drm_bridge_attach(&dsi->encoder, bridge, NULL);
+       }
+
+
        pm_runtime_enable(dev);
 
        return component_add(dev, &exynos_dsi_component_ops);
@@ -1805,10 +1810,6 @@ static int exynos_dsi_probe(struct platform_device *pdev)
 
 static int exynos_dsi_remove(struct platform_device *pdev)
 {
-       struct exynos_dsi *dsi = platform_get_drvdata(pdev);
-
-       of_node_put(dsi->bridge_node);
-
        pm_runtime_disable(&pdev->dev);
 
        component_del(&pdev->dev, &exynos_dsi_component_ops);
-- 
1.9.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to