Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +70 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; Loading @@ -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 && Loading Loading @@ -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; Loading @@ -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)) Loading Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +70 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading @@ -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; Loading @@ -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 && Loading Loading @@ -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; Loading @@ -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)) Loading