drm/panel: jdi-lt070me05000: Use gpiod_set_value_cansleep

There is no reason why the control GPIOs for the panel can not
be connected to I2C or similar GPIO interfaces that may need to
sleep, therefore switch from gpiod_set_value to
gpiod_set_value_cansleep calls to configure them.
Without that you get complaints from gpiolib every time the state
is changed.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>

drm: panel: jdi-lt070me05000: Add prepare_upstream_first flag

The panel driver wants to send DCS commands from the prepare
hook, therefore the DSI host wants to be pre_enabled first.
Set the flag to achieve this.

https://forums.raspberrypi.com/viewtopic.php?t=354708

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
This commit is contained in:
Dave Stevenson
2021-04-15 17:30:35 +01:00
committed by Dom Cobley
parent 51a07a86af
commit 1e1602db3f

View File

@@ -190,11 +190,11 @@ static int jdi_panel_unprepare(struct drm_panel *panel)
if (ret < 0)
dev_err(dev, "regulator disable failed, %d\n", ret);
gpiod_set_value(jdi->enable_gpio, 0);
gpiod_set_value_cansleep(jdi->enable_gpio, 0);
gpiod_set_value(jdi->reset_gpio, 1);
gpiod_set_value_cansleep(jdi->reset_gpio, 1);
gpiod_set_value(jdi->dcdc_en_gpio, 0);
gpiod_set_value_cansleep(jdi->dcdc_en_gpio, 0);
return 0;
}
@@ -213,13 +213,13 @@ static int jdi_panel_prepare(struct drm_panel *panel)
msleep(20);
gpiod_set_value(jdi->dcdc_en_gpio, 1);
gpiod_set_value_cansleep(jdi->dcdc_en_gpio, 1);
usleep_range(10, 20);
gpiod_set_value(jdi->reset_gpio, 0);
gpiod_set_value_cansleep(jdi->reset_gpio, 0);
usleep_range(10, 20);
gpiod_set_value(jdi->enable_gpio, 1);
gpiod_set_value_cansleep(jdi->enable_gpio, 1);
usleep_range(10, 20);
ret = jdi_panel_init(jdi);
@@ -241,11 +241,11 @@ poweroff:
if (ret < 0)
dev_err(dev, "regulator disable failed, %d\n", ret);
gpiod_set_value(jdi->enable_gpio, 0);
gpiod_set_value_cansleep(jdi->enable_gpio, 0);
gpiod_set_value(jdi->reset_gpio, 1);
gpiod_set_value_cansleep(jdi->reset_gpio, 1);
gpiod_set_value(jdi->dcdc_en_gpio, 0);
gpiod_set_value_cansleep(jdi->dcdc_en_gpio, 0);
return ret;
}
@@ -402,6 +402,8 @@ static int jdi_panel_add(struct jdi_panel *jdi)
return dev_err_probe(dev, PTR_ERR(jdi->backlight),
"failed to register backlight %d\n", ret);
jdi->base.prepare_prev_first = true;
drm_panel_add(&jdi->base);
return 0;