Hi Luca,

On 13/10/26 12:23, Luca Ceresoli wrote:
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);

I believe you can delete *dsi

/* 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,

and use drm_bridge_attach(encoder, bridge->next_bridge, bridge, flags).
Also, I believe the comment is now redundant as panels are just bridges.

Apart from these nits, could you also address Sashiko's feedback?

Best regards,
- Maíra

                                 &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;
  }


Reply via email to