diff options
| author | Ray Zhang <rayz@codeaurora.org> | 2015-12-24 17:28:51 +0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:14:33 -0700 |
| commit | 35ae349722623fec39ae322bfc7dcf03e9cb2fb5 (patch) | |
| tree | 2db34755be48da6ba5b66e5317da10a382d9ff82 | |
| parent | 1a83c0c57d65f7727e97e7f9f861ab169416fa9c (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.c | 9 |
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)); |
