From 5f5123b5f206683679ecf132779703c5bc2f76ec Mon Sep 17 00:00:00 2001 From: Midas Chien Date: Mon, 12 Jun 2023 14:19:26 +0000 Subject: panel: s6e3hc3: update idle vrefresh in backlight state Simply update panel idle vrefresh follow by self refresh for IDLE_MODE_ON_INACTIVITY mode to provide correct information in backlight state. Bug: 283374166 Test: check backlight state in normal and AOD mode Change-Id: I4d530b4433130afb21753ca79ebb24ecb0b95f61 Signed-off-by: Midas Chien --- samsung/panel/panel-samsung-s6e3hc3.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/samsung/panel/panel-samsung-s6e3hc3.c b/samsung/panel/panel-samsung-s6e3hc3.c index 5c1f5a9..485c0fd 100644 --- a/samsung/panel/panel-samsung-s6e3hc3.c +++ b/samsung/panel/panel-samsung-s6e3hc3.c @@ -533,8 +533,12 @@ static bool s6e3hc3_set_self_refresh(struct exynos_panel *ctx, bool enable) return false; /* self refresh is not supported in lp mode since that always makes use of early exit */ - if (pmode->exynos_mode.is_lp_mode) + if (pmode->exynos_mode.is_lp_mode) { + /* set 10Hz while self refresh is active, otherwise clear it */ + ctx->panel_idle_vrefresh = enable ? 10 : 0; + backlight_state_changed(ctx->bl); return false; + } idle_vrefresh = s6e3hc3_get_min_idle_vrefresh(ctx, pmode); @@ -543,13 +547,17 @@ static bool s6e3hc3_set_self_refresh(struct exynos_panel *ctx, bool enable) * if idle mode is on inactivity, may need to update the target fps for auto mode, * or switch to manual mode if idle should be disabled (idle_vrefresh=0) */ - if ((pmode->idle_mode == IDLE_MODE_ON_INACTIVITY) && - (spanel->auto_mode_vrefresh != idle_vrefresh)) { - dev_dbg(ctx->dev, - "early exit update needed for mode: %s (idle_vrefresh: %d)\n", - pmode->mode.name, idle_vrefresh); - s6e3hc3_update_refresh_mode(ctx, pmode, idle_vrefresh); - return true; + if (pmode->idle_mode == IDLE_MODE_ON_INACTIVITY) { + /* simply update idle vrefresh follow by self refresh */ + ctx->panel_idle_vrefresh = enable ? idle_vrefresh : 0; + backlight_state_changed(ctx->bl); + if (spanel->auto_mode_vrefresh != idle_vrefresh) { + dev_dbg(ctx->dev, + "early exit update needed for mode: %s (idle_vrefresh: %d)\n", + pmode->mode.name, idle_vrefresh); + s6e3hc3_update_refresh_mode(ctx, pmode, idle_vrefresh); + return true; + } } return false; } -- cgit v1.2.3