[PATCH 1/2] drm/panel: boe-tv101wum-nl6: disable pp3300 on prepare() error paths

From: Tang Bin

Date: Wed Nov 04 2026 - 03:55:09 EST


boe_panel_prepare() enables pp3300 first, but every later failing step
(pp1800/avdd/avee enable, NOP, init) returns or jumps to a cleanup chain
that disables pp1800/avdd/avee but never pp3300, even though the matching
unprepare() disables it. The regulator is reference-counted, so on repeated
prepare failure the pp3300 enable count accumulates (leak). Add a
poweroff3v3 label that disables pp3300 and route the pp1800-enable failure
to it; the existing labels fall through.

Fixes: a869b9db7adf ("drm/panel: support for boe tv101wum-nl6 wuxga dsi video mode panel")
Signed-off-by: Tang Bin <tangbin@xxxxxxxxxxxxxxxxxxxx>
---
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c b/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c
index 150dff3ab..25cfd6e30 100644
--- a/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c
+++ b/drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c
@@ -1371,7 +1371,7 @@ static int boe_panel_prepare(struct drm_panel *panel)

ret = regulator_enable(boe->pp1800);
if (ret < 0)
- return ret;
+ goto poweroff3v3;

usleep_range(3000, 5000);

@@ -1413,6 +1413,8 @@ static int boe_panel_prepare(struct drm_panel *panel)
poweroff1v8:
usleep_range(5000, 7000);
regulator_disable(boe->pp1800);
+poweroff3v3:
+ regulator_disable(boe->pp3300);

return ret;
}
--
2.52.0.windows.1