[PATCH RFC v2 16/19] drm/omap: dss: don't create a panel_bridge
From: Luca Ceresoli
Date: Thu Sep 03 2026 - 04:47:31 EST
Now a panel_bridge is automatically created for every drm_panel, so this
code (similar to an open-coded variant of drm_of_find_panel_or_bridge())
would lead to creating a second bridge for the same panel.
Update and simplify the code by just getting a reference to the
already-existing bridge.
Signed-off-by: Luca Ceresoli <luca.ceresoli@xxxxxxxxxxx>
---
drivers/gpu/drm/omapdrm/dss/omapdss.h | 1 -
drivers/gpu/drm/omapdrm/dss/output.c | 42 ++++-------------------------------
2 files changed, 4 insertions(+), 39 deletions(-)
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index 4c22c09c93d5..e3e685c931f1 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -204,7 +204,6 @@ struct omap_dss_device {
struct dss_device *dss;
struct drm_bridge *bridge;
struct drm_bridge *next_bridge;
- struct drm_panel *panel;
struct list_head list;
diff --git a/drivers/gpu/drm/omapdrm/dss/output.c b/drivers/gpu/drm/omapdrm/dss/output.c
index 6e9bc605ee22..36d37deac802 100644
--- a/drivers/gpu/drm/omapdrm/dss/output.c
+++ b/drivers/gpu/drm/omapdrm/dss/output.c
@@ -12,7 +12,6 @@
#include <linux/of_graph.h>
#include <drm/drm_bridge.h>
-#include <drm/drm_panel.h>
#include "dss.h"
#include "omapdss.h"
@@ -20,40 +19,16 @@
int omapdss_device_init_output(struct omap_dss_device *out,
struct drm_bridge *local_bridge)
{
- struct device_node *remote_node;
+ struct drm_bridge *bridge;
int ret;
- remote_node = of_graph_get_remote_node(out->dev->of_node,
- out->of_port, 0);
- if (!remote_node) {
+ bridge = of_drm_get_bridge_by_endpoint(out->dev->of_node, out->of_port, 0);
+ if (IS_ERR(bridge)) {
dev_dbg(out->dev, "failed to find video sink\n");
return 0;
}
- out->panel = of_drm_find_panel(remote_node);
- if (IS_ERR(out->panel))
- out->panel = NULL;
-
- if (!out->panel)
- out->bridge = of_drm_find_and_get_bridge(remote_node);
-
- of_node_put(remote_node);
-
- if (out->panel) {
- struct drm_bridge *bridge;
-
- bridge = drm_panel_bridge_add(out->panel);
- drm_panel_put(out->panel);
- if (IS_ERR(bridge)) {
- dev_err(out->dev,
- "unable to create panel bridge (%ld)\n",
- PTR_ERR(bridge));
- ret = PTR_ERR(bridge);
- goto error;
- }
-
- out->bridge = drm_bridge_get(bridge);
- }
+ out->bridge = bridge;
if (local_bridge) {
if (!out->bridge) {
@@ -65,11 +40,6 @@ int omapdss_device_init_output(struct omap_dss_device *out,
out->bridge = drm_bridge_get(local_bridge);
}
- if (!out->bridge) {
- ret = -EPROBE_DEFER;
- goto error;
- }
-
return 0;
error:
@@ -79,10 +49,6 @@ int omapdss_device_init_output(struct omap_dss_device *out,
void omapdss_device_cleanup_output(struct omap_dss_device *out)
{
- if (out->bridge && out->panel)
- drm_panel_bridge_remove(out->next_bridge ?
- out->next_bridge : out->bridge);
-
drm_bridge_put(out->next_bridge);
drm_bridge_put(out->bridge);
}
--
2.55.0