* [PATCH 0/3] drm: remove drmm_of_get_bridge()
@ 2026-11-06 16:17 Luca Ceresoli
2026-11-06 16:17 ` [PATCH 1/3] drm: adp: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Luca Ceresoli @ 2026-11-06 16:17 UTC (permalink / raw)
To: Sasha Finkelstein, Janne Grunau, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Neil Armstrong, Jessica Zhang, Jonathan Corbet, Shuah Khan,
Randy Dunlap, Dmitry Baryshkov
Cc: Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel, asahi,
linux-kernel, linux-doc, Luca Ceresoli
drmm_of_get_bridge() is deprecated. By now it is just a complicated wrapper
to of_drm_get_bridge_by_endpoint(), and it does not implement bridge
refcounting. Replace the only user and remove it.
== Grand plan
This is part of the work to support hotplug of DRM bridges.
Here's the work breakdown (➜ marks the current series):
1. ➜ add refcounting to DRM bridges struct drm_bridge,
based on devm_drm_bridge_alloc()
A. ✔ add new alloc API and refcounting (v6.16)
B. ✔ convert all bridge drivers to new API (v6.17)
C. ✔ kunit tests (v6.17)
D. ✔ add get/put to drm_bridge_add/remove() + attach/detach()
and warn on old allocation pattern (v6.17)
E. ➜ add get/put on drm_bridge accessors
1. ✔ drm_bridge_chain_get_first_bridge(), add cleanup action (v6.18)
2. ✔ drm_bridge_get_prev_bridge() (v6.18)
3. ✔ drm_bridge_get_next_bridge() (v6.19)
4. ✔ drm_for_each_bridge_in_chain() (v6.19)
5. ✔ drm_bridge_connector_init (v6.19)
6. ✔ protect encoder bridge chain with a mutex (v7.2)
7. ✔ of_drm_find_bridge
a. ✔ add of_drm_get_bridge() (v7.0),
convert basic direct users (v7.0-v7.1)
b. ✔ convert direct of_drm_get_bridge() users, part 2 (v7.0)
c. ✔ convert direct of_drm_get_bridge() users, part 3 (v7.0)
d. ✔ convert direct of_drm_get_bridge() users, part 4 (v7.1-v7.2)
e. ✔ bridge-only drm_of_find_panel_or_bridge() users (v7.2)
8. ➜ panel_bridge lifetime
a. ✔ cleanup DRM_PANEL in bridge drivers (v7.4)
b. ✔ embed a drm_bridge in every drm_panel (v7.4)
c. ✔ remove *_of_get_bridge(): non-OF drivers (v7.5)
d. ➜ remove drmm_of_get_bridge()
e. remove devm_drm_of_get_bridge()
9. ✔ enforce drm_bridge_add before drm_bridge_attach (v6.19)
F. ✔ debugfs improvements
1. ✔ add top-level 'bridges' file (v6.16)
2. ✔ show refcount and list lingering bridges (v6.19)
2. ✔ handle gracefully atomic updates during bridge removal
A. ✔ Add drm_bridge_enter/exit() to protect device resources (v7.0)
B. ✔ Add drm_bridge_clear_and_put() (v7.1)
3. ✕ DSI host-device driver interaction
4. ✔ removing the need for the "always-disconnected" connector
5. ✔ Migrate i.MX LCDIF driver to bridge-connector (v7.2)
6. … DRM bridge hotplug
A. … Bridge hotplug management in the DRM core
1. ✔ bridge-connector: attach encoder to the connector (v7.2)
2. … drm bridge hotplug
B. Device tree description
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Luca Ceresoli (3):
drm: adp: stop using deprecated drmm_of_get_bridge()
drm/panel: remove drmm_of_get_bridge()
drm/todo: remove drmm_of_get_bridge()
Documentation/gpu/todo.rst | 1 -
drivers/gpu/drm/adp/adp_drv.c | 13 +++++++++----
drivers/gpu/drm/drm_panel.c | 40 ----------------------------------------
include/drm/drm_panel.h | 10 ----------
4 files changed, 9 insertions(+), 55 deletions(-)
---
base-commit: 4524052b65a75166c1c557921c786bd82302de13
change-id: 20261106-drm-panel_bridge-remove-drmm_of_get_bridge-791bd0f0ad97
Best regards,
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/3] drm: adp: stop using deprecated drmm_of_get_bridge()
2026-11-06 16:17 [PATCH 0/3] drm: remove drmm_of_get_bridge() Luca Ceresoli
@ 2026-11-06 16:17 ` Luca Ceresoli
2026-11-06 16:17 ` [PATCH 2/3] drm/panel: remove drmm_of_get_bridge() Luca Ceresoli
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Luca Ceresoli @ 2026-11-06 16:17 UTC (permalink / raw)
To: Sasha Finkelstein, Janne Grunau, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Neil Armstrong, Jessica Zhang, Jonathan Corbet, Shuah Khan,
Randy Dunlap, Dmitry Baryshkov
Cc: Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel, asahi,
linux-kernel, linux-doc, 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 the reference is put on later bind error and on
unbind.
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
drivers/gpu/drm/adp/adp_drv.c | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/adp/adp_drv.c b/drivers/gpu/drm/adp/adp_drv.c
index fdf0e6316175..1c4c39695e42 100644
--- a/drivers/gpu/drm/adp/adp_drv.c
+++ b/drivers/gpu/drm/adp/adp_drv.c
@@ -517,7 +517,7 @@ static int adp_drm_bind(struct device *dev)
writel(ADP_CTRL_FIFO_ON, adp->fe + ADP_CTRL);
- adp->next_bridge = drmm_of_get_bridge(&adp->drm, dev->of_node, 0, 0);
+ adp->next_bridge = of_drm_get_bridge_by_endpoint(dev->of_node, 0, 0);
if (IS_ERR(adp->next_bridge)) {
dev_err(dev, "failed to find next bridge");
return PTR_ERR(adp->next_bridge);
@@ -525,17 +525,21 @@ static int adp_drm_bind(struct device *dev)
err = adp_setup_mode_config(adp);
if (err < 0)
- return err;
+ goto err_put_next_bridge;
err = request_irq(adp->fe_irq, adp_fe_irq, 0, "adp-fe", adp);
if (err)
- return err;
+ goto err_put_next_bridge;
err = drm_dev_register(&adp->drm, 0);
if (err)
- return err;
+ goto err_put_next_bridge;
return 0;
+
+err_put_next_bridge:
+ drm_bridge_clear_and_put(&adp->next_bridge);
+ return err;
}
static void adp_drm_unbind(struct device *dev)
@@ -546,6 +550,7 @@ static void adp_drm_unbind(struct device *dev)
drm_dev_unregister(drm);
drm_atomic_helper_shutdown(drm);
free_irq(adp->fe_irq, adp);
+ drm_bridge_clear_and_put(&adp->next_bridge);
}
static const struct component_master_ops adp_master_ops = {
--
2.56.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/3] drm/panel: remove drmm_of_get_bridge()
2026-11-06 16:17 [PATCH 0/3] drm: remove drmm_of_get_bridge() Luca Ceresoli
2026-11-06 16:17 ` [PATCH 1/3] drm: adp: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
@ 2026-11-06 16:17 ` Luca Ceresoli
2026-11-06 16:17 ` [PATCH 3/3] drm/todo: " Luca Ceresoli
2026-11-08 17:26 ` [PATCH 0/3] drm: " Joshua Peisach
3 siblings, 0 replies; 5+ messages in thread
From: Luca Ceresoli @ 2026-11-06 16:17 UTC (permalink / raw)
To: Sasha Finkelstein, Janne Grunau, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Neil Armstrong, Jessica Zhang, Jonathan Corbet, Shuah Khan,
Randy Dunlap, Dmitry Baryshkov
Cc: Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel, asahi,
linux-kernel, linux-doc, Luca Ceresoli
This function is deprecated and has no remaining users.
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
drivers/gpu/drm/drm_panel.c | 40 ----------------------------------------
include/drm/drm_panel.h | 10 ----------
2 files changed, 50 deletions(-)
diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
index 560ea57591bd..3a633beed090 100644
--- a/drivers/gpu/drm/drm_panel.c
+++ b/drivers/gpu/drm/drm_panel.c
@@ -526,46 +526,6 @@ struct drm_bridge *devm_drm_of_get_bridge(struct device *dev,
}
EXPORT_SYMBOL(devm_drm_of_get_bridge);
-/**
- * drmm_of_get_bridge - Return next bridge in the chain
- * @drm: device to tie the bridge lifetime to
- * @np: device tree node containing encoder output ports
- * @port: port in the device tree node
- * @endpoint: endpoint in the device tree node
- *
- * This function is deprecated. A drm_bridge is embedded into every panel.
- * Don't use it in new drivers and convert your driver to
- * of_drm_get_bridge_by_endpoint().
- *
- * Given a DT node's port and endpoint number, finds the connected node
- * and returns the associated bridge if any, or creates and returns a
- * drm panel bridge instance if a panel is connected.
- *
- * Returns a drmm managed pointer to the bridge if successful, or an error
- * pointer otherwise.
- */
-struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm,
- struct device_node *np,
- u32 port, u32 endpoint)
-{
- struct drm_bridge *bridge;
- struct drm_panel *panel;
- int ret;
-
- ret = drm_of_find_panel_or_bridge(np, port, endpoint,
- &panel, &bridge);
- if (ret)
- return ERR_PTR(ret);
-
- if (panel) {
- bridge = drmm_panel_bridge_add(drm, panel);
- drm_panel_put(panel);
- }
-
- return bridge;
-}
-EXPORT_SYMBOL(drmm_of_get_bridge);
-
#endif
/**
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
index 58113ea7d63a..28ecbf2c8a29 100644
--- a/include/drm/drm_panel.h
+++ b/include/drm/drm_panel.h
@@ -434,8 +434,6 @@ static inline int drm_panel_bridge_set_orientation(struct drm_connector *connect
#if defined(CONFIG_OF) && defined(CONFIG_DRM_PANEL_BRIDGE)
struct drm_bridge *devm_drm_of_get_bridge(struct device *dev, struct device_node *node,
u32 port, u32 endpoint);
-struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm, struct device_node *node,
- u32 port, u32 endpoint);
#else
static inline struct drm_bridge *devm_drm_of_get_bridge(struct device *dev,
struct device_node *node,
@@ -444,14 +442,6 @@ static inline struct drm_bridge *devm_drm_of_get_bridge(struct device *dev,
{
return ERR_PTR(-ENODEV);
}
-
-static inline struct drm_bridge *drmm_of_get_bridge(struct drm_device *drm,
- struct device_node *node,
- u32 port,
- u32 endpoint)
-{
- return ERR_PTR(-ENODEV);
-}
#endif
#endif
--
2.56.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] drm/todo: remove drmm_of_get_bridge()
2026-11-06 16:17 [PATCH 0/3] drm: remove drmm_of_get_bridge() Luca Ceresoli
2026-11-06 16:17 ` [PATCH 1/3] drm: adp: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
2026-11-06 16:17 ` [PATCH 2/3] drm/panel: remove drmm_of_get_bridge() Luca Ceresoli
@ 2026-11-06 16:17 ` Luca Ceresoli
2026-11-08 17:26 ` [PATCH 0/3] drm: " Joshua Peisach
3 siblings, 0 replies; 5+ messages in thread
From: Luca Ceresoli @ 2026-11-06 16:17 UTC (permalink / raw)
To: Sasha Finkelstein, Janne Grunau, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Neil Armstrong, Jessica Zhang, Jonathan Corbet, Shuah Khan,
Randy Dunlap, Dmitry Baryshkov
Cc: Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel, asahi,
linux-kernel, linux-doc, Luca Ceresoli
This function has been removed.
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
---
Documentation/gpu/todo.rst | 1 -
1 file changed, 1 deletion(-)
diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst
index e6d36f8da086..de4de6f7a0b4 100644
--- a/Documentation/gpu/todo.rst
+++ b/Documentation/gpu/todo.rst
@@ -477,7 +477,6 @@ transparently, and the are deprecated.
The funcions to remove are:
- drm_panel_bridge_add_typed()
- devm_drm_of_get_bridge()
- - drmm_of_get_bridge()
- drm_panel_bridge_remove()
- drmm_drm_panel_bridge_release()
- devm_drm_panel_bridge_release()
--
2.56.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/3] drm: remove drmm_of_get_bridge()
2026-11-06 16:17 [PATCH 0/3] drm: remove drmm_of_get_bridge() Luca Ceresoli
` (2 preceding siblings ...)
2026-11-06 16:17 ` [PATCH 3/3] drm/todo: " Luca Ceresoli
@ 2026-11-08 17:26 ` Joshua Peisach
3 siblings, 0 replies; 5+ messages in thread
From: Joshua Peisach @ 2026-11-08 17:26 UTC (permalink / raw)
To: Luca Ceresoli, Sasha Finkelstein, Janne Grunau,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
David Airlie, Simona Vetter, Neil Armstrong, Jessica Zhang,
Jonathan Corbet, Shuah Khan, Randy Dunlap, Dmitry Baryshkov
Cc: Hui Pu, Ian Ray, Thomas Petazzoni, dri-devel, asahi,
linux-kernel, linux-doc
On Fri Nov 6, 2026 at 11:17 AM EST, Luca Ceresoli wrote:
> drmm_of_get_bridge() is deprecated. By now it is just a complicated wrapper
> to of_drm_get_bridge_by_endpoint(), and it does not implement bridge
> refcounting. Replace the only user and remove it.
>
> == Grand plan
>
> This is part of the work to support hotplug of DRM bridges.
>
> Here's the work breakdown (➜ marks the current series):
>
> 1. ➜ add refcounting to DRM bridges struct drm_bridge,
> based on devm_drm_bridge_alloc()
> A. ✔ add new alloc API and refcounting (v6.16)
> B. ✔ convert all bridge drivers to new API (v6.17)
> C. ✔ kunit tests (v6.17)
> D. ✔ add get/put to drm_bridge_add/remove() + attach/detach()
> and warn on old allocation pattern (v6.17)
> E. ➜ add get/put on drm_bridge accessors
> 1. ✔ drm_bridge_chain_get_first_bridge(), add cleanup action (v6.18)
> 2. ✔ drm_bridge_get_prev_bridge() (v6.18)
> 3. ✔ drm_bridge_get_next_bridge() (v6.19)
> 4. ✔ drm_for_each_bridge_in_chain() (v6.19)
> 5. ✔ drm_bridge_connector_init (v6.19)
> 6. ✔ protect encoder bridge chain with a mutex (v7.2)
> 7. ✔ of_drm_find_bridge
> a. ✔ add of_drm_get_bridge() (v7.0),
> convert basic direct users (v7.0-v7.1)
> b. ✔ convert direct of_drm_get_bridge() users, part 2 (v7.0)
> c. ✔ convert direct of_drm_get_bridge() users, part 3 (v7.0)
> d. ✔ convert direct of_drm_get_bridge() users, part 4 (v7.1-v7.2)
> e. ✔ bridge-only drm_of_find_panel_or_bridge() users (v7.2)
> 8. ➜ panel_bridge lifetime
> a. ✔ cleanup DRM_PANEL in bridge drivers (v7.4)
> b. ✔ embed a drm_bridge in every drm_panel (v7.4)
> c. ✔ remove *_of_get_bridge(): non-OF drivers (v7.5)
> d. ➜ remove drmm_of_get_bridge()
> e. remove devm_drm_of_get_bridge()
> 9. ✔ enforce drm_bridge_add before drm_bridge_attach (v6.19)
> F. ✔ debugfs improvements
> 1. ✔ add top-level 'bridges' file (v6.16)
> 2. ✔ show refcount and list lingering bridges (v6.19)
> 2. ✔ handle gracefully atomic updates during bridge removal
> A. ✔ Add drm_bridge_enter/exit() to protect device resources (v7.0)
> B. ✔ Add drm_bridge_clear_and_put() (v7.1)
> 3. ✕ DSI host-device driver interaction
> 4. ✔ removing the need for the "always-disconnected" connector
> 5. ✔ Migrate i.MX LCDIF driver to bridge-connector (v7.2)
> 6. … DRM bridge hotplug
> A. … Bridge hotplug management in the DRM core
> 1. ✔ bridge-connector: attach encoder to the connector (v7.2)
> 2. … drm bridge hotplug
> B. Device tree description
>
> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
> ---
> Luca Ceresoli (3):
> drm: adp: stop using deprecated drmm_of_get_bridge()
> drm/panel: remove drmm_of_get_bridge()
> drm/todo: remove drmm_of_get_bridge()
>
> Documentation/gpu/todo.rst | 1 -
> drivers/gpu/drm/adp/adp_drv.c | 13 +++++++++----
> drivers/gpu/drm/drm_panel.c | 40 ----------------------------------------
> include/drm/drm_panel.h | 10 ----------
> 4 files changed, 9 insertions(+), 55 deletions(-)
> ---
> base-commit: 4524052b65a75166c1c557921c786bd82302de13
> change-id: 20261106-drm-panel_bridge-remove-drmm_of_get_bridge-791bd0f0ad97
>
> Best regards,
> --
> Luca Ceresoli, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com
Looks good
Reviewed-by: Joshua Peisach <jpeisach@ubuntu.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-11-08 17:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-06 16:17 [PATCH 0/3] drm: remove drmm_of_get_bridge() Luca Ceresoli
2026-11-06 16:17 ` [PATCH 1/3] drm: adp: stop using deprecated drmm_of_get_bridge() Luca Ceresoli
2026-11-06 16:17 ` [PATCH 2/3] drm/panel: remove drmm_of_get_bridge() Luca Ceresoli
2026-11-06 16:17 ` [PATCH 3/3] drm/todo: " Luca Ceresoli
2026-11-08 17:26 ` [PATCH 0/3] drm: " Joshua Peisach
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®