msm_fb: display: Add backlight with first pan display after resume
Add backlight call with first pan display after resume operation
of framebuffer driver
CRs-Fixed: 323682
Signed-off-by: Ravishangar Kalyanam <rkalya@codeaurora.org>
Change-Id: Ic27c2c9fe37b622bbd9ab5933ca45626decd53ae
diff --git a/drivers/video/msm/msm_fb.c b/drivers/video/msm/msm_fb.c
index 59c2afe..ab91e41 100644
--- a/drivers/video/msm/msm_fb.c
+++ b/drivers/video/msm/msm_fb.c
@@ -665,16 +665,31 @@
}
#endif
+static int unset_bl_level, bl_updated;
+static int bl_level_old;
+
void msm_fb_set_backlight(struct msm_fb_data_type *mfd, __u32 bkl_lvl)
{
struct msm_fb_panel_data *pdata;
+ if (!mfd->panel_power_on || !bl_updated) {
+ unset_bl_level = bkl_lvl;
+ return;
+ } else {
+ unset_bl_level = 0;
+ }
+
pdata = (struct msm_fb_panel_data *)mfd->pdev->dev.platform_data;
if ((pdata) && (pdata->set_backlight)) {
down(&mfd->sem);
+ if (bl_level_old == bkl_lvl) {
+ up(&mfd->sem);
+ return;
+ }
mfd->bl_level = bkl_lvl;
pdata->set_backlight(mfd);
+ bl_level_old = mfd->bl_level;
up(&mfd->sem);
}
}
@@ -728,6 +743,7 @@
mfd->op_enable = FALSE;
curr_pwr_state = mfd->panel_power_on;
mfd->panel_power_on = FALSE;
+ bl_updated = 0;
msleep(16);
ret = pdata->off(mfd->pdev);
@@ -1393,6 +1409,7 @@
struct mdp_dirty_region dirty;
struct mdp_dirty_region *dirtyPtr = NULL;
struct msm_fb_data_type *mfd = (struct msm_fb_data_type *)info->par;
+ struct msm_fb_panel_data *pdata;
if ((!mfd->op_enable) || (!mfd->panel_power_on))
return -EPERM;
@@ -1459,6 +1476,19 @@
mdp_dma_pan_update(info);
up(&msm_fb_pan_sem);
+ if (unset_bl_level && !bl_updated) {
+ pdata = (struct msm_fb_panel_data *)mfd->pdev->
+ dev.platform_data;
+ if ((pdata) && (pdata->set_backlight)) {
+ down(&mfd->sem);
+ mfd->bl_level = unset_bl_level;
+ pdata->set_backlight(mfd);
+ bl_level_old = unset_bl_level;
+ up(&mfd->sem);
+ }
+ bl_updated = 1;
+ }
+
++mfd->panel_info.frame_count;
return 0;
}