aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/gadget/function/f_uvc.c6
-rw-r--r--drivers/usb/gadget/function/uvc_v4l2.c19
2 files changed, 7 insertions, 18 deletions
diff --git a/drivers/usb/gadget/function/f_uvc.c b/drivers/usb/gadget/function/f_uvc.c
index ff4340a1b4b3..e9d625b35751 100644
--- a/drivers/usb/gadget/function/f_uvc.c
+++ b/drivers/usb/gadget/function/f_uvc.c
@@ -251,6 +251,12 @@ uvc_function_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
251 if (le16_to_cpu(ctrl->wLength) > UVC_MAX_REQUEST_SIZE) 251 if (le16_to_cpu(ctrl->wLength) > UVC_MAX_REQUEST_SIZE)
252 return -EINVAL; 252 return -EINVAL;
253 253
254 /* Tell the complete callback to generate an event for the next request
255 * that will be enqueued by UVCIOC_SEND_RESPONSE.
256 */
257 uvc->event_setup_out = !(ctrl->bRequestType & USB_DIR_IN);
258 uvc->event_length = le16_to_cpu(ctrl->wLength);
259
254 memset(&v4l2_event, 0, sizeof(v4l2_event)); 260 memset(&v4l2_event, 0, sizeof(v4l2_event));
255 v4l2_event.type = UVC_EVENT_SETUP; 261 v4l2_event.type = UVC_EVENT_SETUP;
256 memcpy(&uvc_event->req, ctrl, sizeof(uvc_event->req)); 262 memcpy(&uvc_event->req, ctrl, sizeof(uvc_event->req));
diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c
index bcd71cee7b51..f22b878f163a 100644
--- a/drivers/usb/gadget/function/uvc_v4l2.c
+++ b/drivers/usb/gadget/function/uvc_v4l2.c
@@ -271,25 +271,8 @@ uvc_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
271 271
272 /* Events */ 272 /* Events */
273 case VIDIOC_DQEVENT: 273 case VIDIOC_DQEVENT:
274 { 274 return v4l2_event_dequeue(&handle->vfh, arg,
275 struct v4l2_event *event = arg;
276
277 ret = v4l2_event_dequeue(&handle->vfh, event,
278 file->f_flags & O_NONBLOCK); 275 file->f_flags & O_NONBLOCK);
279 if (ret == 0 && event->type == UVC_EVENT_SETUP) {
280 struct uvc_event *uvc_event = (void *)&event->u.data;
281
282 /* Tell the complete callback to generate an event for
283 * the next request that will be enqueued by
284 * uvc_event_write.
285 */
286 uvc->event_setup_out =
287 !(uvc_event->req.bRequestType & USB_DIR_IN);
288 uvc->event_length = uvc_event->req.wLength;
289 }
290
291 return ret;
292 }
293 276
294 case VIDIOC_SUBSCRIBE_EVENT: 277 case VIDIOC_SUBSCRIBE_EVENT:
295 { 278 {