summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
index 747b4e3e2f81..2c92a480af6b 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
@@ -406,7 +406,7 @@ static void mdss_mdp_cmd_wait4_autorefresh_pp(struct mdss_mdp_ctl *ctl)
return;
}
- if (line_out < ctl->mixer_left->roi.h) {
+ if ((line_out < ctl->mixer_left->roi.h) && (line_out)) {
reinit_completion(&ctx->autorefresh_ppdone);
/* enable ping pong done */
@@ -2510,6 +2510,7 @@ int mdss_mdp_cmd_set_autorefresh_mode(struct mdss_mdp_ctl *mctl, int frame_cnt)
*/
ctx->autorefresh_state = MDP_AUTOREFRESH_ON_REQUESTED;
ctx->autorefresh_frame_cnt = frame_cnt;
+ mctl->mdata->serialize_wait4pp = true;
/* Cancel GATE Work Item */
if (cancel_work_sync(&ctx->gate_clk_work))
@@ -2523,8 +2524,10 @@ int mdss_mdp_cmd_set_autorefresh_mode(struct mdss_mdp_ctl *mctl, int frame_cnt)
if (frame_cnt == 0) {
ctx->autorefresh_state = MDP_AUTOREFRESH_OFF;
ctx->autorefresh_frame_cnt = 0;
+ mctl->mdata->serialize_wait4pp = false;
} else {
ctx->autorefresh_frame_cnt = frame_cnt;
+ mctl->mdata->serialize_wait4pp = true;
}
break;
case MDP_AUTOREFRESH_ON:
@@ -2536,6 +2539,7 @@ int mdss_mdp_cmd_set_autorefresh_mode(struct mdss_mdp_ctl *mctl, int frame_cnt)
ctx->autorefresh_state = MDP_AUTOREFRESH_OFF_REQUESTED;
} else {
ctx->autorefresh_frame_cnt = frame_cnt;
+ mctl->mdata->serialize_wait4pp = true;
}
break;
case MDP_AUTOREFRESH_OFF_REQUESTED:
@@ -2545,6 +2549,7 @@ int mdss_mdp_cmd_set_autorefresh_mode(struct mdss_mdp_ctl *mctl, int frame_cnt)
pr_debug("cancelling autorefresh off request\n");
ctx->autorefresh_state = MDP_AUTOREFRESH_ON;
ctx->autorefresh_frame_cnt = frame_cnt;
+ mctl->mdata->serialize_wait4pp = true;
}
break;
default:
@@ -2873,6 +2878,7 @@ static int mdss_mdp_disable_autorefresh(struct mdss_mdp_ctl *ctl,
cfg |= BIT(20);
mdss_mdp_pingpong_write(pp_base,
MDSS_MDP_REG_PP_SYNC_CONFIG_VSYNC, cfg);
+ ctl->mdata->serialize_wait4pp = false;
return 0;
}