drm/panel: innolux-p079zca: Delete panel on attach() failure
[ Upstream commit 32a267e9c057e1636e7afdd20599aa5741a73079 ] If we fail to attach (e.g., because 1 of 2 dual-DSI controllers aren't ready), we leave a dangling drm_panel reference to freed memory. Clean that up on failure. This problem exists since the driver's introduction, but is especially relevant after refactored for dual-DSI variants. Fixes:14c8f2e9f8
("drm/panel: add Innolux P079ZCA panel driver") Fixes:7ad4e4636c
("drm/panel: p079zca: Refactor panel driver to support multiple panels") Signed-off-by: Brian Norris <briannorris@chromium.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20210923173336.2.I9023cf8811a3abf4964ed84eb681721d8bb489d6@changeid Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
b01b7b8684
commit
9bc19022aa
@@ -484,6 +484,7 @@ static void innolux_panel_del(struct innolux_panel *innolux)
|
|||||||
static int innolux_panel_probe(struct mipi_dsi_device *dsi)
|
static int innolux_panel_probe(struct mipi_dsi_device *dsi)
|
||||||
{
|
{
|
||||||
const struct panel_desc *desc;
|
const struct panel_desc *desc;
|
||||||
|
struct innolux_panel *innolux;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
desc = of_device_get_match_data(&dsi->dev);
|
desc = of_device_get_match_data(&dsi->dev);
|
||||||
@@ -495,7 +496,14 @@ static int innolux_panel_probe(struct mipi_dsi_device *dsi)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
return mipi_dsi_attach(dsi);
|
err = mipi_dsi_attach(dsi);
|
||||||
|
if (err < 0) {
|
||||||
|
innolux = mipi_dsi_get_drvdata(dsi);
|
||||||
|
innolux_panel_del(innolux);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int innolux_panel_remove(struct mipi_dsi_device *dsi)
|
static int innolux_panel_remove(struct mipi_dsi_device *dsi)
|
||||||
|
Reference in New Issue
Block a user