mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 13:53:33 +00:00
drm/panel-simple: Don't wait longer for HPD than hpd_absent_delay
If a panel has an hpd_absent_delay specified then we know exactly how long the maximum time is before HPD must be asserted. That means we can use it as a timeout for polling the HPD pin instead of using an arbitrary timeout. This is especially useful for dealing with panels that periodically fail to power on and need to be retried. We can detect the problem sooner. 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.2.I183b1817610d7a82fdd3bc852e96d2985df9623f@changeid
This commit is contained in:
parent
5e7222a367
commit
6ec52621e7
1 changed files with 7 additions and 1 deletions
|
@ -382,6 +382,7 @@ static int panel_simple_prepare(struct drm_panel *panel)
|
|||
unsigned int delay;
|
||||
int err;
|
||||
int hpd_asserted;
|
||||
unsigned long hpd_wait_us;
|
||||
|
||||
if (p->prepared_time != 0)
|
||||
return 0;
|
||||
|
@ -409,9 +410,14 @@ static int panel_simple_prepare(struct drm_panel *panel)
|
|||
goto error;
|
||||
}
|
||||
|
||||
if (p->desc->delay.hpd_absent_delay)
|
||||
hpd_wait_us = p->desc->delay.hpd_absent_delay * 1000UL;
|
||||
else
|
||||
hpd_wait_us = 2000000;
|
||||
|
||||
err = readx_poll_timeout(gpiod_get_value_cansleep, p->hpd_gpio,
|
||||
hpd_asserted, hpd_asserted,
|
||||
1000, 2000000);
|
||||
1000, hpd_wait_us);
|
||||
if (hpd_asserted < 0)
|
||||
err = hpd_asserted;
|
||||
|
||||
|
|
Loading…
Reference in a new issue