diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/media/platform/msm/camera_v2/camera/camera.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/media/platform/msm/camera_v2/camera/camera.c b/drivers/media/platform/msm/camera_v2/camera/camera.c index 00012a771f10..f2c78d470a2e 100644 --- a/drivers/media/platform/msm/camera_v2/camera/camera.c +++ b/drivers/media/platform/msm/camera_v2/camera/camera.c @@ -42,6 +42,7 @@ struct camera_v4l2_private { unsigned int is_vb2_valid; /*0 if no vb2 buffers on stream, else 1*/ struct vb2_queue vb2_q; bool stream_created; + struct mutex lock; }; static void camera_pack_event(struct file *filep, int evt_id, @@ -225,9 +226,9 @@ static int camera_v4l2_reqbufs(struct file *filep, void *fh, session = msm_session_find(session_id); if (WARN_ON(!session)) return -EIO; - mutex_lock(&session->lock_q); + mutex_lock(&sp->lock); ret = vb2_reqbufs(&sp->vb2_q, req); - mutex_unlock(&session->lock_q); + mutex_unlock(&sp->lock); return ret; } @@ -248,9 +249,9 @@ static int camera_v4l2_qbuf(struct file *filep, void *fh, session = msm_session_find(session_id); if (WARN_ON(!session)) return -EIO; - mutex_lock(&session->lock_q); + mutex_lock(&sp->lock); ret = vb2_qbuf(&sp->vb2_q, pb); - mutex_unlock(&session->lock_q); + mutex_unlock(&sp->lock); return ret; } @@ -265,9 +266,9 @@ static int camera_v4l2_dqbuf(struct file *filep, void *fh, session = msm_session_find(session_id); if (WARN_ON(!session)) return -EIO; - mutex_lock(&session->lock_q); + mutex_lock(&sp->lock); ret = vb2_dqbuf(&sp->vb2_q, pb, filep->f_flags & O_NONBLOCK); - mutex_unlock(&session->lock_q); + mutex_unlock(&sp->lock); return ret; } @@ -495,6 +496,8 @@ static int camera_v4l2_fh_open(struct file *filep) (const unsigned long *)&stream_id, MSM_CAMERA_STREAM_CNT_BITS); pr_debug("%s: Found stream_id=%d\n", __func__, sp->stream_id); + mutex_init(&sp->lock); + v4l2_fh_init(&sp->fh, pvdev->vdev); v4l2_fh_add(&sp->fh); @@ -510,6 +513,7 @@ static int camera_v4l2_fh_release(struct file *filep) v4l2_fh_exit(&sp->fh); } + mutex_destroy(&sp->lock); kzfree(sp); return 0; } |
