drmm_of_get_bridge() is deprecated, switch to
of_drm_get_bridge_by_endpoint(). As of_drm_get_bridge_by_endpoint() returns
a refcounted bridge, ensure it is put by using bridge.next_bridge.

drm_panel.h becomes unused, drop the include.

Signed-off-by: Luca Ceresoli <[email protected]>

---

Changes in v3:
- fix bridge reference leak in error path
---
 drivers/gpu/drm/vc4/vc4_dsi.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 0148f2befed1..675bd0fc1391 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -35,7 +35,6 @@
 #include <drm/drm_edid.h>
 #include <drm/drm_mipi_dsi.h>
 #include <drm/drm_of.h>
-#include <drm/drm_panel.h>
 #include <drm/drm_print.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_simple_kms_helper.h>
@@ -555,7 +554,6 @@ struct vc4_dsi {
 
        struct platform_device *pdev;
 
-       struct drm_bridge *out_bridge;
        struct drm_bridge bridge;
 
        void __iomem *regs;
@@ -1165,7 +1163,7 @@ static int vc4_dsi_bridge_attach(struct drm_bridge 
*bridge,
        struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge);
 
        /* Attach the panel or bridge to the dsi bridge */
-       return drm_bridge_attach(encoder, dsi->out_bridge,
+       return drm_bridge_attach(encoder, dsi->bridge.next_bridge,
                                 &dsi->bridge, flags);
 }
 
@@ -1749,9 +1747,10 @@ static int vc4_dsi_bind(struct device *dev, struct 
device *master, void *data)
                return ret;
        }
 
-       dsi->out_bridge = drmm_of_get_bridge(drm, dev->of_node, 0, 0);
-       if (IS_ERR(dsi->out_bridge))
-               return PTR_ERR(dsi->out_bridge);
+       struct drm_bridge *next_bridge __free(drm_bridge_put) =
+               of_drm_get_bridge_by_endpoint(dev->of_node, 0, 0);
+       if (IS_ERR(next_bridge))
+               return PTR_ERR(next_bridge);
 
        /* The esc clock rate is supposed to always be 100Mhz. */
        ret = clk_set_rate(dsi->escape_clock, 100 * 1000000);
@@ -1775,9 +1774,13 @@ static int vc4_dsi_bind(struct device *dev, struct 
device *master, void *data)
        if (ret)
                return ret;
 
+       dsi->bridge.next_bridge = drm_bridge_get(next_bridge);
+
        ret = drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
-       if (ret)
+       if (ret) {
+               drm_bridge_clear_and_put(&dsi->bridge.next_bridge);
                return ret;
+       }
 
        return 0;
 }

-- 
2.56.0

Reply via email to