summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorJayant Shekhar <jshekhar@codeaurora.org>2015-09-28 13:50:04 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:47:19 -0700
commit3b7c593e88e7df25f93ffe65225bf4b9ae03ce22 (patch)
treed54e3ea47364f975259e47f527b71a7790e1b5e7 /drivers/video/fbdev
parent086f9fbaf641e81c9287874a8b6b8e30f02e06ba (diff)
msm: mdss: Ensure remove vsync handler called during ctl stop
With current implementation, vsync handler is never removed in case of shell stop if the call doesn't come from HAL. Due to this in certain cases the vsync ref count is unbalanced. MDP driver should ensure that the vsync handler is always removed explicitly during shell stop. Fix this issue by using separate variable for SLAVE ctx and using MASTER ctx for removing vsync handler. Change-Id: I281b9db0623f9760efea5b2ceb978e648083f156 Signed-off-by: Jayant Shekhar <jshekhar@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_video.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
index 7ffb27c3cc75..024d0a94eeed 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c
@@ -497,7 +497,7 @@ static int mdss_mdp_video_intfs_stop(struct mdss_mdp_ctl *ctl,
{
struct mdss_data_type *mdata;
struct mdss_panel_info *pinfo;
- struct mdss_mdp_video_ctx *ctx;
+ struct mdss_mdp_video_ctx *ctx, *sctx = NULL;
struct mdss_mdp_vsync_handler *tmp, *handle;
int ret = 0;
@@ -525,18 +525,18 @@ static int mdss_mdp_video_intfs_stop(struct mdss_mdp_ctl *ctl,
if (is_pingpong_split(ctl->mfd)) {
pinfo = &pdata->next->panel_info;
- ctx = (struct mdss_mdp_video_ctx *) ctl->intf_ctx[SLAVE_CTX];
- if (!ctx->ref_cnt) {
+ sctx = (struct mdss_mdp_video_ctx *) ctl->intf_ctx[SLAVE_CTX];
+ if (!sctx->ref_cnt) {
pr_err("Intf %d not in use\n", (inum + MDSS_MDP_INTF0));
return -ENODEV;
}
pr_debug("stop ctl=%d video Intf #%d base=%p", ctl->num,
- ctx->intf_num, ctx->base);
+ sctx->intf_num, sctx->base);
- ret = mdss_mdp_video_ctx_stop(ctl, pinfo, ctx);
+ ret = mdss_mdp_video_ctx_stop(ctl, pinfo, sctx);
if (ret) {
pr_err("mdss_mdp_video_ctx_stop failed for intf: %d",
- ctx->intf_num);
+ sctx->intf_num);
return -EPERM;
}
}