Loading drivers/video/msm/mdss/mdss_fb.c +8 −28 Original line number Diff line number Diff line Loading @@ -1058,8 +1058,7 @@ 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; /* todo: temporary workaround to support doze mode */ Loading @@ -1081,18 +1080,9 @@ 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); bl_notify_needed = true; } } if (mfd->mdp.ad_calc_bl) (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &bl_notify_needed); if (!IS_CALIB_MODE_BL(mfd)) mdss_fb_scale_bl(mfd, &temp); /* Loading Loading @@ -1120,9 +1110,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 @@ -1132,18 +1121,9 @@ 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); pdata->set_backlight(pdata, temp); mfd->bl_level_old = 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 @@ -165,9 +165,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 +20 −15 Original line number Diff line number Diff line /* * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -437,7 +437,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 @@ -2023,11 +2023,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 @@ -2155,17 +2152,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 @@ -2209,7 +2205,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 @@ -2218,6 +2214,17 @@ int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, return ret; } *bl_out = temp; if (!mfd->ad_bl_level) mfd->ad_bl_level = bl_in; 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 @@ -4876,10 +4883,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 @@ -4897,6 +4900,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 +8 −28 Original line number Diff line number Diff line Loading @@ -1058,8 +1058,7 @@ 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; /* todo: temporary workaround to support doze mode */ Loading @@ -1081,18 +1080,9 @@ 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); bl_notify_needed = true; } } if (mfd->mdp.ad_calc_bl) (*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &bl_notify_needed); if (!IS_CALIB_MODE_BL(mfd)) mdss_fb_scale_bl(mfd, &temp); /* Loading Loading @@ -1120,9 +1110,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 @@ -1132,18 +1121,9 @@ 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); pdata->set_backlight(pdata, temp); mfd->bl_level_old = 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 @@ -165,9 +165,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 +20 −15 Original line number Diff line number Diff line /* * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. * Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -437,7 +437,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 @@ -2023,11 +2023,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 @@ -2155,17 +2152,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 @@ -2209,7 +2205,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 @@ -2218,6 +2214,17 @@ int pp_ad_calc_bl(struct msm_fb_data_type *mfd, int bl_in, int *bl_out, return ret; } *bl_out = temp; if (!mfd->ad_bl_level) mfd->ad_bl_level = bl_in; 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 @@ -4876,10 +4883,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 @@ -4897,6 +4900,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