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

Commit db8b45db authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

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

parents f37c0741 91d7eb0b
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
@@ -3048,6 +3048,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)
{
@@ -3056,6 +3112,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;
@@ -3073,6 +3130,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 &&
@@ -3185,6 +3248,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;
@@ -3194,6 +3258,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))