Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bcd6bfe1 authored by Brian Norris's avatar Brian Norris Committed by Greg Kroah-Hartman
Browse files

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: 14c8f2e9 ("drm/panel: add Innolux P079ZCA panel driver")
Fixes: 7ad4e463 ("drm/panel: p079zca: Refactor panel driver to support multiple panels")
Signed-off-by: default avatarBrian Norris <briannorris@chromium.org>
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20210923173336.2.I9023cf8811a3abf4964ed84eb681721d8bb489d6@changeid


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 4c255e98
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -509,6 +509,7 @@ static void innolux_panel_del(struct innolux_panel *innolux)
static int innolux_panel_probe(struct mipi_dsi_device *dsi)
{
	const struct panel_desc *desc;
	struct innolux_panel *innolux;
	int err;

	desc = of_device_get_match_data(&dsi->dev);
@@ -520,7 +521,14 @@ static int innolux_panel_probe(struct mipi_dsi_device *dsi)
	if (err < 0)
		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)