diff options
author | Shiyong Li <shiyongli@google.com> | 2023-03-22 18:29:08 +0000 |
---|---|---|
committer | Shiyong Li <shiyongli@google.com> | 2023-03-30 15:16:44 +0000 |
commit | 9a7695355ae934a2da0eb8090d54ee129a0ee9a4 (patch) | |
tree | b423d5267b2a2fa8ee4a8a85575a3bd6375a5d5a | |
parent | 1d2ea7a5fd7d4f770d55754fc45907f52d76cac2 (diff) | |
download | display-9a7695355ae934a2da0eb8090d54ee129a0ee9a4.tar.gz |
panel: s6e3hc4: update init and AOD command sequence
- set Vreg = 4.5V instead of 6.4V at display-off and 6.8V at
display-on.
- disable idle before setting Vreg=4.5V
- refactor AOD enter/exit command sequence, remove lp_off mode
Bug: 274187749
Test: check perfetto trace, enter and exit AOD
Signed-off-by: Shiyong Li <shiyongli@google.com>
Change-Id: If124d4ef0a0de56189cb5311598ecd98d402b1f3
-rw-r--r-- | samsung/panel/panel-samsung-s6e3hc4.c | 288 |
1 files changed, 199 insertions, 89 deletions
diff --git a/samsung/panel/panel-samsung-s6e3hc4.c b/samsung/panel/panel-samsung-s6e3hc4.c index ecbcb18..68f718d 100644 --- a/samsung/panel/panel-samsung-s6e3hc4.c +++ b/samsung/panel/panel-samsung-s6e3hc4.c @@ -124,6 +124,11 @@ static const u8 freq_update[] = { 0xF7, 0x0F }; static const u8 nop[] = { 0x00 }; static const u8 pixel_off[] = { 0x22 }; static const u8 normal_on[] = { 0x13 }; +static const u8 sync_begin[] = { 0xE4, 0x00, 0x2C, 0x2C, 0xA2, 0x00, 0x00 }; +static const u8 sync_end[] = { 0xE4, 0x00, 0x2C, 0x2C, 0x82, 0x00, 0x00 }; +static const u8 aod_on[] = { 0x53, 0x24 }; +static const u8 aod_off[] = { 0x53, 0x20 }; +static const u8 min_dbv[] = { 0x51, 0x00, 0x04 }; static const struct exynos_dsi_cmd s6e3hc4_sleepin_cmds[] = { /* SP back failure workaround on EVT */ @@ -136,69 +141,29 @@ static const struct exynos_dsi_cmd s6e3hc4_sleepin_cmds[] = { }; static DEFINE_EXYNOS_CMD_SET(s6e3hc4_sleepin); -static const struct exynos_dsi_cmd s6e3hc4_lp_cmds[] = { - EXYNOS_DSI_CMD0(unlock_cmd_f0), - /* Fixed TE: sync on */ - EXYNOS_DSI_CMD_SEQ(0xB9, 0x51), - /* Set freq at 30 Hz */ - EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x01, 0x60), - EXYNOS_DSI_CMD_SEQ(0x60, 0x00), - /* Set 10 Hz idle */ - EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x18, 0xBD), - EXYNOS_DSI_CMD_SEQ(0xBD, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00), - EXYNOS_DSI_CMD_SEQ(0xBD, 0x25), - /* AOD timing */ - EXYNOS_DSI_CMD_SEQ_REV(PANEL_REV_LT(PANEL_REV_DVT1_1), 0xB0, 0x00, 0x3D, 0xF6), - EXYNOS_DSI_CMD_SEQ_REV(PANEL_REV_LT(PANEL_REV_DVT1_1), 0xF6, 0xAF, 0xB1), - EXYNOS_DSI_CMD_SEQ_REV(PANEL_REV_LT(PANEL_REV_DVT1_1), 0xB0, 0x00, 0x41, 0xF6), - EXYNOS_DSI_CMD_SEQ_REV(PANEL_REV_LT(PANEL_REV_DVT1_1), 0xF6, 0xB3), - EXYNOS_DSI_CMD0(freq_update), - /* AOD low mode setting */ - EXYNOS_DSI_CMD_SEQ_REV(PANEL_REV_LT(PANEL_REV_DVT1), 0xB0, 0x01, 0x7D, 0x94), - EXYNOS_DSI_CMD_SEQ_REV(PANEL_REV_LT(PANEL_REV_DVT1), 0x94, 0x1C), - EXYNOS_DSI_CMD0(lock_cmd_f0), -}; -static DEFINE_EXYNOS_CMD_SET(s6e3hc4_lp); - -static const struct exynos_dsi_cmd s6e3hc4_lp_off_cmds[] = { - EXYNOS_DSI_CMD0(unlock_cmd_f0), - /* AOD low mode off */ - EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x52, 0x94), - EXYNOS_DSI_CMD_SEQ(0x94, 0x00), - EXYNOS_DSI_CMD_SEQ(0x53, 0x20), - EXYNOS_DSI_CMD0(lock_cmd_f0), -}; - static const struct exynos_dsi_cmd s6e3hc4_lp_low_cmds[] = { EXYNOS_DSI_CMD0(unlock_cmd_f0), - /* AOD 10 nit */ - EXYNOS_DSI_CMD_SEQ(0x53, 0x25), /* AOD low Mode, 10 nit */ EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x52, 0x94), EXYNOS_DSI_CMD_SEQ(0x94, 0x01, 0x07, 0x98, 0x02), - EXYNOS_DSI_CMD_SEQ(0x51, 0x00, 0x01), - EXYNOS_DSI_CMD(lock_cmd_f0, 34), - EXYNOS_DSI_CMD0(display_on), + EXYNOS_DSI_CMD0(lock_cmd_f0), + EXYNOS_DSI_CMD0(min_dbv), }; static const struct exynos_dsi_cmd s6e3hc4_lp_high_cmds[] = { EXYNOS_DSI_CMD0(unlock_cmd_f0), - /* AOD 50 nit */ - EXYNOS_DSI_CMD_SEQ(0x53, 0x24), /* AOD high Mode, 50 nit */ EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x52, 0x94), - EXYNOS_DSI_CMD_SEQ(0x94, 0x00, 0x07, 0x98, 0x02), - EXYNOS_DSI_CMD_SEQ(0x51, 0x00, 0x01), - EXYNOS_DSI_CMD(lock_cmd_f0, 34), - EXYNOS_DSI_CMD0(display_on), + EXYNOS_DSI_CMD_SEQ(0x94, 0x00), + EXYNOS_DSI_CMD0(lock_cmd_f0), + EXYNOS_DSI_CMD0(min_dbv), }; static const struct exynos_binned_lp s6e3hc4_binned_lp[] = { - BINNED_LP_MODE("off", 0, s6e3hc4_lp_off_cmds), - BINNED_LP_MODE_TIMING("low", 80, s6e3hc4_lp_low_cmds, - S6E3HC4_TE2_RISING_EDGE_OFFSET, S6E3HC4_TE2_FALLING_EDGE_OFFSET), - BINNED_LP_MODE_TIMING("high", 2047, s6e3hc4_lp_high_cmds, - S6E3HC4_TE2_RISING_EDGE_OFFSET, S6E3HC4_TE2_FALLING_EDGE_OFFSET) + BINNED_LP_MODE_TIMING("low", 80, s6e3hc4_lp_low_cmds, S6E3HC4_TE2_RISING_EDGE_OFFSET, + S6E3HC4_TE2_FALLING_EDGE_OFFSET), + BINNED_LP_MODE_TIMING("high", 2047, s6e3hc4_lp_high_cmds, S6E3HC4_TE2_RISING_EDGE_OFFSET, + S6E3HC4_TE2_FALLING_EDGE_OFFSET) }; static u8 s6e3hc4_get_te2_option(struct exynos_panel *ctx) @@ -790,29 +755,173 @@ static int s6e3hc4_set_brightness(struct exynos_panel *ctx, u16 br) return exynos_dcs_set_brightness(ctx, brightness); } -static void s6e3hc4_sleep(const struct exynos_panel *ctx, int frames) +static const struct exynos_dsi_cmd s6e3hc4_display_on_cmds[] = { + EXYNOS_DSI_CMD0(unlock_cmd_f0), + EXYNOS_DSI_CMD0(sync_begin), + /* AMP type change */ + EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x4F, 0xF4), + EXYNOS_DSI_CMD_SEQ(0xF4, 0x70), + /* Vreg = 6.8V */ + EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x31, 0xF4), + EXYNOS_DSI_CMD_SEQ(0xF4, 0x17, 0x17, 0x17, 0x17, 0x17), + EXYNOS_DSI_CMD0(sync_end), + EXYNOS_DSI_CMD0(lock_cmd_f0), + + EXYNOS_DSI_CMD0(display_on), +}; +static DEFINE_EXYNOS_CMD_SET(s6e3hc4_display_on); + +static const struct exynos_dsi_cmd s6e3hc4_display_off_cmds[] = { + EXYNOS_DSI_CMD0(display_off), + + EXYNOS_DSI_CMD0(unlock_cmd_f0), + EXYNOS_DSI_CMD0(sync_begin), + /* Vreg = 4.5 */ + EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x31, 0xF4), + EXYNOS_DSI_CMD_SEQ(0xF4, 0x00, 0x00, 0x00, 0x00, 0x00), + /* AMP type change */ + EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x4F, 0xF4), + EXYNOS_DSI_CMD_SEQ(0xF4, 0x50), + EXYNOS_DSI_CMD0(sync_end), + EXYNOS_DSI_CMD0(lock_cmd_f0), +}; +static DEFINE_EXYNOS_CMD_SET(s6e3hc4_display_off); + +#define TE_WIDTH_USEC_60HZ 8400 +#define TE_WIDTH_USEC_120HZ 150 +#define TE_WIDTH_USEC_AOD 600 + +static u32 s6e3hc4_get_te_width_us(struct exynos_panel *ctx) { - const struct exynos_panel_mode *pmode = ctx->current_mode; - u32 vrefresh = pmode ? drm_mode_vrefresh(&pmode->mode) : 60; - u32 delay_us = mult_frac(1000, 1020, vrefresh) * frames; + struct s6e3hc4_panel *spanel = to_spanel(ctx); - usleep_range(delay_us, delay_us + 10); + if (spanel->hw_vrefresh == 30) + return TE_WIDTH_USEC_AOD; + else if (spanel->hw_vrefresh == 120) + return TE_WIDTH_USEC_120HZ; + return TE_WIDTH_USEC_60HZ; +} + +static void s6e3hc4_wait_for_vsync_done(struct exynos_panel *ctx) +{ + struct s6e3hc4_panel *spanel = to_spanel(ctx); + + exynos_panel_wait_for_vsync_done(ctx, s6e3hc4_get_te_width_us(ctx), + EXYNOS_VREFRESH_TO_PERIOD_USEC(spanel->hw_vrefresh)); +} + +static void s6e3hc4_panel_disable_idle(struct exynos_panel *ctx, bool is_aod) +{ + struct s6e3hc4_panel *spanel = to_spanel(ctx); + + /* disabling idle is a must before running into AOD */ + EXYNOS_DCS_BUF_ADD_SET(ctx, unlock_cmd_f0); + /* manual mode */ + EXYNOS_DCS_BUF_ADD(ctx, 0xBD, 0x21); + /* Changeable TE is a must to ensure command sync */ + EXYNOS_DCS_BUF_ADD(ctx, 0xB9, 0x04); + if (is_aod) { + /* 30 Hz */ + EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x01, 0x60); + EXYNOS_DCS_BUF_ADD(ctx, 0x60, 0x00); + } else { + /* 60 or 120 Hz */ + EXYNOS_DCS_BUF_ADD(ctx, 0x60, spanel->hw_vrefresh == 60 ? 0x01 : 0x00); + } + EXYNOS_DCS_BUF_ADD_SET(ctx, freq_update); + EXYNOS_DCS_BUF_ADD_SET_AND_FLUSH(ctx, lock_cmd_f0); + spanel->hw_idle_vrefresh = 0; } -static void s6e3hc4_set_nolp_mode(struct exynos_panel *ctx, - const struct exynos_panel_mode *pmode) +/** + * s6e3hc4_panel_set_lp_mode - enter AOD from normal mode + * @ctx: panel struct + * @pmode: targeting panel mode + */ +static void s6e3hc4_panel_set_lp_mode(struct exynos_panel *ctx, + const struct exynos_panel_mode *pmode) { - /* AOD low mode setting off */ + struct s6e3hc4_panel *spanel = to_spanel(ctx); + + s6e3hc4_panel_disable_idle(ctx, false); + /* TE freq != 60 Hz Vsync freq if it's fixed TE, wait until it's changeable TE */ + if (spanel->hw_vrefresh == 60) { + ktime_t t; + s64 delta_us; + int i = 0, period_us = EXYNOS_VREFRESH_TO_PERIOD_USEC(spanel->hw_vrefresh); + const int timeout = 5; + + while (i++ < timeout) { + exynos_panel_wait_for_vblank(ctx); + t = ktime_get(); + exynos_panel_wait_for_vblank(ctx); + delta_us = ktime_us_delta(ktime_get(), t); + if (delta_us > (period_us - 2000) && delta_us < (period_us + 2000)) + break; + } + if (i >= timeout) + dev_warn(ctx->dev, "timeout of waiting for changeable TE @ 60 Hz\n"); + usleep_range(TE_WIDTH_USEC_60HZ, TE_WIDTH_USEC_60HZ + 10); + } else { + s6e3hc4_wait_for_vsync_done(ctx); + } + exynos_panel_send_cmd_set(ctx, &s6e3hc4_display_off_cmd_set); + + s6e3hc4_wait_for_vsync_done(ctx); + EXYNOS_DCS_BUF_ADD_SET_AND_FLUSH(ctx, aod_on); + exynos_panel_send_cmd_set(ctx, &s6e3hc4_display_on_cmd_set); EXYNOS_DCS_BUF_ADD_SET(ctx, unlock_cmd_f0); + /* AOD low Mode */ EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x52, 0x94); - EXYNOS_DCS_BUF_ADD(ctx, 0x94, 0x00); + EXYNOS_DCS_BUF_ADD(ctx, 0x94, 0x01, 0x07, 0x98, 0x02); + if (ctx->panel_rev < PANEL_REV_DVT1_1) { + /* AOD timing */ + EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x3D, 0xF6); + EXYNOS_DCS_BUF_ADD(ctx, 0xF6, 0xAF, 0xB1); + EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x41, 0xF6); + EXYNOS_DCS_BUF_ADD(ctx, 0xF6, 0xB3); + /* AOD low mode setting */ + EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x01, 0x7D, 0x94); + EXYNOS_DCS_BUF_ADD(ctx, 0x94, 0x1C); + } + /* Set freq at 30 Hz */ + EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x01, 0x60); + EXYNOS_DCS_BUF_ADD(ctx, 0x60, 0x00); + /* Set 10 Hz idle */ + EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x18, 0xBD); + EXYNOS_DCS_BUF_ADD(ctx, 0xBD, 0x04, 0x00, 0x06, 0x00, 0x00, 0x00); + /* auto mode */ + EXYNOS_DCS_BUF_ADD(ctx, 0xBD, 0x25); + EXYNOS_DCS_BUF_ADD_SET(ctx, freq_update); EXYNOS_DCS_BUF_ADD_SET_AND_FLUSH(ctx, lock_cmd_f0); + spanel->hw_vrefresh = 30; + + dev_info(ctx->dev, "enter LP mode\n"); +} + +/** + * s6e3hc4_set_nolp_mode - exit AOD to normal mode + * @ctx: panel struct + * @pmode: targeting panel mode + */ +static void s6e3hc4_set_nolp_mode(struct exynos_panel *ctx, const struct exynos_panel_mode *pmode) +{ + s6e3hc4_panel_disable_idle(ctx, true); + s6e3hc4_wait_for_vsync_done(ctx); + exynos_panel_send_cmd_set(ctx, &s6e3hc4_display_off_cmd_set); + EXYNOS_DCS_BUF_ADD_SET(ctx, unlock_cmd_f0); + /* disabling AOD low Mode is a must before aod-off */ + EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x52, 0x94); + EXYNOS_DCS_BUF_ADD(ctx, 0x94, 0x00); + EXYNOS_DCS_BUF_ADD_SET(ctx, lock_cmd_f0); + EXYNOS_DCS_BUF_ADD_SET_AND_FLUSH(ctx, aod_off); + + s6e3hc4_wait_for_vsync_done(ctx); s6e3hc4_update_panel_feat(ctx, pmode, true); /* backlight control and dimming */ s6e3hc4_write_display_mode(ctx, &pmode->mode); s6e3hc4_change_frequency(ctx, pmode); - s6e3hc4_sleep(ctx, 1); - EXYNOS_DCS_BUF_ADD_SET_AND_FLUSH(ctx, display_on); + exynos_panel_send_cmd_set(ctx, &s6e3hc4_display_on_cmd_set); dev_info(ctx->dev, "exit LP mode\n"); } @@ -828,18 +937,22 @@ static const struct exynos_dsi_cmd s6e3hc4_init_cmds[] = { EXYNOS_DSI_CMD0_REV(lock_cmd_fc, PANEL_REV_LT(PANEL_REV_DVT1_1)), EXYNOS_DSI_CMD0(unlock_cmd_f0), - /* VREG 6.4V */ - EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x31, 0xF4), - EXYNOS_DSI_CMD_SEQ(0xF4, 0x13, 0x13, 0x13, 0x13, 0x13), + /* disable black insertion */ + EXYNOS_DSI_CMD_SEQ(0xBB, 0x0B, 0x04, 0x04, 0x41, 0x3D, 0x0C), /* Delete Toggle */ EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x58, 0x94), EXYNOS_DSI_CMD_SEQ(0x94, 0x0C, 0x60, 0x0C, 0x60), + EXYNOS_DSI_CMD0(sync_begin), /* VLIN1 7.9V */ EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x12, 0xB1), EXYNOS_DSI_CMD_SEQ(0xB1, 0x08), /* VGH 7.4V */ EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x0E, 0xF4), EXYNOS_DSI_CMD_SEQ(0xF4, 0x18, 0x18, 0x18, 0x18, 0x18), + /* VREG 4.5V */ + EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x31, 0xF4), + EXYNOS_DSI_CMD_SEQ(0xF4, 0x00, 0x00, 0x00, 0x00, 0x00), + EXYNOS_DSI_CMD0(sync_end), EXYNOS_DSI_CMD(lock_cmd_f0, 110), /* Enable TE*/ @@ -868,10 +981,7 @@ static const struct exynos_dsi_cmd s6e3hc4_init_cmds[] = { EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x10, 0xBD), EXYNOS_DSI_CMD_SEQ(0xBD, 0x00), EXYNOS_DSI_CMD0(freq_update), - /* VREG 6.8V */ - EXYNOS_DSI_CMD_SEQ(0xB0, 0x00, 0x31, 0xF4), - EXYNOS_DSI_CMD_SEQ(0xF4, 0x17, 0x17, 0x17, 0x17, 0x17), - EXYNOS_DSI_CMD(lock_cmd_f0, 17), + EXYNOS_DSI_CMD0(lock_cmd_f0), /* CASET */ EXYNOS_DSI_CMD_SEQ(0x2A, 0x00, 0x00, 0x05, 0x9F), @@ -923,10 +1033,12 @@ static int s6e3hc4_enable(struct drm_panel *panel) s6e3hc4_write_display_mode(ctx, mode); /* dimming and HBM */ s6e3hc4_change_frequency(ctx, pmode); - if (pmode->exynos_mode.is_lp_mode) - exynos_panel_set_lp_mode(ctx, pmode); - else if (needs_reset || (ctx->panel_state == PANEL_STATE_BLANK)) - EXYNOS_DCS_BUF_ADD_SET_AND_FLUSH(ctx, display_on); + if (pmode->exynos_mode.is_lp_mode) { + s6e3hc4_panel_set_lp_mode(ctx, pmode); + } else if (needs_reset || (ctx->panel_state == PANEL_STATE_BLANK)) { + s6e3hc4_wait_for_vsync_done(ctx); + exynos_panel_send_cmd_set(ctx, &s6e3hc4_display_on_cmd_set); + } return 0; } @@ -935,7 +1047,7 @@ static int s6e3hc4_disable(struct drm_panel *panel) { struct exynos_panel *ctx = container_of(panel, struct exynos_panel, panel); struct s6e3hc4_panel *spanel = to_spanel(ctx); - int ret; + int ret, delay_us; /* skip disable sequence if going through modeset */ if (ctx->panel_state == PANEL_STATE_MODESET) @@ -945,6 +1057,16 @@ static int s6e3hc4_disable(struct drm_panel *panel) if (ret) return ret; + s6e3hc4_panel_disable_idle(ctx, false); + delay_us = EXYNOS_VREFRESH_TO_PERIOD_USEC(spanel->hw_vrefresh) + 1000; + usleep_range(delay_us, delay_us + 10); + + exynos_panel_send_cmd_set(ctx, &s6e3hc4_display_off_cmd_set); + usleep_range(delay_us, delay_us + 10); + + if (ctx->panel_state == PANEL_STATE_OFF) + exynos_panel_send_cmd_set(ctx, &s6e3hc4_sleepin_cmd_set); + /* HBM is disabled in exynos_panel_disable() */ clear_bit(FEAT_HBM, spanel->feat); clear_bit(FEAT_IRC_OFF, spanel->feat); @@ -954,17 +1076,6 @@ static int s6e3hc4_disable(struct drm_panel *panel) spanel->hw_vrefresh = 60; spanel->hw_idle_vrefresh = 0; - EXYNOS_DCS_BUF_ADD_SET(ctx, display_off); - /* VREG 6.4V */ - EXYNOS_DCS_BUF_ADD_SET(ctx, unlock_cmd_f0); - EXYNOS_DCS_BUF_ADD(ctx, 0xB0, 0x00, 0x31, 0xF4); - EXYNOS_DCS_BUF_ADD(ctx, 0xF4, 0x13, 0x13, 0x13, 0x13, 0x13); - EXYNOS_DCS_BUF_ADD_SET_AND_FLUSH(ctx, lock_cmd_f0); - usleep_range(20000, 20010); - - if (ctx->panel_state == PANEL_STATE_OFF) - exynos_panel_send_cmd_set(ctx, &s6e3hc4_sleepin_cmd_set); - return 0; } @@ -1220,7 +1331,7 @@ static const struct exynos_panel_mode s6e3hc4_modes[] = { .exynos_mode = { .mode_flags = MIPI_DSI_CLOCK_NON_CONTINUOUS, .vblank_usec = 120, - .te_usec = 150, + .te_usec = TE_WIDTH_USEC_120HZ, .bpc = 8, .dsc = { .enabled = true, @@ -1291,7 +1402,7 @@ static const struct exynos_panel_mode s6e3hc4_modes[] = { .exynos_mode = { .mode_flags = MIPI_DSI_CLOCK_NON_CONTINUOUS, .vblank_usec = 120, - .te_usec = 150, + .te_usec = TE_WIDTH_USEC_120HZ, .bpc = 8, .dsc = { .enabled = true, @@ -1330,7 +1441,7 @@ static const struct exynos_panel_mode s6e3hc4_lp_modes[] = { .exynos_mode = { .mode_flags = MIPI_DSI_CLOCK_NON_CONTINUOUS, .vblank_usec = 120, - .te_usec = 25300, + .te_usec = TE_WIDTH_USEC_AOD, .bpc = 8, .dsc = { .enabled = true, @@ -1362,7 +1473,7 @@ static const struct exynos_panel_mode s6e3hc4_lp_modes[] = { .exynos_mode = { .mode_flags = MIPI_DSI_CLOCK_NON_CONTINUOUS, .vblank_usec = 120, - .te_usec = 25300, + .te_usec = TE_WIDTH_USEC_AOD, .bpc = 8, .dsc = { .enabled = true, @@ -1411,7 +1522,7 @@ static const struct drm_panel_funcs s6e3hc4_drm_funcs = { static const struct exynos_panel_funcs s6e3hc4_exynos_funcs = { .set_brightness = s6e3hc4_set_brightness, - .set_lp_mode = exynos_panel_set_lp_mode, + .set_lp_mode = s6e3hc4_panel_set_lp_mode, .set_nolp_mode = s6e3hc4_set_nolp_mode, .set_binned_lp = exynos_panel_set_binned_lp, .set_hbm_mode = s6e3hc4_set_hbm_mode, @@ -1478,7 +1589,6 @@ const struct exynos_panel_desc samsung_s6e3hc4 = { .num_modes = ARRAY_SIZE(s6e3hc4_modes), .lp_mode = s6e3hc4_lp_modes, .lp_mode_count = ARRAY_SIZE(s6e3hc4_lp_modes), - .lp_cmd_set = &s6e3hc4_lp_cmd_set, .binned_lp = s6e3hc4_binned_lp, .num_binned_lp = ARRAY_SIZE(s6e3hc4_binned_lp), .is_panel_idle_supported = true, |