summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPing Li <pingli@codeaurora.org>2016-03-02 12:56:16 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-25 16:03:28 -0700
commit20787329abeccbd68ae652f225b1e2718832e2bd (patch)
tree7ca9c2d88a9c09255e1ab3585e33137b0164b2dd
parent01486f292aac28baf644d509c7dcd981e742e47a (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.c11
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);