Skip to content

Commit

Permalink
[media] uvcvideo: Rename and split uvc_queue_enable to uvc_queue_stre…
Browse files Browse the repository at this point in the history
…am(on|off)

This brings the function name in line with the V4L2 API terminology and
allows removing the duplicate queue type check.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
  • Loading branch information
Laurent Pinchart authored and Mauro Carvalho Chehab committed Nov 25, 2014
1 parent 1b7f9c9 commit 0da4ab9
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 41 deletions.
3 changes: 2 additions & 1 deletion drivers/media/usb/uvc/uvc_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -2038,7 +2038,8 @@ static int __uvc_resume(struct usb_interface *intf, int reset)
if (stream->intf == intf) {
ret = uvc_video_resume(stream, reset);
if (ret < 0)
uvc_queue_enable(&stream->queue, 0);
uvc_queue_streamoff(&stream->queue,
stream->queue.queue.type);
return ret;
}
}
Expand Down
53 changes: 22 additions & 31 deletions drivers/media/usb/uvc/uvc_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,28 @@ int uvc_dequeue_buffer(struct uvc_video_queue *queue, struct v4l2_buffer *buf,
return ret;
}

int uvc_queue_streamon(struct uvc_video_queue *queue, enum v4l2_buf_type type)
{
int ret;

mutex_lock(&queue->mutex);
ret = vb2_streamon(&queue->queue, type);
mutex_unlock(&queue->mutex);

return ret;
}

int uvc_queue_streamoff(struct uvc_video_queue *queue, enum v4l2_buf_type type)
{
int ret;

mutex_lock(&queue->mutex);
ret = vb2_streamoff(&queue->queue, type);
mutex_unlock(&queue->mutex);

return ret;
}

int uvc_queue_mmap(struct uvc_video_queue *queue, struct vm_area_struct *vma)
{
int ret;
Expand Down Expand Up @@ -317,37 +339,6 @@ int uvc_queue_allocated(struct uvc_video_queue *queue)
return allocated;
}

/*
* Enable or disable the video buffers queue.
*
* The queue must be enabled before starting video acquisition and must be
* disabled after stopping it. This ensures that the video buffers queue
* state can be properly initialized before buffers are accessed from the
* interrupt handler.
*
* Enabling the video queue returns -EBUSY if the queue is already enabled.
*
* Disabling the video queue cancels the queue and removes all buffers from
* the main queue.
*
* This function can't be called from interrupt context. Use
* uvc_queue_cancel() instead.
*/
int uvc_queue_enable(struct uvc_video_queue *queue, int enable)
{
int ret;

mutex_lock(&queue->mutex);

if (enable)
ret = vb2_streamon(&queue->queue, queue->queue.type);
else
ret = vb2_streamoff(&queue->queue, queue->queue.type);

mutex_unlock(&queue->mutex);
return ret;
}

/*
* Cancel the video buffers queue.
*
Expand Down
10 changes: 2 additions & 8 deletions drivers/media/usb/uvc/uvc_v4l2.c
Original file line number Diff line number Diff line change
Expand Up @@ -757,14 +757,11 @@ static int uvc_ioctl_streamon(struct file *file, void *fh,
struct uvc_streaming *stream = handle->stream;
int ret;

if (type != stream->type)
return -EINVAL;

if (!uvc_has_privileges(handle))
return -EBUSY;

mutex_lock(&stream->mutex);
ret = uvc_queue_enable(&stream->queue, 1);
ret = uvc_queue_streamon(&stream->queue, type);
mutex_unlock(&stream->mutex);

return ret;
Expand All @@ -776,14 +773,11 @@ static int uvc_ioctl_streamoff(struct file *file, void *fh,
struct uvc_fh *handle = fh;
struct uvc_streaming *stream = handle->stream;

if (type != stream->type)
return -EINVAL;

if (!uvc_has_privileges(handle))
return -EBUSY;

mutex_lock(&stream->mutex);
uvc_queue_enable(&stream->queue, 0);
uvc_queue_streamoff(&stream->queue, type);
mutex_unlock(&stream->mutex);

return 0;
Expand Down
5 changes: 4 additions & 1 deletion drivers/media/usb/uvc/uvcvideo.h
Original file line number Diff line number Diff line change
Expand Up @@ -634,7 +634,10 @@ extern int uvc_queue_buffer(struct uvc_video_queue *queue,
struct v4l2_buffer *v4l2_buf);
extern int uvc_dequeue_buffer(struct uvc_video_queue *queue,
struct v4l2_buffer *v4l2_buf, int nonblocking);
extern int uvc_queue_enable(struct uvc_video_queue *queue, int enable);
extern int uvc_queue_streamon(struct uvc_video_queue *queue,
enum v4l2_buf_type type);
extern int uvc_queue_streamoff(struct uvc_video_queue *queue,
enum v4l2_buf_type type);
extern void uvc_queue_cancel(struct uvc_video_queue *queue, int disconnect);
extern struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue,
struct uvc_buffer *buf);
Expand Down

0 comments on commit 0da4ab9

Please sign in to comment.