drm/panel-simple: Undo enable if HPD never asserts
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> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20210115144345.v2.1.I33fcbd64ab409cfe4f9491bf449f51925a4d3281@changeid
This commit is contained in:
parent
429fc6f955
commit
5e7222a367
@ -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,20 @@ 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);
|
||||
p->unprepared_time = ktime_get();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int panel_simple_enable(struct drm_panel *panel)
|
||||
|
Loading…
x
Reference in New Issue
Block a user