|
@@ -280,7 +280,7 @@ uvc_function_get_alt(struct usb_function *f, unsigned interface)
|
|
else if (interface != uvc->streaming_intf)
|
|
else if (interface != uvc->streaming_intf)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
else
|
|
else
|
|
- return uvc->video.ep->driver_data ? 1 : 0;
|
|
|
|
|
|
+ return uvc->video.ep->enabled ? 1 : 0;
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|
|
@@ -298,18 +298,14 @@ uvc_function_set_alt(struct usb_function *f, unsigned interface, unsigned alt)
|
|
if (alt)
|
|
if (alt)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
- if (uvc->control_ep->driver_data) {
|
|
|
|
- INFO(cdev, "reset UVC Control\n");
|
|
|
|
- usb_ep_disable(uvc->control_ep);
|
|
|
|
- uvc->control_ep->driver_data = NULL;
|
|
|
|
- }
|
|
|
|
|
|
+ INFO(cdev, "reset UVC Control\n");
|
|
|
|
+ usb_ep_disable(uvc->control_ep);
|
|
|
|
|
|
if (!uvc->control_ep->desc)
|
|
if (!uvc->control_ep->desc)
|
|
if (config_ep_by_speed(cdev->gadget, f, uvc->control_ep))
|
|
if (config_ep_by_speed(cdev->gadget, f, uvc->control_ep))
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
usb_ep_enable(uvc->control_ep);
|
|
usb_ep_enable(uvc->control_ep);
|
|
- uvc->control_ep->driver_data = uvc;
|
|
|
|
|
|
|
|
if (uvc->state == UVC_STATE_DISCONNECTED) {
|
|
if (uvc->state == UVC_STATE_DISCONNECTED) {
|
|
memset(&v4l2_event, 0, sizeof(v4l2_event));
|
|
memset(&v4l2_event, 0, sizeof(v4l2_event));
|
|
@@ -336,10 +332,8 @@ uvc_function_set_alt(struct usb_function *f, unsigned interface, unsigned alt)
|
|
if (uvc->state != UVC_STATE_STREAMING)
|
|
if (uvc->state != UVC_STATE_STREAMING)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if (uvc->video.ep) {
|
|
|
|
|
|
+ if (uvc->video.ep)
|
|
usb_ep_disable(uvc->video.ep);
|
|
usb_ep_disable(uvc->video.ep);
|
|
- uvc->video.ep->driver_data = NULL;
|
|
|
|
- }
|
|
|
|
|
|
|
|
memset(&v4l2_event, 0, sizeof(v4l2_event));
|
|
memset(&v4l2_event, 0, sizeof(v4l2_event));
|
|
v4l2_event.type = UVC_EVENT_STREAMOFF;
|
|
v4l2_event.type = UVC_EVENT_STREAMOFF;
|
|
@@ -355,18 +349,14 @@ uvc_function_set_alt(struct usb_function *f, unsigned interface, unsigned alt)
|
|
if (!uvc->video.ep)
|
|
if (!uvc->video.ep)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
- if (uvc->video.ep->driver_data) {
|
|
|
|
- INFO(cdev, "reset UVC\n");
|
|
|
|
- usb_ep_disable(uvc->video.ep);
|
|
|
|
- uvc->video.ep->driver_data = NULL;
|
|
|
|
- }
|
|
|
|
|
|
+ INFO(cdev, "reset UVC\n");
|
|
|
|
+ usb_ep_disable(uvc->video.ep);
|
|
|
|
|
|
ret = config_ep_by_speed(f->config->cdev->gadget,
|
|
ret = config_ep_by_speed(f->config->cdev->gadget,
|
|
&(uvc->func), uvc->video.ep);
|
|
&(uvc->func), uvc->video.ep);
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
usb_ep_enable(uvc->video.ep);
|
|
usb_ep_enable(uvc->video.ep);
|
|
- uvc->video.ep->driver_data = uvc;
|
|
|
|
|
|
|
|
memset(&v4l2_event, 0, sizeof(v4l2_event));
|
|
memset(&v4l2_event, 0, sizeof(v4l2_event));
|
|
v4l2_event.type = UVC_EVENT_STREAMON;
|
|
v4l2_event.type = UVC_EVENT_STREAMON;
|
|
@@ -392,15 +382,8 @@ uvc_function_disable(struct usb_function *f)
|
|
|
|
|
|
uvc->state = UVC_STATE_DISCONNECTED;
|
|
uvc->state = UVC_STATE_DISCONNECTED;
|
|
|
|
|
|
- if (uvc->video.ep->driver_data) {
|
|
|
|
- usb_ep_disable(uvc->video.ep);
|
|
|
|
- uvc->video.ep->driver_data = NULL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (uvc->control_ep->driver_data) {
|
|
|
|
- usb_ep_disable(uvc->control_ep);
|
|
|
|
- uvc->control_ep->driver_data = NULL;
|
|
|
|
- }
|
|
|
|
|
|
+ usb_ep_disable(uvc->video.ep);
|
|
|
|
+ usb_ep_disable(uvc->control_ep);
|
|
}
|
|
}
|
|
|
|
|
|
/* --------------------------------------------------------------------------
|
|
/* --------------------------------------------------------------------------
|
|
@@ -651,7 +634,6 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f)
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
uvc->control_ep = ep;
|
|
uvc->control_ep = ep;
|
|
- ep->driver_data = uvc;
|
|
|
|
|
|
|
|
if (gadget_is_superspeed(c->cdev->gadget))
|
|
if (gadget_is_superspeed(c->cdev->gadget))
|
|
ep = usb_ep_autoconfig_ss(cdev->gadget, &uvc_ss_streaming_ep,
|
|
ep = usb_ep_autoconfig_ss(cdev->gadget, &uvc_ss_streaming_ep,
|
|
@@ -666,7 +648,6 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f)
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
uvc->video.ep = ep;
|
|
uvc->video.ep = ep;
|
|
- ep->driver_data = uvc;
|
|
|
|
|
|
|
|
uvc_fs_streaming_ep.bEndpointAddress = uvc->video.ep->address;
|
|
uvc_fs_streaming_ep.bEndpointAddress = uvc->video.ep->address;
|
|
uvc_hs_streaming_ep.bEndpointAddress = uvc->video.ep->address;
|
|
uvc_hs_streaming_ep.bEndpointAddress = uvc->video.ep->address;
|
|
@@ -755,11 +736,6 @@ uvc_function_bind(struct usb_configuration *c, struct usb_function *f)
|
|
error:
|
|
error:
|
|
v4l2_device_unregister(&uvc->v4l2_dev);
|
|
v4l2_device_unregister(&uvc->v4l2_dev);
|
|
|
|
|
|
- if (uvc->control_ep)
|
|
|
|
- uvc->control_ep->driver_data = NULL;
|
|
|
|
- if (uvc->video.ep)
|
|
|
|
- uvc->video.ep->driver_data = NULL;
|
|
|
|
-
|
|
|
|
if (uvc->control_req)
|
|
if (uvc->control_req)
|
|
usb_ep_free_request(cdev->gadget->ep0, uvc->control_req);
|
|
usb_ep_free_request(cdev->gadget->ep0, uvc->control_req);
|
|
kfree(uvc->control_buf);
|
|
kfree(uvc->control_buf);
|
|
@@ -886,8 +862,6 @@ static void uvc_unbind(struct usb_configuration *c, struct usb_function *f)
|
|
|
|
|
|
video_unregister_device(&uvc->vdev);
|
|
video_unregister_device(&uvc->vdev);
|
|
v4l2_device_unregister(&uvc->v4l2_dev);
|
|
v4l2_device_unregister(&uvc->v4l2_dev);
|
|
- uvc->control_ep->driver_data = NULL;
|
|
|
|
- uvc->video.ep->driver_data = NULL;
|
|
|
|
|
|
|
|
usb_ep_free_request(cdev->gadget->ep0, uvc->control_req);
|
|
usb_ep_free_request(cdev->gadget->ep0, uvc->control_req);
|
|
kfree(uvc->control_buf);
|
|
kfree(uvc->control_buf);
|