From c02df0f77fe0ad9d86931f7f44345cf06fc5fd01 Mon Sep 17 00:00:00 2001 From: Benet Clark Date: Mon, 19 May 2014 14:36:34 -0700 Subject: [PATCH] msm: mdss: Add missing BL lock around BL-related info The bl_updated variable requires the BL lock. Otherwise, it can be corrupted and cause backlight issues. Change-Id: I55eb4b8d525765ede4f27a404f5c3f1f0b446719 Signed-off-by: Benet Clark --- drivers/video/fbdev/msm/mdss_fb.c | 6 ++++-- drivers/video/fbdev/msm/mdss_mdp_splash_logo.c | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c index e4a3686076c8..3ee23745c919 100644 --- a/drivers/video/fbdev/msm/mdss_fb.c +++ b/drivers/video/fbdev/msm/mdss_fb.c @@ -977,17 +977,17 @@ void mdss_fb_update_backlight(struct msm_fb_data_type *mfd) { struct mdss_panel_data *pdata; + mutex_lock(&mfd->bl_lock); if (mfd->unset_bl_level && !mfd->bl_updated) { pdata = dev_get_platdata(&mfd->pdev->dev); if ((pdata) && (pdata->set_backlight)) { - mutex_lock(&mfd->bl_lock); mfd->bl_level = mfd->unset_bl_level; pdata->set_backlight(pdata, mfd->bl_level); mfd->bl_level_old = mfd->unset_bl_level; - mutex_unlock(&mfd->bl_lock); mfd->bl_updated = 1; } } + mutex_unlock(&mfd->bl_lock); } static int mdss_fb_blank_sub(int blank_mode, struct fb_info *info, @@ -1042,7 +1042,9 @@ static int mdss_fb_blank_sub(int blank_mode, struct fb_info *info, mfd->op_enable = false; curr_pwr_state = mfd->panel_power_on; mfd->panel_power_on = false; + mutex_lock(&mfd->bl_lock); mfd->bl_updated = 0; + mutex_unlock(&mfd->bl_lock); ret = mfd->mdp.off_fnc(mfd); if (ret) diff --git a/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c b/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c index dcc2f414ecfc..4131ac02b03f 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c +++ b/drivers/video/fbdev/msm/mdss_mdp_splash_logo.c @@ -511,8 +511,8 @@ static int mdss_mdp_splash_thread(void *data) } unlock_fb_info(mfd->fbi); - mfd->bl_updated = true; mutex_lock(&mfd->bl_lock); + mfd->bl_updated = true; mdss_fb_set_backlight(mfd, mfd->panel_info->bl_max >> 1); mutex_unlock(&mfd->bl_lock);