aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2014-10-21 15:07:15 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-11-25 05:40:37 -0500
commit3f02de275e5c4374ffeba554c7b9fa85ea13ecc5 (patch)
tree744860903ad98d498b3713c8bee5e39b3988c4f0 /drivers
parenta11a03e50b73234444f7d439fb8ee6eaec3cffd1 (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.c14
-rw-r--r--drivers/media/usb/uvc/uvc_v4l2.c6
-rw-r--r--drivers/media/usb/uvc/uvcvideo.h2
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
197void 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
213void 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
220int uvc_query_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf) 220int 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. */
624extern int uvc_queue_init(struct uvc_video_queue *queue, 624extern 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);
626extern void uvc_queue_release(struct uvc_video_queue *queue);
626extern int uvc_alloc_buffers(struct uvc_video_queue *queue, 627extern int uvc_alloc_buffers(struct uvc_video_queue *queue,
627 struct v4l2_requestbuffers *rb); 628 struct v4l2_requestbuffers *rb);
628extern void uvc_free_buffers(struct uvc_video_queue *queue);
629extern int uvc_query_buffer(struct uvc_video_queue *queue, 629extern int uvc_query_buffer(struct uvc_video_queue *queue,
630 struct v4l2_buffer *v4l2_buf); 630 struct v4l2_buffer *v4l2_buf);
631extern int uvc_create_buffers(struct uvc_video_queue *queue, 631extern int uvc_create_buffers(struct uvc_video_queue *queue,