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

Commit 498d1b7e authored by Ping Li's avatar Ping Li
Browse files

msm: mdss: Revert changes for separating out PP flushes from commits



MDP flush behavior on MSM8974 needs to have single flush in given vsync
cycle, more than one flushes in same vsync cycle can cause unexpected
behavior such as blank screens, incorrect frame updates on LCD or some
visual artifacts. Currently post processing and frame updates have
independent flush mechanisms which in certain cases can cause visual
artifacts or blank screen. So revert changes to independently flush MDP
registers so that post processing piggybacks on flushes for frame updates.

CRs-Fixed: 494856
Change-Id: Iaa0f6f123487f57abb1b56f7d0946fa3abfe3058
Signed-off-by: default avatarPing Li <quicpingli@codeaurora.org>
parent e4215a77
Loading
Loading
Loading
Loading
+12 −27
Original line number Diff line number Diff line
@@ -517,33 +517,18 @@ int mdss_mdp_smp_setup(struct mdss_data_type *mdata, u32 cnt, u32 size);

int mdss_hw_init(struct mdss_data_type *mdata);

int mdss_mdp_pa_config(struct mdss_mdp_ctl *ctl,
				struct mdp_pa_cfg_data *config,
				u32 *copyback);
int mdss_mdp_pcc_config(struct mdss_mdp_ctl *ctl,
				struct mdp_pcc_cfg_data *cfg_ptr,
				u32 *copyback);
int mdss_mdp_igc_lut_config(struct mdss_mdp_ctl *ctl,
				struct mdp_igc_lut_data *config,
				u32 *copyback, u32 copy_from_kernel);
int mdss_mdp_argc_config(struct mdss_mdp_ctl *ctl,
				struct mdp_pgc_lut_data *config,
				u32 *copyback);
int mdss_mdp_hist_lut_config(struct mdss_mdp_ctl *ctl,
				struct mdp_hist_lut_data *config,
				u32 *copyback);
int mdss_mdp_dither_config(struct mdss_mdp_ctl *ctl,
				struct mdp_dither_cfg_data *config,
				u32 *copyback);
int mdss_mdp_gamut_config(struct mdss_mdp_ctl *ctl,
				struct mdp_gamut_cfg_data *config,
				u32 *copyback);

int mdss_mdp_histogram_start(struct mdss_mdp_ctl *ctl,
				struct mdp_histogram_start_req *req);
int mdss_mdp_histogram_stop(struct mdss_mdp_ctl *ctl, u32 block);
int mdss_mdp_hist_collect(struct mdss_mdp_ctl *ctl,
				struct mdp_histogram_data *hist);
int mdss_mdp_pa_config(struct mdp_pa_cfg_data *config, u32 *copyback);
int mdss_mdp_pcc_config(struct mdp_pcc_cfg_data *cfg_ptr, u32 *copyback);
int mdss_mdp_igc_lut_config(struct mdp_igc_lut_data *config, u32 *copyback,
				u32 copy_from_kernel);
int mdss_mdp_argc_config(struct mdp_pgc_lut_data *config, u32 *copyback);
int mdss_mdp_hist_lut_config(struct mdp_hist_lut_data *config, u32 *copyback);
int mdss_mdp_dither_config(struct mdp_dither_cfg_data *config, u32 *copyback);
int mdss_mdp_gamut_config(struct mdp_gamut_cfg_data *config, u32 *copyback);

int mdss_mdp_histogram_start(struct mdp_histogram_start_req *req);
int mdss_mdp_histogram_stop(u32 block);
int mdss_mdp_hist_collect(struct mdp_histogram_data *hist);
void mdss_mdp_hist_intr_done(u32 isr);

int mdss_mdp_ad_config(struct msm_fb_data_type *mfd,
+1 −1
Original line number Diff line number Diff line
@@ -908,7 +908,7 @@ struct mdss_mdp_ctl *mdss_mdp_ctl_init(struct mdss_panel_data *pdata,
			ctl->dst_format = MDSS_MDP_PANEL_FORMAT_RGB888;
			break;
		}
		mdss_mdp_dither_config(ctl, &dither, NULL);
		mdss_mdp_dither_config(&dither, NULL);
	}

	return ctl;
