diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2014-10-21 15:07:15 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2014-11-25 05:40:37 -0500 |
commit | 3f02de275e5c4374ffeba554c7b9fa85ea13ecc5 (patch) | |
tree | 744860903ad98d498b3713c8bee5e39b3988c4f0 /drivers | |
parent | a11a03e50b73234444f7d439fb8ee6eaec3cffd1 (diff) |
[media] uvcvideo: Don't stop the stream twice at file handle release
When releasing the file handle the driver calls the vb2_queue_release
which turns the stream off. There's thus no need to turn the stream off
explicitly beforehand.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/usb/uvc/uvc_queue.c | 14 | ||||
-rw-r--r-- | drivers/media/usb/uvc/uvc_v4l2.c | 6 | ||||
-rw-r--r-- | drivers/media/usb/uvc/uvcvideo.h | 2 |
3 files changed, 10 insertions, 12 deletions
diff --git a/drivers/media/usb/uvc/uvc_queue.c b/drivers/media/usb/uvc/uvc_queue.c index 758247048ee1..708478f958e9 100644 --- a/drivers/media/usb/uvc/uvc_queue.c +++ b/drivers/media/usb/uvc/uvc_queue.c | |||
@@ -194,6 +194,13 @@ int uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type, | |||
194 | return 0; | 194 | return 0; |
195 | } | 195 | } |
196 | 196 | ||
197 | void uvc_queue_release(struct uvc_video_queue *queue) | ||
198 | { | ||
199 | mutex_lock(&queue->mutex); | ||
200 | vb2_queue_release(&queue->queue); | ||
201 | mutex_unlock(&queue->mutex); | ||
202 | } | ||
203 | |||
197 | /* ----------------------------------------------------------------------------- | 204 | /* ----------------------------------------------------------------------------- |
198 | * V4L2 queue operations | 205 | * V4L2 queue operations |
199 | */ | 206 | */ |
@@ -210,13 +217,6 @@ int uvc_alloc_buffers(struct uvc_video_queue *queue, | |||
210 | return ret ? ret : rb->count; | 217 | return ret ? ret : rb->count; |
211 | } | 218 | } |
212 | 219 | ||
213 | void uvc_free_buffers(struct uvc_video_queue *queue) | ||
214 | { | ||
215 | mutex_lock(&queue->mutex); | ||
216 | vb2_queue_release(&queue->queue); | ||
217 | mutex_unlock(&queue->mutex); | ||
218 | } | ||
219 | |||
220 | int uvc_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf) | 220 | int uvc_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf) |
221 | { | 221 | { |
222 | int ret; | 222 | int ret; |
diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c index 4619fd6b0494..1b6b6db30d98 100644 --- a/drivers/media/usb/uvc/uvc_v4l2.c +++ b/drivers/media/usb/uvc/uvc_v4l2.c | |||
@@ -530,10 +530,8 @@ static int uvc_v4l2_release(struct file *file) | |||
530 | uvc_trace(UVC_TRACE_CALLS, "uvc_v4l2_release\n"); | 530 | uvc_trace(UVC_TRACE_CALLS, "uvc_v4l2_release\n"); |
531 | 531 | ||
532 | /* Only free resources if this is a privileged handle. */ | 532 | /* Only free resources if this is a privileged handle. */ |
533 | if (uvc_has_privileges(handle)) { | 533 | if (uvc_has_privileges(handle)) |
534 | uvc_queue_enable(&stream->queue, 0); | 534 | uvc_queue_release(&stream->queue); |
535 | uvc_free_buffers(&stream->queue); | ||
536 | } | ||
537 | 535 | ||
538 | /* Release the file handle. */ | 536 | /* Release the file handle. */ |
539 | uvc_dismiss_privileges(handle); | 537 | uvc_dismiss_privileges(handle); |
diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 53db7ed1e472..344aedec9dfb 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h | |||
@@ -623,9 +623,9 @@ extern struct uvc_entity *uvc_entity_by_id(struct uvc_device *dev, int id); | |||
623 | /* Video buffers queue management. */ | 623 | /* Video buffers queue management. */ |
624 | extern int uvc_queue_init(struct uvc_video_queue *queue, | 624 | extern int uvc_queue_init(struct uvc_video_queue *queue, |
625 | enum v4l2_buf_type type, int drop_corrupted); | 625 | enum v4l2_buf_type type, int drop_corrupted); |
626 | extern void uvc_queue_release(struct uvc_video_queue *queue); | ||
626 | extern int uvc_alloc_buffers(struct uvc_video_queue *queue, | 627 | extern int uvc_alloc_buffers(struct uvc_video_queue *queue, |
627 | struct v4l2_requestbuffers *rb); | 628 | struct v4l2_requestbuffers *rb); |
628 | extern void uvc_free_buffers(struct uvc_video_queue *queue); | ||
629 | extern int uvc_query_buffer(struct uvc_video_queue *queue, | 629 | extern int uvc_query_buffer(struct uvc_video_queue *queue, |
630 | struct v4l2_buffer *v4l2_buf); | 630 | struct v4l2_buffer *v4l2_buf); |
631 | extern int uvc_create_buffers(struct uvc_video_queue *queue, | 631 | extern int uvc_create_buffers(struct uvc_video_queue *queue, |