Message ID | 20210114172254.1.I33fcbd64ab409cfe4f9491bf449f51925a4d3281@changeid (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/panel-simple: Undo enable if HPD never asserts | expand |
Quoting Douglas Anderson (2021-01-14 17:22:59) > If the HPD signal never asserts in panel_simple_prepare() and we > return an error, we should unset the enable GPIO and disable the > regulator to make it consistent for the caller. > > At the moment I have some hardware where HPD sometimes doesn't assert. > Obviously that needs to be debugged, but this patch makes it so that > if I add a retry that I can make things work. > > Fixes: 48834e6084f1 ("drm/panel-simple: Support hpd-gpios for delaying prepare()") > Signed-off-by: Douglas Anderson <dianders@chromium.org> > --- Reviewed-by: Stephen Boyd <swboyd@chromium.org>
diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 71ae200ac48a..b89394b44f43 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -406,7 +406,7 @@ static int panel_simple_prepare(struct drm_panel *panel) if (IS_ERR(p->hpd_gpio)) { err = panel_simple_get_hpd_gpio(panel->dev, p, false); if (err) - return err; + goto error; } err = readx_poll_timeout(gpiod_get_value_cansleep, p->hpd_gpio, @@ -418,13 +418,19 @@ static int panel_simple_prepare(struct drm_panel *panel) if (err) { dev_err(panel->dev, "error waiting for hpd GPIO: %d\n", err); - return err; + goto error; } } p->prepared_time = ktime_get(); return 0; + +error: + gpiod_set_value_cansleep(p->enable_gpio, 0); + regulator_disable(p->supply); + + return err; } static int panel_simple_enable(struct drm_panel *panel)
If the HPD signal never asserts in panel_simple_prepare() and we return an error, we should unset the enable GPIO and disable the regulator to make it consistent for the caller. At the moment I have some hardware where HPD sometimes doesn't assert. Obviously that needs to be debugged, but this patch makes it so that if I add a retry that I can make things work. Fixes: 48834e6084f1 ("drm/panel-simple: Support hpd-gpios for delaying prepare()") Signed-off-by: Douglas Anderson <dianders@chromium.org> --- drivers/gpu/drm/panel/panel-simple.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)