diff options
| author | Carl Vanderlip <carlv@codeaurora.org> | 2013-08-27 19:06:31 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:20:27 -0700 |
| commit | 579538607efefcc7222bac835d2cb0a3a84df4ba (patch) | |
| tree | 61f639cd06460581c89482254d72b6ed70b6c8ba | |
| parent | 903611c86087a275013787446dbc991be4acc701 (diff) | |
msm: mdss: Update BL on first AD update
First AD update is not updating with current backlight value. Initialize
last_bl variable so that first request updates backlight along with user
specified input.
Change-Id: I453e5448229dbddb6204c0a654c267e1540c59a3
Signed-off-by: Carl Vanderlip <carlv@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pp.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_pp.c b/drivers/video/fbdev/msm/mdss_mdp_pp.c index b2fd3b00f646..b574d5d11fb8 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pp.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pp.c @@ -3148,21 +3148,20 @@ static int mdss_mdp_ad_setup(struct msm_fb_data_type *mfd) */ ad->sts &= ~PP_AD_STS_DIRTY_DATA; ad->state |= PP_AD_STATE_DATA; - bl = 0; - if (MDSS_AD_RUNNING_AUTO_STR(ad) || ad->last_bl == 0) { - mutex_lock(&mfd->bl_lock); - bl = mfd->bl_level; - if (bl != ad->last_bl) { - ad->last_bl = bl; - ad->calc_itr = ad->cfg.stab_itr; - ad->sts |= PP_AD_STS_DIRTY_VSYNC; - } + mutex_lock(&mfd->bl_lock); + bl = mfd->bl_level; + pr_debug("dirty data, last_bl = %d ", ad->last_bl); + if ((ad->cfg.mode == MDSS_AD_MODE_AUTO_STR) && + (ad->last_bl != bl)) { + ad->last_bl = bl; + ad->calc_itr = ad->cfg.stab_itr; + ad->sts |= PP_AD_STS_DIRTY_VSYNC; if (ad->state & PP_AD_STATE_BL_LIN) { bl = ad->bl_lin[bl >> ad->bl_bright_shift]; bl = bl << ad->bl_bright_shift; } - mutex_unlock(&mfd->bl_lock); } + mutex_unlock(&mfd->bl_lock); pp_ad_input_write(ad, bl); } @@ -3206,6 +3205,7 @@ static int mdss_mdp_ad_setup(struct msm_fb_data_type *mfd) ad->bl_bright_shift = 0; ad->ad_data = 0; ad->ad_data_mode = 0; + ad->last_bl = 0; ad->calc_itr = 0; memset(&ad->bl_lin, 0, sizeof(uint32_t) * AD_BL_LIN_LEN); @@ -3352,6 +3352,7 @@ int mdss_mdp_ad_addr_setup(struct mdss_data_type *mdata, u32 *ad_off) mdata->ad_cfgs[i].num = i; mdata->ad_cfgs[i].calc_itr = 0; mdata->ad_cfgs[i].last_str = 0xFFFFFFFF; + mdata->ad_cfgs[i].last_bl = 0; mutex_init(&mdata->ad_cfgs[i].lock); mdata->ad_cfgs[i].handle.vsync_handler = pp_ad_vsync_handler; INIT_WORK(&mdata->ad_cfgs[i].calc_work, pp_ad_calc_worker); |
