Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4269116a authored by Chandan Uddaraju's avatar Chandan Uddaraju Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarChandan Uddaraju <chandanu@codeaurora.org>
Signed-off-by: default avatarBenet Clark <benetc@codeaurora.org>
parent 7c2e6b28
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -610,6 +610,7 @@ static int mdss_fb_probe(struct platform_device *pdev)

	mfd->ext_ad_ctrl = -1;
	mfd->bl_level = 0;
	mfd->bl_level_prev_scaled = 0;
	mfd->bl_scale = 1024;
	mfd->bl_min_lvl = 30;
	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);

	if ((pdata) && (pdata->set_backlight)) {
		mfd->bl_level_prev_scaled = mfd->bl_level_scaled;
		if (!IS_CALIB_MODE_BL(mfd))
			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
		 * 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;
			return;
		}
		pdata->set_backlight(pdata, temp);
		mfd->bl_level = bkl_lvl;
		mfd->bl_level_old = temp;
		mfd->bl_level_scaled = temp;

		if (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)) {
			mfd->bl_level = mfd->unset_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;
		}
	}
@@ -1020,6 +1022,13 @@ static int mdss_fb_blank_sub(int blank_mode, struct fb_info *info,
				schedule_delayed_work(&mfd->idle_notify_work,
					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;

	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;
			curr_pwr_state = mfd->panel_power_on;
			mfd->panel_power_on = false;
			mutex_lock(&mfd->bl_lock);
			mdss_fb_set_backlight(mfd, 0);
			mfd->panel_power_on = false;
			mfd->bl_updated = 0;
			mutex_unlock(&mfd->bl_lock);

+2 −1
Original line number Diff line number Diff line
@@ -213,7 +213,8 @@ struct msm_fb_data_type {
	u32 bl_min_lvl;
	u32 unset_bl_level;
	u32 bl_updated;
	u32 bl_level_old;
	u32 bl_level_scaled;
	u32 bl_level_prev_scaled;
	struct mutex bl_lock;

	struct platform_device *pdev;