diff options
-rw-r--r-- | drivers/usb/gadget/function/f_uvc.c | 6 | ||||
-rw-r--r-- | drivers/usb/gadget/function/uvc_v4l2.c | 19 |
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 | { |