From 8df86193da74da0dec2502aa43d9ab468898840d Mon Sep 17 00:00:00 2001 From: wangyq13 Date: Fri, 23 Oct 2020 10:09:35 +0800 Subject: [PATCH] wled: enable cabc before set brightness when adjust bl As https://gerrit.mot.com/#/c/1743071/ do, if enable cabc after setting brightness when adjust brightness, may cause backlight flicker. So move cabc enable before setting brightness when adjust brightness. But still enable cabc after setting brihtness if phone screen on to avoid peak current. Change-Id: I625f6cdc8cd6c30e049c13994850932b9653dde9 Reviewed-on: https://gerrit.mot.com/1782873 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Yeqing Wang Reviewed-by: Shanshan Dai Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/video/backlight/qcom-spmi-wled.c | 47 ++++++++++++++++-------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/drivers/video/backlight/qcom-spmi-wled.c b/drivers/video/backlight/qcom-spmi-wled.c index b857f4744e7d..5ecbc9aeb10f 100644 --- a/drivers/video/backlight/qcom-spmi-wled.c +++ b/drivers/video/backlight/qcom-spmi-wled.c @@ -566,17 +566,24 @@ static int wled_update_status(struct backlight_device *bl) brightness = 0; mutex_lock(&wled->lock); - - if (wled->low_bl_force_cabc_disable && brightness <= wled->low_bl_cfg.low_bl_threshold) { - brightness = brightness * wled->low_bl_cfg.low_bl_remap_percent/100; - if (!wled->cabc_disabled) { - wled->cabc_config(wled, false); - wled->cabc_disabled = true; - pr_info("low brightness(%d), disable cabc\n", brightness); - } - } - if (brightness) { + if (wled->low_bl_force_cabc_disable && wled->brightness) { + if (brightness <= wled->low_bl_cfg.low_bl_threshold) { + brightness = brightness * wled->low_bl_cfg.low_bl_remap_percent/100; + if (!wled->cabc_disabled) { + wled->cabc_config(wled, false); + wled->cabc_disabled = true; + pr_info("under low brightness(%d), will disable cabc\n", brightness); + } + + } + else if ((wled->brightness < wled->low_bl_cfg.low_bl_threshold) && (wled->cabc_disabled)) { + wled->cabc_disabled = false; + wled->cabc_config(wled, true); + pr_info("exit low brightness(%d), will enable cabc\n", brightness); + } + } + if (wled->bl_step_up_enable) { rc = wled_set_brightness_step(wled, brightness); if (rc < 0) { @@ -590,12 +597,15 @@ static int wled_update_status(struct backlight_device *bl) goto unlock_mutex; } - if (wled->low_bl_force_cabc_disable && brightness > wled->low_bl_cfg.low_bl_threshold - && wled->brightness <= wled->low_bl_cfg.low_bl_threshold && wled->cabc_disabled) { - msleep(wled->low_bl_cfg.low_bl_delay_ms); - wled->cabc_disabled = false; - wled->cabc_config(wled, true); - pr_info("enable wled cabc\n"); + if (wled->cabc_disabled && wled->low_bl_force_cabc_disable && !wled->brightness) { + if (brightness <= wled->low_bl_cfg.low_bl_threshold) + pr_info("keep cabc disabled\n"); + else { + msleep(wled->low_bl_cfg.low_bl_delay_ms); + wled->cabc_disabled = false; + wled->cabc_config(wled, true); + pr_info("enable wled cabc\n"); + } } if (is_wled5(wled)) { @@ -645,6 +655,11 @@ static int wled_update_status(struct backlight_device *bl) } } + if (!wled->cabc_disabled && wled->low_bl_force_cabc_disable) { + wled->cabc_config(wled, false); + wled->cabc_disabled = true; + pr_info("disable wled cabc\n"); + } rc = wled_module_enable(wled, brightness); if (rc < 0) { pr_err("wled disable failed rc:%d\n", rc);