drm/bridge: dw-mipi-dsi: Fix bridge leak when host attach fails

dw_mipi_dsi_host_attach() and dw_mipi_dsi2_host_attach() call
drm_bridge_add() before pdata->host_ops->attach(). If attach fails,
the bridge stayed registered without drm_bridge_remove(), leaking the
bridge reference and leaving the device on the global bridge list.

Fixes: 90910a6511 ("drm/bridge/synopsys: dsi: add ability to have glue-specific attach and detach")
Fixes: 0d6d86253f ("drm/bridge/synopsys: Add MIPI DSI2 host controller bridge")
Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Link: https://patch.msgid.link/20260403145208.15890-1-osama.abdelkader@gmail.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
This commit is contained in:
Osama Abdelkader
2026-04-03 16:52:05 +02:00
committed by Luca Ceresoli
parent ad3ac32a38
commit be19b43f92
2 changed files with 10 additions and 2 deletions

View File

@@ -345,10 +345,14 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
if (pdata->host_ops && pdata->host_ops->attach) {
ret = pdata->host_ops->attach(pdata->priv_data, device);
if (ret < 0)
return ret;
goto err_remove_bridge;
}
return 0;
err_remove_bridge:
drm_bridge_remove(&dsi->bridge);
return ret;
}
static int dw_mipi_dsi_host_detach(struct mipi_dsi_host *host,

View File

@@ -540,10 +540,14 @@ static int dw_mipi_dsi2_host_attach(struct mipi_dsi_host *host,
if (pdata->host_ops && pdata->host_ops->attach) {
ret = pdata->host_ops->attach(pdata->priv_data, device);
if (ret < 0)
return ret;
goto err_remove_bridge;
}
return 0;
err_remove_bridge:
drm_bridge_remove(&dsi2->bridge);
return ret;
}
static int dw_mipi_dsi2_host_detach(struct mipi_dsi_host *host,