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 <[email protected]> --- 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); /* 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); } @@ -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; } -- 2.56.0
