devm_drm_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.
Signed-off-by: Luca Ceresoli <[email protected]> --- Changes in v2: - fix bridge reference leak on attach error and detach paths --- drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c index 7fd2f1e60654..eb7d5713bd28 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-mipi-dsi2.c @@ -192,7 +192,6 @@ struct cmd_header { struct dw_mipi_dsi2 { struct drm_bridge bridge; struct mipi_dsi_host dsi_host; - struct drm_bridge *panel_bridge; struct device *dev; struct regmap *regmap; struct clk *pclk; @@ -528,12 +527,12 @@ static int dw_mipi_dsi2_host_attach(struct mipi_dsi_host *host, dsi2->format = device->format; dsi2->mode_flags = device->mode_flags; - bridge = devm_drm_of_get_bridge(dsi2->dev, dsi2->dev->of_node, 1, 0); + bridge = of_drm_get_bridge_by_endpoint(dsi2->dev->of_node, 1, 0); if (IS_ERR(bridge)) return PTR_ERR(bridge); bridge->pre_enable_prev_first = true; - dsi2->panel_bridge = bridge; + dsi2->bridge.next_bridge = bridge; drm_bridge_add(&dsi2->bridge); @@ -547,6 +546,7 @@ static int dw_mipi_dsi2_host_attach(struct mipi_dsi_host *host, err_remove_bridge: drm_bridge_remove(&dsi2->bridge); + drm_bridge_clear_and_put(&dsi2->bridge.next_bridge); return ret; } @@ -564,8 +564,7 @@ static int dw_mipi_dsi2_host_detach(struct mipi_dsi_host *host, } drm_bridge_remove(&dsi2->bridge); - - drm_of_panel_bridge_remove(host->dev->of_node, 1, 0); + drm_bridge_clear_and_put(&dsi2->bridge.next_bridge); return 0; } @@ -884,7 +883,7 @@ static int dw_mipi_dsi2_bridge_attach(struct drm_bridge *bridge, encoder->encoder_type = DRM_MODE_ENCODER_DSI; /* Attach the panel-bridge to the dsi bridge */ - return drm_bridge_attach(encoder, dsi2->panel_bridge, bridge, + return drm_bridge_attach(encoder, dsi2->bridge.next_bridge, bridge, flags); } -- 2.55.0