+8 −18
Original line number Diff line number Diff line
@@ -560,11 +560,10 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd,
					pipe->pp_cfg.hist_cfg.frame_cnt;
				hist.bit_mask = pipe->pp_cfg.hist_cfg.bit_mask;
				hist.num_bins = pipe->pp_cfg.hist_cfg.num_bins;
				mdss_mdp_histogram_start(pipe->mixer->ctl,
									&hist);
				mdss_mdp_histogram_start(&hist);
			} else if (pipe->pp_cfg.hist_cfg.ops &
							MDP_PP_OPS_DISABLE) {
				mdss_mdp_histogram_stop(pipe->mixer->ctl,
				mdss_mdp_histogram_stop(
					pipe->pp_cfg.hist_cfg.block);
			}
		}
@@ -1847,7 +1846,6 @@ static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,
	struct msmfb_mdp_pp mdp_pp;
	u32 copyback = 0;
	u32 copy_from_kernel = 0;
	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);

	ret = copy_from_user(&mdp_pp, argp, sizeof(mdp_pp));
	if (ret)
@@ -1862,14 +1860,12 @@ static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,

	switch (mdp_pp.op) {
	case mdp_op_pa_cfg:
		ret = mdss_mdp_pa_config(mdp5_data->ctl,
					&mdp_pp.data.pa_cfg_data,
		ret = mdss_mdp_pa_config(&mdp_pp.data.pa_cfg_data,
					&copyback);
		break;

	case mdp_op_pcc_cfg:
		ret = mdss_mdp_pcc_config(mdp5_data->ctl,
					&mdp_pp.data.pcc_cfg_data,
		ret = mdss_mdp_pcc_config(&mdp_pp.data.pcc_cfg_data,
					&copyback);
		break;

@@ -1877,7 +1873,6 @@ static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,
		switch (mdp_pp.data.lut_cfg_data.lut_type) {
		case mdp_lut_igc:
			ret = mdss_mdp_igc_lut_config(
					mdp5_data->ctl,
					(struct mdp_igc_lut_data *)
					&mdp_pp.data.lut_cfg_data.data,
					&copyback, copy_from_kernel);
@@ -1885,14 +1880,12 @@ static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,

		case mdp_lut_pgc:
			ret = mdss_mdp_argc_config(
				mdp5_data->ctl,
				&mdp_pp.data.lut_cfg_data.data.pgc_lut_data,
				&copyback);
			break;

		case mdp_lut_hist:
			ret = mdss_mdp_hist_lut_config(
				mdp5_data->ctl,
				(struct mdp_hist_lut_data *)
				&mdp_pp.data.lut_cfg_data.data, &copyback);
			break;
@@ -1904,13 +1897,11 @@ static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,
		break;
	case mdp_op_dither_cfg:
		ret = mdss_mdp_dither_config(
				mdp5_data->ctl,
				&mdp_pp.data.dither_cfg_data,
				&copyback);
		break;
	case mdp_op_gamut_cfg:
		ret = mdss_mdp_gamut_config(
				mdp5_data->ctl,
				&mdp_pp.data.gamut_cfg_data,
				&copyback);
		break;
@@ -1961,7 +1952,6 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
	struct mdp_histogram_data hist;
	struct mdp_histogram_start_req hist_req;
	u32 block;
	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);
	u32 pp_bus_handle;
	static int req = -1;

@@ -1980,7 +1970,7 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
		if (ret)
			return ret;

		ret = mdss_mdp_histogram_start(mdp5_data->ctl, &hist_req);
		ret = mdss_mdp_histogram_start(&hist_req);
		break;

	case MSMFB_HISTOGRAM_STOP:
@@ -1988,7 +1978,7 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
		if (ret)
			return ret;

		ret = mdss_mdp_histogram_stop(mdp5_data->ctl, block);
		ret = mdss_mdp_histogram_stop(block);
		if (ret)
			return ret;

@@ -2010,7 +2000,7 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
		if (ret)
			return ret;

		ret = mdss_mdp_hist_collect(mdp5_data->ctl, &hist);
		ret = mdss_mdp_hist_collect(&hist);
		if (!ret)
			ret = copy_to_user(argp, &hist, sizeof(hist));
		break;
+17 −102
Original line number Diff line number Diff line
@@ -1147,7 +1147,7 @@ static int pp_dspp_setup(u32 disp_num, struct mdss_mdp_mixer *mixer)

flush_exit:
	writel_relaxed(opmode, base + MDSS_MDP_REG_DSPP_OP_MODE);
	mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_FLUSH, BIT(13 + dspp_num));
	ctl->flush_bits |= BIT(13 + dspp_num);
	wmb();
dspp_exit:
	mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false);
@@ -1383,16 +1383,13 @@ static int pp_get_dspp_num(u32 disp_num, u32 *dspp_num)
	return 0;
}

