|
@@ -1663,7 +1663,7 @@ static int uvc_suspend(struct usb_interface *intf, pm_message_t message)
|
|
|
return uvc_video_suspend(&dev->video);
|
|
|
}
|
|
|
|
|
|
-static int uvc_resume(struct usb_interface *intf)
|
|
|
+static int __uvc_resume(struct usb_interface *intf, int reset)
|
|
|
{
|
|
|
struct uvc_device *dev = usb_get_intfdata(intf);
|
|
|
int ret;
|
|
@@ -1672,7 +1672,7 @@ static int uvc_resume(struct usb_interface *intf)
|
|
|
intf->cur_altsetting->desc.bInterfaceNumber);
|
|
|
|
|
|
if (intf->cur_altsetting->desc.bInterfaceSubClass == SC_VIDEOCONTROL) {
|
|
|
- if ((ret = uvc_ctrl_resume_device(dev)) < 0)
|
|
|
+ if (reset && (ret = uvc_ctrl_resume_device(dev)) < 0)
|
|
|
return ret;
|
|
|
|
|
|
return uvc_status_resume(dev);
|
|
@@ -1687,6 +1687,16 @@ static int uvc_resume(struct usb_interface *intf)
|
|
|
return uvc_video_resume(&dev->video);
|
|
|
}
|
|
|
|
|
|
+static int uvc_resume(struct usb_interface *intf)
|
|
|
+{
|
|
|
+ return __uvc_resume(intf, 0);
|
|
|
+}
|
|
|
+
|
|
|
+static int uvc_reset_resume(struct usb_interface *intf)
|
|
|
+{
|
|
|
+ return __uvc_resume(intf, 1);
|
|
|
+}
|
|
|
+
|
|
|
/* ------------------------------------------------------------------------
|
|
|
* Driver initialization and cleanup
|
|
|
*/
|
|
@@ -1952,6 +1962,7 @@ struct uvc_driver uvc_driver = {
|
|
|
.disconnect = uvc_disconnect,
|
|
|
.suspend = uvc_suspend,
|
|
|
.resume = uvc_resume,
|
|
|
+ .reset_resume = uvc_reset_resume,
|
|
|
.id_table = uvc_ids,
|
|
|
.supports_autosuspend = 1,
|
|
|
},
|