summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev/msm
diff options
context:
space:
mode:
authorAdrian Salido-Moreno <adrianm@codeaurora.org>2014-03-17 13:24:05 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:33:18 -0700
commitea7e2b048104a61df5c4412cd7397dc0cfdfed8b (patch)
treeacfd08a2f25b170a16f686ae2b7369ebacd8fdbf /drivers/video/fbdev/msm
parentb9b85ba1d94b5805ebb1994485c1d6ba0f91b5bf (diff)
msm: mdss: ensure rotator work is done before reconfiguring session
When queuing new parameters to rotator, need to ensure that current work is done before reconfiguring pipe parameters, otherwise there may be a mismatch on parameters with the buffers programmed once work is scheduled. Change-Id: I258aedca82bb10498d0ef4cbaa697a29c3c34a99 Signed-off-by: Adrian Salido-Moreno <adrianm@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev/msm')
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_rotator.c13
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);
}