Skip to content

Commit

Permalink
usb: gadget: uvc: Implement videobuf2 .wait_prepare and .wait_finish …
Browse files Browse the repository at this point in the history
…operations

Those optional operations are used to release and reacquire the queue
lock when videobuf2 needs to perform operations that sleep for a long
time, such as waiting for a buffer to be complete. Implement them to
avoid blocking qbuf or streamoff calls when a dqbuf is in progress.

Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
  • Loading branch information
Michael Grzeschik authored and Felipe Balbi committed Jun 4, 2013
1 parent 81fbf10 commit a2cc81d
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions drivers/usb/gadget/uvc_queue.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,26 @@ static void uvc_buffer_queue(struct vb2_buffer *vb)
spin_unlock_irqrestore(&queue->irqlock, flags);
}

static void uvc_wait_prepare(struct vb2_queue *vq)
{
struct uvc_video_queue *queue = vb2_get_drv_priv(vq);

mutex_unlock(&queue->mutex);
}

static void uvc_wait_finish(struct vb2_queue *vq)
{
struct uvc_video_queue *queue = vb2_get_drv_priv(vq);

mutex_lock(&queue->mutex);
}

static struct vb2_ops uvc_queue_qops = {
.queue_setup = uvc_queue_setup,
.buf_prepare = uvc_buffer_prepare,
.buf_queue = uvc_buffer_queue,
.wait_prepare = uvc_wait_prepare,
.wait_finish = uvc_wait_finish,
};

static int uvc_queue_init(struct uvc_video_queue *queue,
Expand Down

0 comments on commit a2cc81d

Please sign in to comment.