From 5ab0457652cef88889f64f00f405eb62be021aa1 Mon Sep 17 00:00:00 2001
From: Devin Kim <dojip.kim@lge.com>
Date: Fri, 3 Oct 2014 10:01:51 -0700
Subject: [PATCH] msm: mdss: Use a idle specific timeout for
 mdss_mdp_cmd_off_pan_on()

STOP_TIMEOUT need to wait for cmd stop depends on fps. If current mode
is idle, calculate the timeout for it and use it instead of STOP_TIMEOUT.

Change-Id: I3c552bb9a275ade23e97125cffb07eda753855f6
Signed-off-by: Devin Kim <dojip.kim@lge.com>
---
 drivers/video/msm/mdss/mdss_mdp_intf_cmd.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c b/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
index 9a41ffaadbcc..dd3332e1b020 100644
--- a/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
+++ b/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
@@ -590,6 +590,7 @@ int mdss_mdp_cmd_kickoff(struct mdss_mdp_ctl *ctl, void *arg)
 int mdss_mdp_cmd_off_pan_on(struct mdss_mdp_ctl *ctl)
 {
 	struct mdss_mdp_cmd_ctx *ctx;
+	struct mdss_panel_info *pinfo;
 	unsigned long flags;
 	int need_wait = 0;
 
@@ -599,6 +600,8 @@ int mdss_mdp_cmd_off_pan_on(struct mdss_mdp_ctl *ctl)
 		return -ENODEV;
 	}
 
+	pinfo = &ctl->panel_data->panel_info;
+
 	pr_debug("%s: clk_enabled=%d\n", __func__, ctx->clk_enabled);
 
 	spin_lock_irqsave(&ctx->clk_lock, flags);
@@ -609,7 +612,17 @@ int mdss_mdp_cmd_off_pan_on(struct mdss_mdp_ctl *ctl)
 	spin_unlock_irqrestore(&ctx->clk_lock, flags);
 
 	if (need_wait) {
-		if (wait_for_completion_timeout(&ctx->stop_comp, STOP_TIMEOUT)
+		int idle = 0;
+		unsigned long timeout = STOP_TIMEOUT;
+
+		if (ctl->panel_data->get_idle)
+			idle = ctl->panel_data->get_idle(ctl->panel_data);
+
+		if (idle)
+			timeout = msecs_to_jiffies(pinfo->idle_ms_per_frame *
+					(VSYNC_EXPIRE_TICK + 2));
+
+		if (wait_for_completion_timeout(&ctx->stop_comp, timeout)
 		    <= 0) {
 			pr_debug("%s: stop cmd time out\n", __func__);
 			mdss_mdp_irq_disable(MDSS_MDP_IRQ_PING_PONG_RD_PTR,
-- 
GitLab