Re: [PATCH v3 2/3] drm/vc4: dsi: stop using deprecated drmm_of_get_bridge()

From: Maíra Canal

Date: Sat Oct 24 2026 - 08:57:30 EST


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 <luca.ceresoli@xxxxxxxxxxx>

---

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