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