summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Zhang <rayz@codeaurora.org>2015-12-24 17:28:51 +0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:14:33 -0700
commit35ae349722623fec39ae322bfc7dcf03e9cb2fb5 (patch)
tree2db34755be48da6ba5b66e5317da10a382d9ff82
parent1a83c0c57d65f7727e97e7f9f861ab169416fa9c (diff)
msm: mdss: remove interrupt handler when pingpong is not present
Remove pingpong interrupt handler when pingpong done interrupt is not present. This will ensure no unexpected pingpong is reported which might lead to confliction with the destroying ctx. Change-Id: I9a7173fb19e55344cedcfeccdaf23efaba11892c Signed-off-by: Ray Zhang <rayz@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
index 4def35fce1e2..15df392998e8 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c
@@ -988,6 +988,8 @@ static void mdss_mdp_cmd_intf_recovery(void *data, int event)
pr_debug("%s: intf_num=%d\n", __func__, ctx->ctl->intf_num);
mdss_mdp_irq_disable_nosync(MDSS_MDP_IRQ_PING_PONG_COMP,
ctx->current_pp_num);
+ mdss_mdp_set_intr_callback_nosync(MDSS_MDP_IRQ_PING_PONG_COMP,
+ ctx->current_pp_num, NULL, NULL);
if (mdss_mdp_cmd_do_notifier(ctx))
notify_frame_timeout = true;
}
@@ -1539,6 +1541,11 @@ static int mdss_mdp_cmd_wait4pingpong(struct mdss_mdp_ctl *ctl, void *arg)
}
ctx->pp_timeout_report_cnt++;
rc = -EPERM;
+
+ mdss_mdp_irq_disable_nosync(MDSS_MDP_IRQ_PING_PONG_COMP,
+ ctx->current_pp_num);
+ mdss_mdp_set_intr_callback_nosync(MDSS_MDP_IRQ_PING_PONG_COMP,
+ ctx->current_pp_num, NULL, NULL);
if (atomic_add_unless(&ctx->koff_cnt, -1, 0)
&& mdss_mdp_cmd_do_notifier(ctx))
mdss_mdp_ctl_notify(ctl, MDP_NOTIFY_FRAME_TIMEOUT);
@@ -2017,6 +2024,8 @@ int mdss_mdp_cmd_ctx_stop(struct mdss_mdp_ctl *ctl,
mdss_mdp_set_intr_callback(MDSS_MDP_IRQ_PING_PONG_RD_PTR,
ctx->default_pp_num, NULL, NULL);
+ mdss_mdp_set_intr_callback_nosync(MDSS_MDP_IRQ_PING_PONG_COMP,
+ ctx->default_pp_num, NULL, NULL);
memset(ctx, 0, sizeof(*ctx));