diff options
Diffstat (limited to 'drivers/usb/gadget/function/uvc_queue.c')
| -rw-r--r-- | drivers/usb/gadget/function/uvc_queue.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/usb/gadget/function/uvc_queue.c b/drivers/usb/gadget/function/uvc_queue.c index ec500ee499ee..0aa3d7e1f3cc 100644 --- a/drivers/usb/gadget/function/uvc_queue.c +++ b/drivers/usb/gadget/function/uvc_queue.c @@ -304,6 +304,7 @@ int uvcg_queue_enable(struct uvc_video_queue *queue, int enable)  		queue->sequence = 0;  		queue->buf_used = 0; +		queue->flags &= ~UVC_QUEUE_DROP_INCOMPLETE;  	} else {  		ret = vb2_streamoff(&queue->queue, queue->queue.type);  		if (ret < 0) @@ -329,10 +330,11 @@ int uvcg_queue_enable(struct uvc_video_queue *queue, int enable)  void uvcg_complete_buffer(struct uvc_video_queue *queue,  					  struct uvc_buffer *buf)  { -	if ((queue->flags & UVC_QUEUE_DROP_INCOMPLETE) && -	     buf->length != buf->bytesused) { -		buf->state = UVC_BUF_STATE_QUEUED; +	if (queue->flags & UVC_QUEUE_DROP_INCOMPLETE) { +		queue->flags &= ~UVC_QUEUE_DROP_INCOMPLETE; +		buf->state = UVC_BUF_STATE_ERROR;  		vb2_set_plane_payload(&buf->buf.vb2_buf, 0, 0); +		vb2_buffer_done(&buf->buf.vb2_buf, VB2_BUF_STATE_ERROR);  		return;  	}  | 
