Loading drivers/video/msm/mdss/mdss_fb.c +13 −29 Original line number Diff line number Diff line Loading @@ -1117,8 +1117,8 @@ static void mdss_fb_scale_bl(struct msm_fb_data_type *mfd, u32 *bl_lvl) void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl) { struct mdss_panel_data *pdata; u32 temp = bkl_lvl, ad_bl; int ret = -EINVAL; u32 temp = bkl_lvl; bool bl_notify_needed = false; if ((((mdss_fb_is_power_off(mfd) && mfd->dcm_state != DCM_ENTER) || !mfd->bl_updated) && !IS_CALIB_MODE_BL(mfd)) || Loading @@ -1132,18 +1132,11 @@ 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)) { if (mfd->mdp.ad_calc_bl) { if (mfd->ad_bl_level == 0) mfd->ad_bl_level = temp; ad_bl = mfd->ad_bl_level; ret = (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &ad_bl); if ((!ret) && (mfd->ad_bl_level != ad_bl) && mfd->mdp.ad_invalidate_input) { mfd->ad_bl_level = ad_bl; (*mfd->mdp.ad_invalidate_input)(mfd); if (mfd->mdp.ad_calc_bl) (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &bl_notify_needed); if (bl_notify_needed) mdss_fb_bl_update_notify(mfd); } } if (!IS_CALIB_MODE_BL(mfd)) mdss_fb_scale_bl(mfd, &temp); /* Loading @@ -1168,9 +1161,8 @@ void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl) void mdss_fb_update_backlight(struct msm_fb_data_type *mfd) { struct mdss_panel_data *pdata; int ret = 0; u32 temp; u32 ad_bl; bool bl_notify = false; if (!mfd->unset_bl_level) return; Loading @@ -1180,19 +1172,11 @@ void mdss_fb_update_backlight(struct msm_fb_data_type *mfd) if ((pdata) && (pdata->set_backlight)) { mfd->bl_level = mfd->unset_bl_level; temp = mfd->bl_level; if (mfd->mdp.ad_calc_bl) { if (mfd->ad_bl_level == 0) mfd->ad_bl_level = temp; ad_bl = mfd->ad_bl_level; ret = (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &ad_bl); if ((!ret) && (mfd->ad_bl_level != ad_bl) && mfd->mdp.ad_invalidate_input) { mfd->ad_bl_level = ad_bl; (*mfd->mdp.ad_invalidate_input)(mfd); if (mfd->mdp.ad_calc_bl) (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &bl_notify); if (bl_notify) mdss_fb_bl_update_notify(mfd); } } pdata->set_backlight(pdata, temp); mfd->bl_level_scaled = mfd->unset_bl_level; mfd->bl_updated = 1; Loading drivers/video/msm/mdss/mdss_fb.h +1 −2 Original line number Diff line number Diff line Loading @@ -202,9 +202,8 @@ struct msm_mdp_interface { int (*lut_update)(struct msm_fb_data_type *mfd, struct fb_cmap *cmap); int (*do_histogram)(struct msm_fb_data_type *mfd, struct mdp_histogram *hist); int (*ad_invalidate_input)(struct msm_fb_data_type *mfd); int (*ad_calc_bl)(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, int *ad_bl_out); int *bl_out, bool *bl_out_notify); int (*panel_register_done)(struct mdss_panel_data *pdata); u32 (*fb_stride)(u32 fb_index, u32 xres, int bpp); int (*splash_init_fnc)(struct msm_fb_data_type *mfd); Loading drivers/video/msm/mdss/mdss_mdp_pp.c +16 −14 Original line number Diff line number Diff line Loading @@ -438,7 +438,7 @@ static int pp_ad_attenuate_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out); static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, int inv); static int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, int *ad_bl_out); bool *bl_out_notify); static int pp_num_to_side(struct mdss_mdp_ctl *ctl, u32 num); static inline bool pp_sts_is_enabled(u32 sts, int side); static inline void pp_sts_set_split_bits(u32 *sts, u32 bits); Loading Loading @@ -2063,11 +2063,8 @@ int mdss_mdp_pp_resume(struct mdss_mdp_ctl *ctl, u32 dspp_num) bl_mfd = ctl->mfd; } mutex_lock(&bl_mfd->bl_lock); bl = bl_mfd->ad_bl_level; mutex_unlock(&bl_mfd->bl_lock); mutex_lock(&ad->lock); bl = bl_mfd->ad_bl_level; if (PP_AD_STATE_CFG & ad->state) pp_ad_cfg_write(&mdata->ad_off[dspp_num], ad); if (PP_AD_STATE_INIT & ad->state) Loading Loading @@ -2193,17 +2190,16 @@ int mdss_mdp_pp_overlay_init(struct msm_fb_data_type *mfd) return -EPERM; } mfd->mdp.ad_invalidate_input = pp_ad_invalidate_input; mfd->mdp.ad_calc_bl = pp_ad_calc_bl; return 0; } int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, int *ad_bl_out) static int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, bool *bl_out_notify) { int ret = -1; int temp = bl_in; u32 ad_bl_out = 0; struct mdss_ad_info *ad; ret = mdss_mdp_get_ad(mfd, &ad); Loading Loading @@ -2247,7 +2243,7 @@ int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, mutex_unlock(&ad->lock); return ret; } *ad_bl_out = temp; ad_bl_out = temp; ret = pp_ad_linearize_bl(ad, temp, &temp, MDP_PP_AD_BL_LINEAR_INV); if (ret) { Loading @@ -2256,6 +2252,14 @@ int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, return ret; } *bl_out = temp; if (ad_bl_out != mfd->ad_bl_level) { mfd->ad_bl_level = ad_bl_out; *bl_out_notify = true; } if (*bl_out_notify) pp_ad_invalidate_input(mfd); mutex_unlock(&ad->lock); return 0; } Loading Loading @@ -4923,10 +4927,6 @@ static int mdss_mdp_ad_setup(struct msm_fb_data_type *mfd) mdata = mfd_to_mdata(mfd); mutex_lock(&bl_mfd->bl_lock); bl = bl_mfd->ad_bl_level; mutex_unlock(&bl_mfd->bl_lock); mutex_lock(&ad->lock); if (ad->sts != last_sts || ad->state != last_state) { last_sts = ad->sts; Loading @@ -4944,6 +4944,8 @@ 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; pr_debug("dirty data, last_bl = %d\n", ad->last_bl); bl = bl_mfd->ad_bl_level; if ((ad->cfg.mode == MDSS_AD_MODE_AUTO_STR) && (ad->last_bl != bl)) { ad->last_bl = bl; Loading Loading
drivers/video/msm/mdss/mdss_fb.c +13 −29 Original line number Diff line number Diff line Loading @@ -1117,8 +1117,8 @@ static void mdss_fb_scale_bl(struct msm_fb_data_type *mfd, u32 *bl_lvl) void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl) { struct mdss_panel_data *pdata; u32 temp = bkl_lvl, ad_bl; int ret = -EINVAL; u32 temp = bkl_lvl; bool bl_notify_needed = false; if ((((mdss_fb_is_power_off(mfd) && mfd->dcm_state != DCM_ENTER) || !mfd->bl_updated) && !IS_CALIB_MODE_BL(mfd)) || Loading @@ -1132,18 +1132,11 @@ 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)) { if (mfd->mdp.ad_calc_bl) { if (mfd->ad_bl_level == 0) mfd->ad_bl_level = temp; ad_bl = mfd->ad_bl_level; ret = (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &ad_bl); if ((!ret) && (mfd->ad_bl_level != ad_bl) && mfd->mdp.ad_invalidate_input) { mfd->ad_bl_level = ad_bl; (*mfd->mdp.ad_invalidate_input)(mfd); if (mfd->mdp.ad_calc_bl) (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &bl_notify_needed); if (bl_notify_needed) mdss_fb_bl_update_notify(mfd); } } if (!IS_CALIB_MODE_BL(mfd)) mdss_fb_scale_bl(mfd, &temp); /* Loading @@ -1168,9 +1161,8 @@ void mdss_fb_set_backlight(struct msm_fb_data_type *mfd, u32 bkl_lvl) void mdss_fb_update_backlight(struct msm_fb_data_type *mfd) { struct mdss_panel_data *pdata; int ret = 0; u32 temp; u32 ad_bl; bool bl_notify = false; if (!mfd->unset_bl_level) return; Loading @@ -1180,19 +1172,11 @@ void mdss_fb_update_backlight(struct msm_fb_data_type *mfd) if ((pdata) && (pdata->set_backlight)) { mfd->bl_level = mfd->unset_bl_level; temp = mfd->bl_level; if (mfd->mdp.ad_calc_bl) { if (mfd->ad_bl_level == 0) mfd->ad_bl_level = temp; ad_bl = mfd->ad_bl_level; ret = (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &ad_bl); if ((!ret) && (mfd->ad_bl_level != ad_bl) && mfd->mdp.ad_invalidate_input) { mfd->ad_bl_level = ad_bl; (*mfd->mdp.ad_invalidate_input)(mfd); if (mfd->mdp.ad_calc_bl) (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &bl_notify); if (bl_notify) mdss_fb_bl_update_notify(mfd); } } pdata->set_backlight(pdata, temp); mfd->bl_level_scaled = mfd->unset_bl_level; mfd->bl_updated = 1; Loading
drivers/video/msm/mdss/mdss_fb.h +1 −2 Original line number Diff line number Diff line Loading @@ -202,9 +202,8 @@ struct msm_mdp_interface { int (*lut_update)(struct msm_fb_data_type *mfd, struct fb_cmap *cmap); int (*do_histogram)(struct msm_fb_data_type *mfd, struct mdp_histogram *hist); int (*ad_invalidate_input)(struct msm_fb_data_type *mfd); int (*ad_calc_bl)(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, int *ad_bl_out); int *bl_out, bool *bl_out_notify); int (*panel_register_done)(struct mdss_panel_data *pdata); u32 (*fb_stride)(u32 fb_index, u32 xres, int bpp); int (*splash_init_fnc)(struct msm_fb_data_type *mfd); Loading
drivers/video/msm/mdss/mdss_mdp_pp.c +16 −14 Original line number Diff line number Diff line Loading @@ -438,7 +438,7 @@ static int pp_ad_attenuate_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out); static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, int inv); static int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, int *ad_bl_out); bool *bl_out_notify); static int pp_num_to_side(struct mdss_mdp_ctl *ctl, u32 num); static inline bool pp_sts_is_enabled(u32 sts, int side); static inline void pp_sts_set_split_bits(u32 *sts, u32 bits); Loading Loading @@ -2063,11 +2063,8 @@ int mdss_mdp_pp_resume(struct mdss_mdp_ctl *ctl, u32 dspp_num) bl_mfd = ctl->mfd; } mutex_lock(&bl_mfd->bl_lock); bl = bl_mfd->ad_bl_level; mutex_unlock(&bl_mfd->bl_lock); mutex_lock(&ad->lock); bl = bl_mfd->ad_bl_level; if (PP_AD_STATE_CFG & ad->state) pp_ad_cfg_write(&mdata->ad_off[dspp_num], ad); if (PP_AD_STATE_INIT & ad->state) Loading Loading @@ -2193,17 +2190,16 @@ int mdss_mdp_pp_overlay_init(struct msm_fb_data_type *mfd) return -EPERM; } mfd->mdp.ad_invalidate_input = pp_ad_invalidate_input; mfd->mdp.ad_calc_bl = pp_ad_calc_bl; return 0; } int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, int *ad_bl_out) static int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, bool *bl_out_notify) { int ret = -1; int temp = bl_in; u32 ad_bl_out = 0; struct mdss_ad_info *ad; ret = mdss_mdp_get_ad(mfd, &ad); Loading Loading @@ -2247,7 +2243,7 @@ int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, mutex_unlock(&ad->lock); return ret; } *ad_bl_out = temp; ad_bl_out = temp; ret = pp_ad_linearize_bl(ad, temp, &temp, MDP_PP_AD_BL_LINEAR_INV); if (ret) { Loading @@ -2256,6 +2252,14 @@ int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, return ret; } *bl_out = temp; if (ad_bl_out != mfd->ad_bl_level) { mfd->ad_bl_level = ad_bl_out; *bl_out_notify = true; } if (*bl_out_notify) pp_ad_invalidate_input(mfd); mutex_unlock(&ad->lock); return 0; } Loading Loading @@ -4923,10 +4927,6 @@ static int mdss_mdp_ad_setup(struct msm_fb_data_type *mfd) mdata = mfd_to_mdata(mfd); mutex_lock(&bl_mfd->bl_lock); bl = bl_mfd->ad_bl_level; mutex_unlock(&bl_mfd->bl_lock); mutex_lock(&ad->lock); if (ad->sts != last_sts || ad->state != last_state) { last_sts = ad->sts; Loading @@ -4944,6 +4944,8 @@ 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; pr_debug("dirty data, last_bl = %d\n", ad->last_bl); bl = bl_mfd->ad_bl_level; if ((ad->cfg.mode == MDSS_AD_MODE_AUTO_STR) && (ad->last_bl != bl)) { ad->last_bl = bl; Loading