diff options
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_rotator.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_rotator.c b/drivers/video/fbdev/msm/mdss_mdp_rotator.c index 5750cbd2faa4..1cf1fba24d0c 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_rotator.c +++ b/drivers/video/fbdev/msm/mdss_mdp_rotator.c @@ -526,13 +526,18 @@ int mdss_mdp_rotator_setup(struct msm_fb_data_type *mfd, list_add(&rot->list, &mdp5_data->rot_proc_list); } else if (req->id & MDSS_MDP_ROT_SESSION_MASK) { rot = mdss_mdp_rotator_session_get(req->id); - if (!rot) { pr_err("rotator session=%x not found\n", req->id); ret = -ENODEV; goto rot_err; } + if (work_pending(&rot->commit_work)) { + mutex_unlock(&rotator_lock); + flush_work(&rot->commit_work); + mutex_lock(&rotator_lock); + } + if (rot->format != fmt->format) format_changed = true; @@ -648,6 +653,12 @@ static int mdss_mdp_rotator_finish(struct mdss_mdp_rotator_session *rot) rot_pipe = rot->pipe; if (rot_pipe) { + if (work_pending(&rot->commit_work)) { + mutex_unlock(&rotator_lock); + cancel_work_sync(&rot->commit_work); + mutex_lock(&rotator_lock); + } + mdss_mdp_rotator_busy_wait(rot); list_del(&rot->head); } |
