* [PATCH v4 1/3] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge()
2026-11-05 10:32 [PATCH v4 0/3] drm: remove deprecated *_of_get_bridge() from non-OF drivers Luca Ceresoli
@ 2026-11-05 10:32 ` Luca Ceresoli
2026-11-05 10:32 ` [PATCH v4 2/3] drm/vc4: dsi: " Luca Ceresoli
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Luca Ceresoli @ 2026-11-05 10:32 UTC (permalink / raw)
To: Maxime Ripard, Dave Stevenson, Maíra Canal,
Raspberry Pi Kernel Maintenance, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Paul Cercueil, Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel,
linux-kernel, Luca Ceresoli
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.
drm_panel.h becomes unused, drop the include.
Also update a comment that is now obvious: now panels are just bridges.
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Changes in v3:
- re-add and update comment
---
drivers/gpu/drm/vc4/vc4_dpi.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dpi.c b/drivers/gpu/drm/vc4/vc4_dpi.c
index 686903b8864b..e0d565de42b5 100644
--- a/drivers/gpu/drm/vc4/vc4_dpi.c
+++ b/drivers/gpu/drm/vc4/vc4_dpi.c
@@ -16,7 +16,6 @@
#include <drm/drm_drv.h>
#include <drm/drm_edid.h>
#include <drm/drm_of.h>
-#include <drm/drm_panel.h>
#include <drm/drm_print.h>
#include <drm/drm_probe_helper.h>
#include <linux/clk.h>
@@ -278,16 +277,13 @@ static const struct of_device_id vc4_dpi_dt_match[] = {
{}
};
-/* Sets up the next link in the display chain, whether it's a panel or
- * a bridge.
- */
+/* Sets up the next link in the display chain */
static int vc4_dpi_init_bridge(struct vc4_dpi *dpi)
{
- struct drm_device *drm = dpi->encoder.base.dev;
struct device *dev = &dpi->pdev->dev;
- struct drm_bridge *bridge;
- bridge = drmm_of_get_bridge(drm, dev->of_node, 0, 0);
+ struct drm_bridge *bridge __free(drm_bridge_put) =
+ of_drm_get_bridge_by_endpoint(dev->of_node, 0, 0);
if (IS_ERR(bridge)) {
/* If nothing was connected in the DT, that's not an
* error.
--
2.56.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v4 2/3] drm/vc4: dsi: stop using deprecated drmm_of_get_bridge()
2026-11-05 10:32 [PATCH v4 0/3] drm: remove deprecated *_of_get_bridge() from non-OF drivers Luca Ceresoli
2026-11-05 10:32 ` [PATCH v4 1/3] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
@ 2026-11-05 10:32 ` Luca Ceresoli
2026-11-05 10:32 ` [PATCH v4 3/3] drm/vc4: dsi: remove unnecessary intermediate pointer computation Luca Ceresoli
2026-11-05 23:20 ` [PATCH v4 0/3] drm: remove deprecated *_of_get_bridge() from non-OF drivers Maíra Canal
3 siblings, 0 replies; 7+ messages in thread
From: Luca Ceresoli @ 2026-11-05 10:32 UTC (permalink / raw)
To: Maxime Ripard, Dave Stevenson, Maíra Canal,
Raspberry Pi Kernel Maintenance, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Paul Cercueil, Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel,
linux-kernel, Luca Ceresoli
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.
Also remove an outdated comment: now panels are just bridges.
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Changes in v4:
- Fix next_bridge leak on component rebind (sashiko)
- Remove outdated comment (Maíra)
Changes in v3:
- fix bridge reference leak in error path
---
drivers/gpu/drm/vc4/vc4_dsi.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 5ed3c35ee9c7..581b54e04ce4 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>
@@ -554,7 +553,6 @@ struct vc4_dsi {
struct platform_device *pdev;
- struct drm_bridge *out_bridge;
struct drm_bridge bridge;
void __iomem *regs;
@@ -1163,8 +1161,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);
}
@@ -1748,9 +1745,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);
@@ -1774,15 +1772,27 @@ 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;
}
+static void vc4_dsi_unbind(struct device *dev, struct device *master, void *data)
+{
+ struct vc4_dsi *dsi = dev_get_drvdata(dev);
+
+ drm_bridge_clear_and_put(&dsi->bridge.next_bridge);
+}
+
static const struct component_ops vc4_dsi_ops = {
.bind = vc4_dsi_bind,
+ .unbind = vc4_dsi_unbind,
};
static int vc4_dsi_dev_probe(struct platform_device *pdev)
--
2.56.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v4 3/3] drm/vc4: dsi: remove unnecessary intermediate pointer computation
2026-11-05 10:32 [PATCH v4 0/3] drm: remove deprecated *_of_get_bridge() from non-OF drivers Luca Ceresoli
2026-11-05 10:32 ` [PATCH v4 1/3] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
2026-11-05 10:32 ` [PATCH v4 2/3] drm/vc4: dsi: " Luca Ceresoli
@ 2026-11-05 10:32 ` Luca Ceresoli
2026-11-05 23:27 ` Maíra Canal
2026-11-05 23:20 ` [PATCH v4 0/3] drm: remove deprecated *_of_get_bridge() from non-OF drivers Maíra Canal
3 siblings, 1 reply; 7+ messages in thread
From: Luca Ceresoli @ 2026-11-05 10:32 UTC (permalink / raw)
To: Maxime Ripard, Dave Stevenson, Maíra Canal,
Raspberry Pi Kernel Maintenance, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Paul Cercueil, Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel,
linux-kernel, Luca Ceresoli
This function computes the 'dsi' pointer from the passed 'bridge' pointer,
but uses 'dsi' just to obtain the same 'bridge' pointer. Remove the
unnecessary pointer dance, just use the passed 'bridge' pointer.
Suggested-by: Maíra Canal <mcanal@igalia.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
New patch in v4
---
drivers/gpu/drm/vc4/vc4_dsi.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
index 581b54e04ce4..ec008f766dd5 100644
--- a/drivers/gpu/drm/vc4/vc4_dsi.c
+++ b/drivers/gpu/drm/vc4/vc4_dsi.c
@@ -1159,10 +1159,7 @@ static int vc4_dsi_bridge_attach(struct drm_bridge *bridge,
struct drm_encoder *encoder,
enum drm_bridge_attach_flags flags)
{
- struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge);
-
- return drm_bridge_attach(encoder, dsi->bridge.next_bridge,
- &dsi->bridge, flags);
+ return drm_bridge_attach(encoder, bridge->next_bridge, bridge, flags);
}
static ssize_t vc4_dsi_host_transfer(struct mipi_dsi_host *host,
--
2.56.0
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v4 3/3] drm/vc4: dsi: remove unnecessary intermediate pointer computation
2026-11-05 10:32 ` [PATCH v4 3/3] drm/vc4: dsi: remove unnecessary intermediate pointer computation Luca Ceresoli
@ 2026-11-05 23:27 ` Maíra Canal
2026-11-06 14:01 ` Luca Ceresoli
0 siblings, 1 reply; 7+ messages in thread
From: Maíra Canal @ 2026-11-05 23:27 UTC (permalink / raw)
To: Luca Ceresoli, Maxime Ripard, Dave Stevenson,
Raspberry Pi Kernel Maintenance, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Paul Cercueil, Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel,
linux-kernel
Hi Luca,
On 05/11/26 07:32, Luca Ceresoli wrote:
> This function computes the 'dsi' pointer from the passed 'bridge' pointer,
> but uses 'dsi' just to obtain the same 'bridge' pointer. Remove the
> unnecessary pointer dance, just use the passed 'bridge' pointer.
>
> Suggested-by: Maíra Canal <mcanal@igalia.com>
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>
> ---
>
> New patch in v4
> ---
> drivers/gpu/drm/vc4/vc4_dsi.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
> index 581b54e04ce4..ec008f766dd5 100644
> --- a/drivers/gpu/drm/vc4/vc4_dsi.c
> +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
> @@ -1159,10 +1159,7 @@ static int vc4_dsi_bridge_attach(struct drm_bridge *bridge,
> struct drm_encoder *encoder,
> enum drm_bridge_attach_flags flags)
> {
> - struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge);
> -
> - return drm_bridge_attach(encoder, dsi->bridge.next_bridge,
> - &dsi->bridge, flags);
> + return drm_bridge_attach(encoder, bridge->next_bridge, bridge, flags);
I wonder if we should turn this into a DRM helper... I noticed that
other drivers follow this exact same pattern. The following files have
such pattern: vs_bridge.c, meson_encoder_hdmi.c, rzg2l_mipi_dsi.c, etc.
Anyway, just a suggestion. I already pushed the series to drm-misc-next.
Best regards,
- Maíra
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v4 3/3] drm/vc4: dsi: remove unnecessary intermediate pointer computation
2026-11-05 23:27 ` Maíra Canal
@ 2026-11-06 14:01 ` Luca Ceresoli
0 siblings, 0 replies; 7+ messages in thread
From: Luca Ceresoli @ 2026-11-06 14:01 UTC (permalink / raw)
To: Maíra Canal, Luca Ceresoli, Maxime Ripard, Dave Stevenson,
Raspberry Pi Kernel Maintenance, Maarten Lankhorst,
Thomas Zimmermann, David Airlie, Simona Vetter
Cc: Paul Cercueil, Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel,
linux-kernel
Hello Maíra,
On Fri Nov 6, 2026 at 12:27 AM CET, Maíra Canal wrote:
> Hi Luca,
>
> On 05/11/26 07:32, Luca Ceresoli wrote:
>> This function computes the 'dsi' pointer from the passed 'bridge' pointer,
>> but uses 'dsi' just to obtain the same 'bridge' pointer. Remove the
>> unnecessary pointer dance, just use the passed 'bridge' pointer.
>>
>> Suggested-by: Maíra Canal <mcanal@igalia.com>
>> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
>>
>> ---
>>
>> New patch in v4
>> ---
>> drivers/gpu/drm/vc4/vc4_dsi.c | 5 +----
>> 1 file changed, 1 insertion(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/vc4/vc4_dsi.c b/drivers/gpu/drm/vc4/vc4_dsi.c
>> index 581b54e04ce4..ec008f766dd5 100644
>> --- a/drivers/gpu/drm/vc4/vc4_dsi.c
>> +++ b/drivers/gpu/drm/vc4/vc4_dsi.c
>> @@ -1159,10 +1159,7 @@ static int vc4_dsi_bridge_attach(struct drm_bridge *bridge,
>> struct drm_encoder *encoder,
>> enum drm_bridge_attach_flags flags)
>> {
>> - struct vc4_dsi *dsi = bridge_to_vc4_dsi(bridge);
>> -
>> - return drm_bridge_attach(encoder, dsi->bridge.next_bridge,
>> - &dsi->bridge, flags);
>> + return drm_bridge_attach(encoder, bridge->next_bridge, bridge, flags);
>
> I wonder if we should turn this into a DRM helper... I noticed that
> other drivers follow this exact same pattern. The following files have
> such pattern: vs_bridge.c, meson_encoder_hdmi.c, rzg2l_mipi_dsi.c, etc.
Good point. I also think this could be factored out to a common
function. However for the time being I haven't done any steps in that
direction because I'm soon going to propose a .get_next_bridge bridge func
in [0], and I suspect that addition could further improve bridge attach
management. So I'm waiting until the get_next_bridge work is settled before
doing further steps.
> Anyway, just a suggestion. I already pushed the series to drm-misc-next.
Thanks!
[0] https://lore.kernel.org/lkml/20261001-drm-bridge-hotplug-v2-17-8e34986dcb68@bootlin.com/
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 0/3] drm: remove deprecated *_of_get_bridge() from non-OF drivers
2026-11-05 10:32 [PATCH v4 0/3] drm: remove deprecated *_of_get_bridge() from non-OF drivers Luca Ceresoli
` (2 preceding siblings ...)
2026-11-05 10:32 ` [PATCH v4 3/3] drm/vc4: dsi: remove unnecessary intermediate pointer computation Luca Ceresoli
@ 2026-11-05 23:20 ` Maíra Canal
3 siblings, 0 replies; 7+ messages in thread
From: Maíra Canal @ 2026-11-05 23:20 UTC (permalink / raw)
To: Maxime Ripard, Dave Stevenson, Raspberry Pi Kernel Maintenance,
Maarten Lankhorst, Thomas Zimmermann, David Airlie,
Simona Vetter, Luca Ceresoli
Cc: Maíra Canal, Paul Cercueil, Hui Pu, Ian Ray,
Thomas Petazzoni, dri-devel, linux-kernel
On Thu, 05 Nov 2026 11:32:04 +0100, Luca Ceresoli wrote:
> Replace the deprecated *_of_get_bridge() calls with
> of_drm_get_bridge_by_endpoint() for all drivers which can be built without
> CONFIG_OF.
>
> Some of those drivers had a build failure for configs without
> CONFIG_OF. This series used have fixes for those failures plus other
> patches to convert all other such drivers to
> of_drm_get_bridge_by_endpoint().
>
> [...]
Applied, thanks!
[1/3] drm/vc4: dpi: stop using deprecated drmm_of_get_bridge()
commit: 5c18e4b11829d9228510d9580027598b54d382e7
[2/3] drm/vc4: dsi: stop using deprecated drmm_of_get_bridge()
commit: 4a38a538775e072fee707aa28aea5ccd50941796
[3/3] drm/vc4: dsi: remove unnecessary intermediate pointer computation
commit: 41ecf852c07391687beb129e12a231760b5d783f
Best regards,
- Maíra
^ permalink raw reply [flat|nested] 7+ messages in thread