Skip to content

Commit 38cae7b

Browse files
Zhaoxiong Lvsuperna9999
authored andcommitted
drm/panel: jd9365da: Modify the method of sending commands
Currently, the init_code of the jd9365da driver is placed in the enable() function and sent, but this seems to take a long time. It takes 17ms to send each instruction (an init code consists of about 200 instructions), so it takes about 3.5s to send the init_code. So we moved the sending of the inti_code to the prepare() function, and each instruction seemed to take only 25μs. We checked the DSI host and found that the difference in command sending time is caused by the different modes of the DSI host in prepare() and enable() functions. Our DSI Host only supports sending cmd in LP mode, The prepare() function can directly send init_code (LP->cmd) in LP mode, but the enable() function is in HS mode and needs to switch to LP mode before sending init code (HS->LP->cmd->HS). Therefore, it takes longer to send the command. Signed-off-by: Zhaoxiong Lv <lvzhaoxiong@huaqin.corp-partner.google.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Link: https://lore.kernel.org/r/20240624141926.5250-2-lvzhaoxiong@huaqin.corp-partner.google.com Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20240624141926.5250-2-lvzhaoxiong@huaqin.corp-partner.google.com
1 parent 6c2b2cd commit 38cae7b

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,9 @@ static int jadard_enable(struct drm_panel *panel)
5252
{
5353
struct device *dev = panel->dev;
5454
struct jadard *jadard = panel_to_jadard(panel);
55-
const struct jadard_panel_desc *desc = jadard->desc;
5655
struct mipi_dsi_device *dsi = jadard->dsi;
57-
unsigned int i;
5856
int err;
5957

60-
msleep(10);
61-
62-
for (i = 0; i < desc->num_init_cmds; i++) {
63-
const struct jadard_init_cmd *cmd = &desc->init_cmds[i];
64-
65-
err = mipi_dsi_dcs_write_buffer(dsi, cmd->data, JD9365DA_INIT_CMD_LEN);
66-
if (err < 0)
67-
return err;
68-
}
69-
7058
msleep(120);
7159

7260
err = mipi_dsi_dcs_exit_sleep_mode(dsi);
@@ -100,6 +88,8 @@ static int jadard_disable(struct drm_panel *panel)
10088
static int jadard_prepare(struct drm_panel *panel)
10189
{
10290
struct jadard *jadard = panel_to_jadard(panel);
91+
const struct jadard_panel_desc *desc = jadard->desc;
92+
unsigned int i;
10393
int ret;
10494

10595
ret = regulator_enable(jadard->vccio);
@@ -117,7 +107,15 @@ static int jadard_prepare(struct drm_panel *panel)
117107
msleep(10);
118108

119109
gpiod_set_value(jadard->reset, 1);
120-
msleep(120);
110+
msleep(130);
111+
112+
for (i = 0; i < desc->num_init_cmds; i++) {
113+
const struct jadard_init_cmd *cmd = &desc->init_cmds[i];
114+
115+
ret = mipi_dsi_dcs_write_buffer(dsi, cmd->data, JD9365DA_INIT_CMD_LEN);
116+
if (ret < 0)
117+
return ret;
118+
}
121119

122120
return 0;
123121
}

0 commit comments

Comments
 (0)