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 panel_bridge for the same panel.
Fix and simplify the code by just getting a reference to the already-existing bridge. Signed-off-by: Luca Ceresoli <[email protected]> --- drivers/gpu/drm/bridge/samsung-dsim.c | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c index 5457a7b02a33..55d4e3aedb3d 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -1898,7 +1898,6 @@ static int samsung_dsim_host_attach(struct mipi_dsi_host *host, struct device *dev = dsi->dev; struct device_node *np = dev->of_node; struct device_node *remote; - struct drm_panel *panel; int ret = 0; /* @@ -1931,21 +1930,9 @@ static int samsung_dsim_host_attach(struct mipi_dsi_host *host, if (!remote) return -ENODEV; - panel = of_drm_find_panel(remote); - if (!IS_ERR(panel)) { - next_bridge = devm_drm_panel_bridge_add(dev, panel); - drm_panel_put(panel); - if (IS_ERR(next_bridge)) { - ret = PTR_ERR(next_bridge); - next_bridge = NULL; // Inhibit the cleanup action on an ERR_PTR - } else { - drm_bridge_get(next_bridge); - } - } else { - next_bridge = of_drm_find_and_get_bridge(remote); - if (!next_bridge) - ret = -EINVAL; - } + next_bridge = of_drm_find_and_get_bridge(remote); + if (!next_bridge) + ret = -EINVAL; of_node_put(remote); -- 2.55.0
