msm: mdss: control backlight level during blank and unblank events
Add code to set the backlight level to zero for blank event and restore the backlight level to its previous value during unblank event. This will fix any unexpected panel flicker that might show up on the screen during panel ON sequence. CRs-Fixed: 608091 Change-Id: I871a067b0cc40d893b8b7e5a25103ebb914f9b7a Signed-off-by: Chandan Uddaraju <chandanu@codeaurora.org> Signed-off-by: Benet Clark <benetc@codeaurora.org>
This commit is contained in:
parent
f602fccdab
commit
7e06fea357
2 changed files with 16 additions and 5 deletions
|
@ -610,6 +610,7 @@ static int mdss_fb_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
mfd->ext_ad_ctrl = -1;
|
mfd->ext_ad_ctrl = -1;
|
||||||
mfd->bl_level = 0;
|
mfd->bl_level = 0;
|
||||||
|
mfd->bl_level_prev_scaled = 0;
|
||||||
mfd->bl_scale = 1024;
|
mfd->bl_scale = 1024;
|
||||||
mfd->bl_min_lvl = 30;
|
mfd->bl_min_lvl = 30;
|
||||||
mfd->fb_imgType = MDP_RGBA_8888;
|
mfd->fb_imgType = MDP_RGBA_8888;
|
||||||
|
@ -944,6 +945,7 @@ void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl)
|
||||||
pdata = dev_get_platdata(&mfd->pdev->dev);
|
pdata = dev_get_platdata(&mfd->pdev->dev);
|
||||||
|
|
||||||
if ((pdata) && (pdata->set_backlight)) {
|
if ((pdata) && (pdata->set_backlight)) {
|
||||||
|
mfd->bl_level_prev_scaled = mfd->bl_level_scaled;
|
||||||
if (!IS_CALIB_MODE_BL(mfd))
|
if (!IS_CALIB_MODE_BL(mfd))
|
||||||
mdss_fb_scale_bl(mfd, &temp);
|
mdss_fb_scale_bl(mfd, &temp);
|
||||||
/*
|
/*
|
||||||
|
@ -954,13 +956,13 @@ void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl)
|
||||||
* as well as setting bl_level to bkl_lvl even though the
|
* as well as setting bl_level to bkl_lvl even though the
|
||||||
* backlight has been set to the scaled value.
|
* backlight has been set to the scaled value.
|
||||||
*/
|
*/
|
||||||
if (mfd->bl_level_old == temp) {
|
if (mfd->bl_level_scaled == temp) {
|
||||||
mfd->bl_level = bkl_lvl;
|
mfd->bl_level = bkl_lvl;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pdata->set_backlight(pdata, temp);
|
pdata->set_backlight(pdata, temp);
|
||||||
mfd->bl_level = bkl_lvl;
|
mfd->bl_level = bkl_lvl;
|
||||||
mfd->bl_level_old = temp;
|
mfd->bl_level_scaled = temp;
|
||||||
|
|
||||||
if (mfd->mdp.update_ad_input) {
|
if (mfd->mdp.update_ad_input) {
|
||||||
update_ad_input = mfd->mdp.update_ad_input;
|
update_ad_input = mfd->mdp.update_ad_input;
|
||||||
|
@ -983,7 +985,7 @@ void mdss_fb_update_backlight(struct msm_fb_data_type *mfd)
|
||||||
if ((pdata) && (pdata->set_backlight)) {
|
if ((pdata) && (pdata->set_backlight)) {
|
||||||
mfd->bl_level = mfd->unset_bl_level;
|
mfd->bl_level = mfd->unset_bl_level;
|
||||||
pdata->set_backlight(pdata, mfd->bl_level);
|
pdata->set_backlight(pdata, mfd->bl_level);
|
||||||
mfd->bl_level_old = mfd->unset_bl_level;
|
mfd->bl_level_scaled = mfd->unset_bl_level;
|
||||||
mfd->bl_updated = 1;
|
mfd->bl_updated = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1020,6 +1022,13 @@ static int mdss_fb_blank_sub(int blank_mode, struct fb_info *info,
|
||||||
schedule_delayed_work(&mfd->idle_notify_work,
|
schedule_delayed_work(&mfd->idle_notify_work,
|
||||||
msecs_to_jiffies(mfd->idle_time));
|
msecs_to_jiffies(mfd->idle_time));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_lock(&mfd->bl_lock);
|
||||||
|
if (!mfd->bl_updated) {
|
||||||
|
mfd->bl_updated = 1;
|
||||||
|
mdss_fb_set_backlight(mfd, mfd->bl_level_prev_scaled);
|
||||||
|
}
|
||||||
|
mutex_unlock(&mfd->bl_lock);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FB_BLANK_VSYNC_SUSPEND:
|
case FB_BLANK_VSYNC_SUSPEND:
|
||||||
|
@ -1041,8 +1050,9 @@ static int mdss_fb_blank_sub(int blank_mode, struct fb_info *info,
|
||||||
|
|
||||||
mfd->op_enable = false;
|
mfd->op_enable = false;
|
||||||
curr_pwr_state = mfd->panel_power_on;
|
curr_pwr_state = mfd->panel_power_on;
|
||||||
mfd->panel_power_on = false;
|
|
||||||
mutex_lock(&mfd->bl_lock);
|
mutex_lock(&mfd->bl_lock);
|
||||||
|
mdss_fb_set_backlight(mfd, 0);
|
||||||
|
mfd->panel_power_on = false;
|
||||||
mfd->bl_updated = 0;
|
mfd->bl_updated = 0;
|
||||||
mutex_unlock(&mfd->bl_lock);
|
mutex_unlock(&mfd->bl_lock);
|
||||||
|
|
||||||
|
|
|
@ -213,7 +213,8 @@ struct msm_fb_data_type {
|
||||||
u32 bl_min_lvl;
|
u32 bl_min_lvl;
|
||||||
u32 unset_bl_level;
|
u32 unset_bl_level;
|
||||||
u32 bl_updated;
|
u32 bl_updated;
|
||||||
u32 bl_level_old;
|
u32 bl_level_scaled;
|
||||||
|
u32 bl_level_prev_scaled;
|
||||||
struct mutex bl_lock;
|
struct mutex bl_lock;
|
||||||
|
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
|
|
Loading…
Add table
Reference in a new issue