diff options
| author | Ping Li <pingli@codeaurora.org> | 2016-03-02 12:56:16 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-25 16:03:28 -0700 |
| commit | 20787329abeccbd68ae652f225b1e2718832e2bd (patch) | |
| tree | 7ca9c2d88a9c09255e1ab3585e33137b0164b2dd | |
| parent | 01486f292aac28baf644d509c7dcd981e742e47a (diff) | |
msm: mdss: Prevent zero backlight from been sent to AD core
Sending zero backlight to AD core will cause a divided by zero
case, which should be avoided. This change adds a check to
prevent zero backlight from been sent to AD core.
CRs-Fixed: 985303
Change-Id: Ida5115edc61dea9855be89186af3faae040fd711
Signed-off-by: Ping Li <pingli@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pp.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_pp.c b/drivers/video/fbdev/msm/mdss_mdp_pp.c index 0e2814c9de5f..f74e46dccdb9 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pp.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pp.c @@ -2970,6 +2970,9 @@ static int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, return ret; } + /* Don't update BL = 0 to AD */ + if (bl_in == 0) + return 0; mutex_lock(&ad->lock); if (!mfd->ad_bl_level) mfd->ad_bl_level = bl_in; @@ -5709,6 +5712,8 @@ static void pp_ad_input_write(struct mdss_mdp_ad *ad_hw, writel_relaxed(ad->ad_data, base + MDSS_MDP_REG_AD_AL); break; case MDSS_AD_MODE_AUTO_STR: + pr_debug("bl_data = %d, ad_data = %d\n", ad->bl_data, + ad->ad_data); ad->last_ad_data = ad->ad_data; ad->last_ad_data_valid = true; writel_relaxed(ad->bl_data, base + MDSS_MDP_REG_AD_BL); @@ -5727,6 +5732,8 @@ static void pp_ad_input_write(struct mdss_mdp_ad *ad_hw, ad->last_ad_data = ad->ad_data; ad->last_ad_data_valid = true; } + pr_debug("bl_data = %d, last_ad_data = %d, last_str = %d\n", + ad->bl_data, ad->last_ad_data, ad->last_str); writel_relaxed(ad->bl_data, base + MDSS_MDP_REG_AD_BL); writel_relaxed(ad->last_ad_data, base + MDSS_MDP_REG_AD_AL); writel_relaxed(ad->last_str, base + MDSS_MDP_REG_AD_STR_MAN); @@ -6320,9 +6327,9 @@ static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, } pr_debug("bl_in = %d, inv = %d\n", bl, inv); - if (inv == MDP_PP_AD_BL_LINEAR_INV) { + if (inv == MDP_PP_AD_BL_LINEAR) { bl_lut = ad->bl_lin; - } else if (inv == MDP_PP_AD_BL_LINEAR) { + } else if (inv == MDP_PP_AD_BL_LINEAR_INV) { bl_lut = ad->bl_lin_inv; } else { pr_err("invalid inv param: inv = %d\n", inv); |
