]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/panel: p079zca: Add variable unprepare_delay properties
authorLin Huang <hl@rock-chips.com>
Mon, 2 Jul 2018 10:27:19 +0000 (12:27 +0200)
committerThierry Reding <treding@nvidia.com>
Tue, 10 Jul 2018 15:59:05 +0000 (17:59 +0200)
When panel power down, p079zca need delay between reset and disable
power supply, but p097pfg does not need it. Similarly p097zca needs
a delay after entering panel sleep mode. So add two delay properties,
so we can meet these two panel power down sequence.

Signed-off-by: Lin Huang <hl@rock-chips.com>
[add sleep-mode delay]
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180702102721.3546-3-heiko@sntech.de
drivers/gpu/drm/panel/panel-innolux-p079zca.c

index 185a55060195078d3802acb91c401b1a6748c115..69bee4413aae2e33cbf553c1f294aea1fac4d99c 100644 (file)
@@ -33,6 +33,8 @@ struct panel_desc {
        unsigned int lanes;
        const char * const *supply_names;
        unsigned int num_supplies;
+       unsigned int sleep_mode_delay;
+       unsigned int power_down_delay;
 };
 
 struct innolux_panel {
@@ -89,10 +91,13 @@ static int innolux_panel_unprepare(struct drm_panel *panel)
                return err;
        }
 
+       if (innolux->desc->sleep_mode_delay)
+               msleep(innolux->desc->sleep_mode_delay);
+
        gpiod_set_value_cansleep(innolux->enable_gpio, 0);
 
-       /* T8: 80ms - 1000ms */
-       msleep(80);
+       if (innolux->desc->power_down_delay)
+               msleep(innolux->desc->power_down_delay);
 
        err = regulator_bulk_disable(innolux->desc->num_supplies,
                                     innolux->supplies);
@@ -208,6 +213,7 @@ static const struct panel_desc innolux_p079zca_panel_desc = {
        .lanes = 4,
        .supply_names = innolux_p079zca_supply_names,
        .num_supplies = ARRAY_SIZE(innolux_p079zca_supply_names),
+       .power_down_delay = 80, /* T8: 80ms - 1000ms */
 };
 
 static int innolux_panel_get_modes(struct drm_panel *panel)