In MTK chips, if the DRM runtime resume has not yet completed and the system enters sleep mode at the same time, there is a possibility of a black screen after waking the machine. Reduce the disable delay resolves this issue, The "backlight_off_to_display_off_delay_ms" was added between "backlight off" and "display off" to prevent "display off" from being executed when the backlight is not fully powered off, which may cause a white screen. However, we removed this "backlight_off_to_display_off_delay_ms" and found that this situation did not occur. Therefore, in order to solve the problem mentioned above, we removed this delay, and the delay between "display off" and "enter sleep" is not defined in the spec, so we reduce it from 120ms to 50ms. In addition, T14 >= 120ms, so we change "enter_sleep_to_reset_down_delay_ms" from 100ms to 120ms. The panel spec: 1. https://github.com/Vme5o/power-on-off-sequential Fixes: e4bd1db1c1f7 ("drm/panel: boe-th101mb31ig002: Support for starry-er88577 MIPI-DSI panel") Signed-off-by: Zhaoxiong Lv <lvzhaoxiong@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> --- Changes between V3 and V2: - 1. Modify the commit message v2: https://lore.kernel.org/all/20240923134227.11383-3-lvzhaoxiong@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ Changes between V2 and V1: - 1. Modify the commit message. - 2. Delete the value of backlight_off_to_display_off_delay_ms. - 3. Modify the value of enter_sleep_to_reset_down_delay_ms from 100ms to 120ms. v1: https://lore.kernel.org/all/20240915080830.11318-3-lvzhaoxiong@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ --- .../gpu/drm/panel/panel-boe-th101mb31ig002-28a.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-boe-th101mb31ig002-28a.c b/drivers/gpu/drm/panel/panel-boe-th101mb31ig002-28a.c index 0b87f1e6ecae..9e4d91c7c394 100644 --- a/drivers/gpu/drm/panel/panel-boe-th101mb31ig002-28a.c +++ b/drivers/gpu/drm/panel/panel-boe-th101mb31ig002-28a.c @@ -29,7 +29,7 @@ struct panel_desc { bool lp11_before_reset; unsigned int vcioo_to_lp11_delay_ms; unsigned int lp11_to_reset_delay_ms; - unsigned int backlight_off_to_display_off_delay_ms; + unsigned int display_off_to_enter_sleep_delay_ms; unsigned int enter_sleep_to_reset_down_delay_ms; unsigned int power_off_delay_ms; }; @@ -184,12 +184,10 @@ static int boe_th101mb31ig002_disable(struct drm_panel *panel) panel); struct mipi_dsi_multi_context dsi_ctx = { .dsi = ctx->dsi }; - if (ctx->desc->backlight_off_to_display_off_delay_ms) - mipi_dsi_msleep(&dsi_ctx, ctx->desc->backlight_off_to_display_off_delay_ms); - mipi_dsi_dcs_set_display_off_multi(&dsi_ctx); - mipi_dsi_msleep(&dsi_ctx, 120); + if (ctx->desc->display_off_to_enter_sleep_delay_ms) + mipi_dsi_msleep(&dsi_ctx, ctx->desc->display_off_to_enter_sleep_delay_ms); mipi_dsi_dcs_enter_sleep_mode_multi(&dsi_ctx); @@ -275,6 +273,7 @@ static const struct panel_desc boe_th101mb31ig002_desc = { MIPI_DSI_MODE_NO_EOT_PACKET | MIPI_DSI_MODE_LPM, .init = boe_th101mb31ig002_enable, + .display_off_to_enter_sleep_delay_ms = 120, }; static const struct drm_display_mode starry_er88577_default_mode = { @@ -302,8 +301,8 @@ static const struct panel_desc starry_er88577_desc = { .lp11_before_reset = true, .vcioo_to_lp11_delay_ms = 5, .lp11_to_reset_delay_ms = 50, - .backlight_off_to_display_off_delay_ms = 100, - .enter_sleep_to_reset_down_delay_ms = 100, + .display_off_to_enter_sleep_delay_ms = 50, + .enter_sleep_to_reset_down_delay_ms = 120, .power_off_delay_ms = 1000, }; -- 2.17.1