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

Commit 91d7eb0b authored by Ping Li's avatar Ping Li Committed by Ping Li
Browse files

msm: mdss: Disable post processing feature if partial update is enabled



Block all post processing and histogram IOCTLs if partial update sysfs node
value is set to true, except for the disabling calls.

Change-Id: Ib32a668747569d9ad898f5519d7fd22b9bb41547
Signed-off-by: default avatarPing Li <pingli@codeaurora.org>
parent fc807704
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
@@ -3041,6 +3041,62 @@ static int mdss_bl_scale_config(struct msm_fb_data_type *mfd,
	return ret;
}

static int mdss_mdp_pp_is_disable_op(struct msmfb_mdp_pp *pp)
{
	int flags = 0, ret = 0;
	switch (pp->op) {
	case mdp_op_pa_cfg:
		flags = pp->data.pa_cfg_data.pa_data.flags;
		break;
	case mdp_op_pa_v2_cfg:
		flags = pp->data.pa_v2_cfg_data.pa_v2_data.flags;
		break;
	case mdp_op_pcc_cfg:
		flags = pp->data.pcc_cfg_data.ops;
		break;
	case mdp_op_lut_cfg:
		switch (pp->data.lut_cfg_data.lut_type) {
		case mdp_lut_igc:
			flags = pp->data.lut_cfg_data.data.igc_lut_data.ops;
			break;
		case mdp_lut_pgc:
			flags = pp->data.lut_cfg_data.data.pgc_lut_data.flags;
			break;
		case mdp_lut_hist:
			flags = pp->data.lut_cfg_data.data.hist_lut_data.ops;
			break;
		default:
			break;
		}
		break;
	case mdp_op_dither_cfg:
		flags = pp->data.dither_cfg_data.flags;
		break;
	case mdp_op_gamut_cfg:
		flags = pp->data.gamut_cfg_data.flags;
		break;
	case mdp_op_ad_cfg:
		flags = pp->data.ad_init_cfg.ops;
		break;
	case mdp_bl_scale_cfg:
		flags = MDP_PP_OPS_DISABLE;
		break;
	case mdp_op_ad_input:
	case mdp_op_calib_cfg:
	case mdp_op_calib_mode:
	case mdp_op_calib_buffer:
	case mdp_op_calib_dcm_state:
		break;
	default:
		pr_err("Unsupported request to MDP_PP IOCTL. %d = op\n",
			pp->op);
		break;
	}
	if (flags & MDP_PP_OPS_DISABLE)
		ret = 1;
	return ret;
}

static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,
				void __user *argp)
{
@@ -3049,6 +3105,7 @@ static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	u32 copyback = 0;
	u32 copy_from_kernel = 0;
	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);

	if (!mdata)
		return -EPERM;
@@ -3066,6 +3123,12 @@ static int mdss_mdp_pp_ioctl(struct msm_fb_data_type *mfd,
		return -EPERM;
	}

	if (mfd->panel_info->partial_update_enabled && mdp5_data->dyn_pu_state
			&& !mdss_mdp_pp_is_disable_op(&mdp_pp)) {
		pr_debug("Partial update feature is enabled.\n");
		return -EPERM;
	}

	/* Supprt only MDP register read/write and
	exit_dcm in DCM state*/
	if (mfd->dcm_state == DCM_ENTER &&
@@ -3178,6 +3241,7 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	u32 block;
	static int req = -1;
	struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);

	if (!mdata)
		return -EPERM;
@@ -3187,6 +3251,12 @@ static int mdss_mdp_histo_ioctl(struct msm_fb_data_type *mfd, u32 cmd,
		return -EPERM;
	}

	if (mfd->panel_info->partial_update_enabled && mdp5_data->dyn_pu_state
			&& (cmd != MSMFB_HISTOGRAM_STOP)) {
		pr_err("Partial update feature is enabled.\n");
		return -EPERM;
	}

	switch (cmd) {
	case MSMFB_HISTOGRAM_START:
		if (mdss_fb_is_power_off(mfd))