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: Ping Li <pingli@codeaurora.org>
This commit is contained in:
Ping Li 2014-07-30 14:53:56 -07:00 committed by David Keitel
parent 2e4141400c
commit 2446a049dd

View file

@ -2695,6 +2695,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)
{
@ -2703,6 +2759,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;
@ -2720,6 +2777,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 &&
@ -2832,6 +2895,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;
@ -2841,6 +2905,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))