From 3f62bc4e09bb68a50c2d4c9964cf63f6f4be929e Mon Sep 17 00:00:00 2001 From: Rajkumar Subbiah Date: Mon, 27 Mar 2017 13:17:24 -0400 Subject: [PATCH] msm: mdss: wait for pp done when switching from ON to LP1 If a low power mode switch is initiated while a kickoff is in progress, the panel could be turned off before the current frame transfer is completed causing a display hang. This change recognizes this case and waits for the current frame to finish before initiating the power state switch. Change-Id: Ieea32acd67c56a7ed8a83ff92c3b49ad76d70086 Signed-off-by: Rajkumar Subbiah --- drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c index c9ce56fb96a4..39dc89fd21e0 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c +++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c @@ -3352,8 +3352,18 @@ int mdss_mdp_cmd_stop(struct mdss_mdp_ctl *ctl, int panel_power_state) * mode. */ send_panel_events = true; - if (mdss_panel_is_power_on_ulp(panel_power_state)) + if (mdss_panel_is_power_on_ulp(panel_power_state)) { turn_off_clocks = true; + } else if (atomic_read(&ctx->koff_cnt)) { + /* + * Transition from interactive to low power + * Wait for kickoffs to finish + */ + MDSS_XLOG(ctl->num, atomic_read(&ctx->koff_cnt)); + mdss_mdp_cmd_wait4pingpong(ctl, NULL); + if (sctl) + mdss_mdp_cmd_wait4pingpong(sctl, NULL); + } } else { /* Transitions between low power and ultra low power */ if (mdss_panel_is_power_on_ulp(panel_power_state)) {