Skip to content

Commit dc8edea

Browse files
xubilvrkhuangtao
authored andcommitted
drm/rockchip: dw-mipi-dsi: add delay for panel power on
Change-Id: Ife1a3c421dd192fc76b1ff6c84dbfe4afb1b0a54 Signed-off-by: xubilv <xbl@rock-chips.com>
1 parent 98aa9ed commit dc8edea

1 file changed

Lines changed: 15 additions & 6 deletions

File tree

drivers/gpu/drm/panel/panel-simple.c

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ struct panel_desc {
7070
} size;
7171

7272
/**
73+
* @reset: the time (in milliseconds) indicates the delay time
74+
* after the panel to operate reset gpio
75+
* @init: the time (in milliseconds) that it takes for the panel to
76+
* power on and dsi host can send command to panel
7377
* @prepare: the time (in milliseconds) that it takes for the panel to
7478
* become ready and start receiving video data
7579
* @enable: the time (in milliseconds) that it takes for the panel to
@@ -81,6 +85,8 @@ struct panel_desc {
8185
* to power itself down completely
8286
*/
8387
struct {
88+
unsigned int reset;
89+
unsigned int init;
8490
unsigned int prepare;
8591
unsigned int enable;
8692
unsigned int disable;
@@ -105,7 +111,6 @@ struct panel_simple {
105111

106112
struct gpio_desc *enable_gpio;
107113
struct gpio_desc *reset_gpio;
108-
unsigned int reset_delay;
109114

110115
struct dsi_panel_cmds *on_cmds;
111116
struct dsi_panel_cmds *off_cmds;
@@ -422,12 +427,15 @@ static int panel_simple_prepare(struct drm_panel *panel)
422427
if (p->reset_gpio)
423428
gpiod_direction_output(p->reset_gpio, 1);
424429

425-
if (p->reset_delay)
426-
msleep(p->reset_delay);
430+
if (p->desc && p->desc->delay.reset)
431+
msleep(p->desc->delay.reset);
427432

428433
if (p->reset_gpio)
429434
gpiod_direction_output(p->reset_gpio, 0);
430435

436+
if (p->desc && p->desc->delay.init)
437+
msleep(p->desc->delay.init);
438+
431439
if (p->on_cmds) {
432440
err = panel_simple_dsi_send_cmds(p, p->on_cmds);
433441
if (err)
@@ -540,6 +548,10 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc)
540548
of_desc->delay.disable = val;
541549
if (!of_property_read_u32(dev->of_node, "delay,unprepare", &val))
542550
of_desc->delay.unprepare = val;
551+
if (!of_property_read_u32(dev->of_node, "delay,reset", &val))
552+
of_desc->delay.reset = val;
553+
if (!of_property_read_u32(dev->of_node, "delay,init", &val))
554+
of_desc->delay.init = val;
543555

544556
panel->enabled = false;
545557
panel->prepared = false;
@@ -1961,9 +1973,6 @@ static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
19611973
if (!of_property_read_u32(dsi->dev.of_node, "dsi,lanes", &val))
19621974
dsi->lanes = val;
19631975

1964-
if (!of_property_read_u32(dsi->dev.of_node, "reset-delay-ms", &val))
1965-
panel->reset_delay = val;
1966-
19671976
data = of_get_property(dsi->dev.of_node, "panel-init-sequence", &len);
19681977
if (data) {
19691978
panel->on_cmds = devm_kzalloc(&dsi->dev,

0 commit comments

Comments
 (0)