Loading drivers/video/msm/mdss/mdss_mdp_pp.c +21 −22 Original line number Diff line number Diff line Loading @@ -5808,10 +5808,11 @@ static int pp_ad_attenuate_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out) return -EINVAL; } lut_interval = (MDSS_MDP_AD_BL_SCALE + 1) / (AD_BL_ATT_LUT_LEN - 1); bl_att = ad->bl_att_lut[n] + (bl - lut_interval * n) * (ad->bl_att_lut[n + 1] - ad->bl_att_lut[n]) / bl_att = ((ad->bl_att_lut[n + 1] - ad->bl_att_lut[n]) * (bl - lut_interval * n) + (ad->bl_att_lut[n] * lut_interval)) / lut_interval; pr_debug("n = %d, bl_att = %d\n", n, bl_att); pr_debug("n = %u, bl_att_lut[%u] = %u, bl_att_lut[%u] = %u, bl_att = %u\n", n, n, ad->bl_att_lut[n], n + 1, ad->bl_att_lut[n + 1], bl_att); if (ad->init.alpha_base) *bl_out = (ad->init.alpha * bl_att + (ad->init.alpha_base - ad->init.alpha) * bl) / Loading @@ -5834,6 +5835,7 @@ static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, { u32 n; uint32_t *bl_lut = NULL; int ret = -EINVAL; if (bl < 0 || bl > ad->bl_mfd->panel_info->bl_max) { Loading @@ -5843,6 +5845,14 @@ static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, } pr_debug("bl_in = %d, inv = %d\n", bl, inv); if (inv == MDP_PP_AD_BL_LINEAR_INV) { bl_lut = ad->bl_lin; } else if (inv == MDP_PP_AD_BL_LINEAR) { bl_lut = ad->bl_lin_inv; } else { pr_err("invalid inv param: inv = %d\n", inv); return -EINVAL; } /* map panel backlight range to AD backlight range */ linear_map(bl, &bl, ad->bl_mfd->panel_info->bl_max, Loading @@ -5850,30 +5860,19 @@ static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, pr_debug("Before linearization = %d\n", bl); n = bl * (AD_BL_LIN_LEN - 1) / MDSS_MDP_AD_BL_SCALE; pr_debug("n = %d\n", n); pr_debug("n = %u\n", n); if (n > (AD_BL_LIN_LEN - 1)) { pr_err("Invalid index for BL linearization: %d.\n", n); return ret; } else if (n == (AD_BL_LIN_LEN - 1)) { if (inv == MDP_PP_AD_BL_LINEAR_INV) *bl_out = ad->bl_lin_inv[n]; else if (inv == MDP_PP_AD_BL_LINEAR) *bl_out = ad->bl_lin[n]; *bl_out = bl_lut[n]; } else { /* linear piece-wise interpolation */ if (inv == MDP_PP_AD_BL_LINEAR_INV) { *bl_out = bl * (AD_BL_LIN_LEN - 1) * (ad->bl_lin_inv[n + 1] - ad->bl_lin_inv[n]) / MDSS_MDP_AD_BL_SCALE - n * (ad->bl_lin_inv[n + 1] - ad->bl_lin_inv[n]) + ad->bl_lin_inv[n]; } else if (inv == MDP_PP_AD_BL_LINEAR) { *bl_out = bl * (AD_BL_LIN_LEN - 1) * (ad->bl_lin[n + 1] - ad->bl_lin[n]) / MDSS_MDP_AD_BL_SCALE - n * (ad->bl_lin[n + 1] - ad->bl_lin[n]) + ad->bl_lin[n]; } *bl_out = ((bl_lut[n + 1] - bl_lut[n]) * (bl - n * MDSS_MDP_AD_BL_SCALE / (AD_BL_LIN_LEN - 1)) + bl_lut[n] * MDSS_MDP_AD_BL_SCALE / (AD_BL_LIN_LEN - 1)) * (AD_BL_LIN_LEN - 1) / MDSS_MDP_AD_BL_SCALE; } pr_debug("After linearization = %d\n", *bl_out); Loading Loading
drivers/video/msm/mdss/mdss_mdp_pp.c +21 −22 Original line number Diff line number Diff line Loading @@ -5808,10 +5808,11 @@ static int pp_ad_attenuate_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out) return -EINVAL; } lut_interval = (MDSS_MDP_AD_BL_SCALE + 1) / (AD_BL_ATT_LUT_LEN - 1); bl_att = ad->bl_att_lut[n] + (bl - lut_interval * n) * (ad->bl_att_lut[n + 1] - ad->bl_att_lut[n]) / bl_att = ((ad->bl_att_lut[n + 1] - ad->bl_att_lut[n]) * (bl - lut_interval * n) + (ad->bl_att_lut[n] * lut_interval)) / lut_interval; pr_debug("n = %d, bl_att = %d\n", n, bl_att); pr_debug("n = %u, bl_att_lut[%u] = %u, bl_att_lut[%u] = %u, bl_att = %u\n", n, n, ad->bl_att_lut[n], n + 1, ad->bl_att_lut[n + 1], bl_att); if (ad->init.alpha_base) *bl_out = (ad->init.alpha * bl_att + (ad->init.alpha_base - ad->init.alpha) * bl) / Loading @@ -5834,6 +5835,7 @@ static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, { u32 n; uint32_t *bl_lut = NULL; int ret = -EINVAL; if (bl < 0 || bl > ad->bl_mfd->panel_info->bl_max) { Loading @@ -5843,6 +5845,14 @@ static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, } pr_debug("bl_in = %d, inv = %d\n", bl, inv); if (inv == MDP_PP_AD_BL_LINEAR_INV) { bl_lut = ad->bl_lin; } else if (inv == MDP_PP_AD_BL_LINEAR) { bl_lut = ad->bl_lin_inv; } else { pr_err("invalid inv param: inv = %d\n", inv); return -EINVAL; } /* map panel backlight range to AD backlight range */ linear_map(bl, &bl, ad->bl_mfd->panel_info->bl_max, Loading @@ -5850,30 +5860,19 @@ static int pp_ad_linearize_bl(struct mdss_ad_info *ad, u32 bl, u32 *bl_out, pr_debug("Before linearization = %d\n", bl); n = bl * (AD_BL_LIN_LEN - 1) / MDSS_MDP_AD_BL_SCALE; pr_debug("n = %d\n", n); pr_debug("n = %u\n", n); if (n > (AD_BL_LIN_LEN - 1)) { pr_err("Invalid index for BL linearization: %d.\n", n); return ret; } else if (n == (AD_BL_LIN_LEN - 1)) { if (inv == MDP_PP_AD_BL_LINEAR_INV) *bl_out = ad->bl_lin_inv[n]; else if (inv == MDP_PP_AD_BL_LINEAR) *bl_out = ad->bl_lin[n]; *bl_out = bl_lut[n]; } else { /* linear piece-wise interpolation */ if (inv == MDP_PP_AD_BL_LINEAR_INV) { *bl_out = bl * (AD_BL_LIN_LEN - 1) * (ad->bl_lin_inv[n + 1] - ad->bl_lin_inv[n]) / MDSS_MDP_AD_BL_SCALE - n * (ad->bl_lin_inv[n + 1] - ad->bl_lin_inv[n]) + ad->bl_lin_inv[n]; } else if (inv == MDP_PP_AD_BL_LINEAR) { *bl_out = bl * (AD_BL_LIN_LEN - 1) * (ad->bl_lin[n + 1] - ad->bl_lin[n]) / MDSS_MDP_AD_BL_SCALE - n * (ad->bl_lin[n + 1] - ad->bl_lin[n]) + ad->bl_lin[n]; } *bl_out = ((bl_lut[n + 1] - bl_lut[n]) * (bl - n * MDSS_MDP_AD_BL_SCALE / (AD_BL_LIN_LEN - 1)) + bl_lut[n] * MDSS_MDP_AD_BL_SCALE / (AD_BL_LIN_LEN - 1)) * (AD_BL_LIN_LEN - 1) / MDSS_MDP_AD_BL_SCALE; } pr_debug("After linearization = %d\n", *bl_out); Loading