summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajkumar Subbiah <rsubbia@codeaurora.org>2017-03-27 13:17:24 -0400
committerGerrit - the friendly Code Review server <code-review@localhost>2017-03-28 15:52:36 -0700
commit3f62bc4e09bb68a50c2d4c9964cf63f6f4be929e (patch)
tree07719f983887c9d5d9ecbbd336183ba6b71d572c
parentfec225ae45829184255a95a00d81cf1387fd6a84 (diff)
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 <rsubbia@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c12
1 files changed, 11 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 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)) {