int mdss_mdp_pa_config(struct mdss_mdp_ctl *ctl, struct mdp_pa_cfg_data *config,
int mdss_mdp_pa_config(struct mdp_pa_cfg_data *config,
			u32 *copyback)
{
	int ret = 0;
	u32 disp_num, dspp_num = 0;
	char __iomem *pa_addr;

	if (!ctl)
		return -EINVAL;

	if ((config->block < MDP_LOGICAL_BLOCK_DISP_0) ||
		(config->block >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -1426,8 +1423,6 @@ int mdss_mdp_pa_config(struct mdss_mdp_ctl *ctl, struct mdp_pa_cfg_data *config,

pa_config_exit:
	mutex_unlock(&mdss_pp_mutex);
	if (!ret)
		mdss_mdp_pp_setup(ctl);
	return ret;
}

@@ -1557,17 +1552,13 @@ static void pp_update_pcc_regs(char __iomem *addr,
	writel_relaxed(cfg_ptr->b.rgb_1, addr + 8);
}

int mdss_mdp_pcc_config(struct mdss_mdp_ctl *ctl,
					struct mdp_pcc_cfg_data *config,
int mdss_mdp_pcc_config(struct mdp_pcc_cfg_data *config,
					u32 *copyback)
{
	int ret = 0;
	u32 disp_num, dspp_num = 0;
	char __iomem *addr;

	if (!ctl)
		return -EINVAL;

	if ((config->block < MDP_LOGICAL_BLOCK_DISP_0) ||
		(config->block >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -1597,8 +1588,6 @@ int mdss_mdp_pcc_config(struct mdss_mdp_ctl *ctl,

pcc_config_exit:
	mutex_unlock(&mdss_pp_mutex);
	if (!ret)
		mdss_mdp_pp_setup(ctl);
	return ret;
}

@@ -1672,13 +1661,12 @@ int mdss_mdp_limited_lut_igc_config(struct mdss_mdp_ctl *ctl)
	config.c0_c1_data = igc_limited;
	config.c2_data = igc_limited;

	ret = mdss_mdp_igc_lut_config(ctl, &config, &copyback,
	ret = mdss_mdp_igc_lut_config(&config, &copyback,
					copy_from_kernel);
	return ret;
}

int mdss_mdp_igc_lut_config(struct mdss_mdp_ctl *ctl,
					struct mdp_igc_lut_data *config,
int mdss_mdp_igc_lut_config(struct mdp_igc_lut_data *config,
					u32 *copyback, u32 copy_from_kernel)
{
	int ret = 0;
@@ -1687,9 +1675,6 @@ int mdss_mdp_igc_lut_config(struct mdss_mdp_ctl *ctl,
	char __iomem *igc_addr;
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();

	if (!ctl)
		return -EINVAL;

	if ((config->block < MDP_LOGICAL_BLOCK_DISP_0) ||
		(config->block >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -1767,8 +1752,6 @@ int mdss_mdp_igc_lut_config(struct mdss_mdp_ctl *ctl,

igc_config_exit:
	mutex_unlock(&mdss_pp_mutex);
	if (!ret)
		mdss_mdp_pp_setup(ctl);
	return ret;
}
static void pp_update_gc_one_lut(char __iomem *addr,
@@ -1884,8 +1867,7 @@ static void pp_update_hist_lut(char __iomem *addr,
		writel_relaxed(1, addr + 16);
}

int mdss_mdp_argc_config(struct mdss_mdp_ctl *ctl,
				struct mdp_pgc_lut_data *config,
int mdss_mdp_argc_config(struct mdp_pgc_lut_data *config,
				u32 *copyback)
{
	int ret = 0;
@@ -1895,9 +1877,6 @@ int mdss_mdp_argc_config(struct mdss_mdp_ctl *ctl,
	u32 tbl_size, r_size, g_size, b_size;
	char __iomem *argc_addr = 0;

	if (!ctl)
		return -EINVAL;

	if ((PP_BLOCK(config->block) < MDP_LOGICAL_BLOCK_DISP_0) ||
		(PP_BLOCK(config->block) >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -2007,21 +1986,15 @@ int mdss_mdp_argc_config(struct mdss_mdp_ctl *ctl,
	}
argc_config_exit:
	mutex_unlock(&mdss_pp_mutex);
	if (!ret)
		mdss_mdp_pp_setup(ctl);
	return ret;
}
int mdss_mdp_hist_lut_config(struct mdss_mdp_ctl *ctl,
					struct mdp_hist_lut_data *config,
int mdss_mdp_hist_lut_config(struct mdp_hist_lut_data *config,
					u32 *copyback)
{
	int i, ret = 0;
	u32 disp_num, dspp_num = 0;
	char __iomem *hist_addr;

	if (!ctl)
		return -EINVAL;

	if ((PP_BLOCK(config->block) < MDP_LOGICAL_BLOCK_DISP_0) ||
		(PP_BLOCK(config->block) >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -2065,18 +2038,13 @@ int mdss_mdp_hist_lut_config(struct mdss_mdp_ctl *ctl,
	}
enhist_config_exit:
	mutex_unlock(&mdss_pp_mutex);
	if (!ret)
		mdss_mdp_pp_setup(ctl);
	return ret;
}

int mdss_mdp_dither_config(struct mdss_mdp_ctl *ctl,
					struct mdp_dither_cfg_data *config,
int mdss_mdp_dither_config(struct mdp_dither_cfg_data *config,
					u32 *copyback)
{
	u32 disp_num;
	if (!ctl)
		return -EINVAL;

	if ((config->block < MDP_LOGICAL_BLOCK_DISP_0) ||
		(config->block >= MDP_BLOCK_MAX))
@@ -2089,12 +2057,10 @@ int mdss_mdp_dither_config(struct mdss_mdp_ctl *ctl,
	mdss_pp_res->dither_disp_cfg[disp_num] = *config;
	mdss_pp_res->pp_disp_flags[disp_num] |= PP_FLAGS_DIRTY_DITHER;
	mutex_unlock(&mdss_pp_mutex);
	mdss_mdp_pp_setup(ctl);
	return 0;
}

int mdss_mdp_gamut_config(struct mdss_mdp_ctl *ctl,
					struct mdp_gamut_cfg_data *config,
int mdss_mdp_gamut_config(struct mdp_gamut_cfg_data *config,
					u32 *copyback)
{
	int i, j, size_total = 0, ret = 0;
@@ -2107,9 +2073,6 @@ int mdss_mdp_gamut_config(struct mdss_mdp_ctl *ctl,
	uint16_t *b_tbl[MDP_GAMUT_TABLE_NUM];
	char __iomem *addr;

	if (!ctl)
		return -EINVAL;

	if ((config->block < MDP_LOGICAL_BLOCK_DISP_0) ||
		(config->block >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -2232,8 +2195,6 @@ int mdss_mdp_gamut_config(struct mdss_mdp_ctl *ctl,
	}
gamut_config_exit:
	mutex_unlock(&mdss_pp_mutex);
	if (!ret)
		mdss_mdp_pp_setup(ctl);
	return ret;
}
static void pp_hist_read(char __iomem *v_addr,
@@ -2276,7 +2237,7 @@ static int pp_histogram_enable(struct pp_hist_col_info *hist_info,
	hist_info->col_state = HIST_RESET;
	hist_info->col_en = true;
	spin_unlock_irqrestore(&hist_info->hist_lock, flag);
	hist_info->is_kick_ready = false;
	hist_info->is_kick_ready = true;
	mdss_mdp_hist_irq_enable(3 << shift_bit);
	writel_relaxed(req->frame_cnt, ctl_base + 8);
	/* Kick out reset start */
@@ -2286,8 +2247,7 @@ exit:
	return ret;
}

int mdss_mdp_histogram_start(struct mdss_mdp_ctl *ctl,
				struct mdp_histogram_start_req *req)
int mdss_mdp_histogram_start(struct mdp_histogram_start_req *req)
{
	u32 done_shift_bit;
	char __iomem *ctl_base;
@@ -2297,8 +2257,6 @@ int mdss_mdp_histogram_start(struct mdss_mdp_ctl *ctl,
	u32 mixer_cnt, mixer_id[MDSS_MDP_INTF_MAX_LAYERMIXER];
	struct mdss_mdp_pipe *pipe;
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	if (!ctl)
		return -EINVAL;

	if ((PP_BLOCK(req->block) < MDP_LOGICAL_BLOCK_DISP_0) ||
		(PP_BLOCK(req->block) >= MDP_BLOCK_MAX))
@@ -2365,31 +2323,6 @@ int mdss_mdp_histogram_start(struct mdss_mdp_ctl *ctl,
	mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false);

hist_exit:
	if (!ret && (PP_LOCAT(req->block) == MDSS_PP_DSPP_CFG)) {
		mdss_mdp_pp_setup(ctl);
		/* wait for a frame to let histrogram enable itself */
		/* TODO add hysteresis value to be able to remove this sleep */
		usleep(41666);
		for (i = 0; i < mixer_cnt; i++) {
			dspp_num = mixer_id[i];
			hist_info = &mdss_pp_res->dspp_hist[dspp_num];
			mutex_lock(&hist_info->hist_mutex);
			hist_info->is_kick_ready = true;
			mutex_unlock(&hist_info->hist_mutex);
		}
	} else if (!ret) {
		for (i = 0; i < MDSS_PP_ARG_NUM; i++) {
			if (!PP_ARG(i, req->block))
				continue;
			pr_info("PP_ARG(%d) = %d", i, PP_ARG(i, req->block));
			pipe = mdss_mdp_pipe_get(mdata, BIT(i));
			if (IS_ERR_OR_NULL(pipe))
				continue;
			hist_info = &pipe->pp_res.hist;
			hist_info->is_kick_ready = true;
			mdss_mdp_pipe_unmap(pipe);
		}
	}
	return ret;
}

@@ -2418,7 +2351,7 @@ exit:
	return ret;
}

int mdss_mdp_histogram_stop(struct mdss_mdp_ctl *ctl, u32 block)
int mdss_mdp_histogram_stop(u32 block)
{
	int i, ret = 0;
	char __iomem *ctl_base;
@@ -2428,9 +2361,6 @@ int mdss_mdp_histogram_stop(struct mdss_mdp_ctl *ctl, u32 block)
	struct mdss_mdp_pipe *pipe;
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();

	if (!ctl)
		return -EINVAL;

	if ((PP_BLOCK(block) < MDP_LOGICAL_BLOCK_DISP_0) ||
		(PP_BLOCK(block) >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -2495,13 +2425,10 @@ int mdss_mdp_histogram_stop(struct mdss_mdp_ctl *ctl, u32 block)
hist_stop_clk:
	mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false);
hist_stop_exit:
	if (!ret && (PP_LOCAT(block) == MDSS_PP_DSPP_CFG))
		mdss_mdp_pp_setup(ctl);
	return ret;
}

static int pp_hist_collect(struct mdss_mdp_ctl *ctl,
				struct mdp_histogram_data *hist,
static int pp_hist_collect(struct mdp_histogram_data *hist,
				struct pp_hist_col_info *hist_info,
				char __iomem *ctl_base)
{
@@ -2525,9 +2452,6 @@ static int pp_hist_collect(struct mdss_mdp_ctl *ctl,
		spin_unlock_irqrestore(&hist_info->hist_lock, flag);
		timeout = HIST_WAIT_TIMEOUT(hist_info->frame_cnt);
		mutex_unlock(&hist_info->hist_mutex);
		/* flush updates before wait*/
		if (PP_LOCAT(hist->block) == MDSS_PP_DSPP_CFG)
			mdss_mdp_pp_setup(ctl);
		if (PP_LOCAT(hist->block) == MDSS_PP_SSPP_CFG) {
			res = container_of(hist_info, struct mdss_pipe_pp_res,
						hist);
@@ -2588,8 +2512,7 @@ hist_collect_exit:
	return ret;
}

int mdss_mdp_hist_collect(struct mdss_mdp_ctl *ctl,
					struct mdp_histogram_data *hist)
int mdss_mdp_hist_collect(struct mdp_histogram_data *hist)
{
	int i, j, off, ret = 0;
	struct pp_hist_col_info *hist_info;
@@ -2603,9 +2526,6 @@ int mdss_mdp_hist_collect(struct mdss_mdp_ctl *ctl,
	struct mdss_mdp_pipe *pipe;
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();

	if (!ctl)
		return -EINVAL;

	if ((PP_BLOCK(hist->block) < MDP_LOGICAL_BLOCK_DISP_0) ||
		(PP_BLOCK(hist->block) >= MDP_BLOCK_MAX))
		return -EINVAL;
@@ -2632,7 +2552,7 @@ int mdss_mdp_hist_collect(struct mdss_mdp_ctl *ctl,
			hist_info = &mdss_pp_res->dspp_hist[dspp_num];
			ctl_base = mdss_mdp_get_dspp_addr_off(dspp_num) +
				MDSS_MDP_REG_DSPP_HIST_CTL_BASE;
			ret = pp_hist_collect(ctl, hist, hist_info, ctl_base);
			ret = pp_hist_collect(hist, hist_info, ctl_base);
			if (ret)
				goto hist_collect_exit;
		}
@@ -2701,7 +2621,7 @@ int mdss_mdp_hist_collect(struct mdss_mdp_ctl *ctl,
			hist_info = &pipe->pp_res.hist;
			ctl_base = pipe->base +
				MDSS_MDP_REG_VIG_HIST_CTL_BASE;
			ret = pp_hist_collect(ctl, hist, hist_info, ctl_base);
			ret = pp_hist_collect(hist, hist_info, ctl_base);
			mdss_mdp_pipe_unmap(pipe);
			if (ret)
				goto hist_collect_exit;
@@ -2994,8 +2914,6 @@ int mdss_mdp_ad_config(struct msm_fb_data_type *mfd,
	}
	mutex_unlock(&ad->lock);
	ctl = mfd_to_ctl(mfd);
	if (!ret)
		mdss_mdp_pp_setup(ctl);
	return ret;
}

@@ -3003,7 +2921,6 @@ int mdss_mdp_ad_input(struct msm_fb_data_type *mfd,
			struct mdss_ad_input *input, int wait) {
	int ret = 0;
	struct mdss_ad_info *ad;
	struct mdss_mdp_ctl *ctl;
	u32 bl;

	ret = mdss_mdp_get_ad(mfd, &ad);
@@ -3079,8 +2996,6 @@ error:
			init_completion(&ad->comp);
			mutex_unlock(&ad->lock);
		}
		ctl = mfd_to_ctl(mfd);
		mdss_mdp_pp_setup(ctl);
		if (wait) {
			ret = wait_for_completion_interruptible_timeout(
					&ad->comp, HIST_WAIT_TIMEOUT(1));
@@ -3438,7 +3353,7 @@ static void pp_ad_calc_worker(struct work_struct *work)
	}
	mutex_unlock(&ad->lock);
	mutex_lock(&mfd->lock);
	mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_FLUSH, BIT(13 + ad->num));
	ctl->flush_bits |= BIT(13 + ad->num);
	mutex_unlock(&mfd->lock);

	/* Trigger update notify to wake up those waiting for display updates */