summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/platform/msm/camera_v2/camera/camera.c16
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;
}