diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index c80d8f47bbb7..bb8227a74a04 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -5776,7 +5776,7 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg, mdss_mdp_ctl_split_display_enable(split_lm_valid, ctl, sctl); ATRACE_BEGIN("postproc_programming"); - if (ctl->mfd && ctl->mfd->dcm_state != DTM_ENTER) + if (ctl->is_video_mode && ctl->mfd && ctl->mfd->dcm_state != DTM_ENTER) /* postprocessing setup, including dspp */ mdss_mdp_pp_setup_locked(ctl); @@ -5824,6 +5824,24 @@ int mdss_mdp_display_commit(struct mdss_mdp_ctl *ctl, void *arg, if (ctl->ops.wait_pingpong && !mdata->serialize_wait4pp) mdss_mdp_display_wait4pingpong(ctl, false); + /* Moved pp programming to post ping pong */ + if (!ctl->is_video_mode && ctl->mfd && + ctl->mfd->dcm_state != DTM_ENTER) { + /* postprocessing setup, including dspp */ + mutex_lock(&ctl->flush_lock); + mdss_mdp_pp_setup_locked(ctl); + if (sctl) { + if (ctl->split_flush_en) { + ctl->flush_bits |= sctl->flush_bits; + sctl->flush_bits = 0; + sctl_flush_bits = 0; + } else { + sctl_flush_bits = sctl->flush_bits; + } + } + ctl_flush_bits = ctl->flush_bits; + mutex_unlock(&ctl->flush_lock); + } /* * if serialize_wait4pp is false then roi_bkup used in wait4pingpong * will be of previous frame as expected.