[Resend -- the original message stated that this patch was 08/11 but it is 
really 09/11]

Greg:

Since usb_generic can be unbound from a USB device, we need to be able to 
handle the possibility that a suspend or resume request arrives for a 
device with no driver.  This patch (as735) arranges things so that resume 
requests will fail and suspend requests will use the standard USB 
port-suspend code.  Attempts to suspend or resume an unbound interface are 
handled similarly (although the error caused by trying to resume an 
unbound interface is dropped by the calling routine).

Alan Stern



Signed-off-by: Alan Stern <[EMAIL PROTECTED]>

---

Index: usb-2.6/drivers/usb/core/driver.c
===================================================================
--- usb-2.6.orig/drivers/usb/core/driver.c
+++ usb-2.6/drivers/usb/core/driver.c
@@ -765,8 +765,12 @@ static int suspend_device(struct usb_dev
                        udev->state == USB_STATE_SUSPENDED)
                goto done;
 
-       if (udev->dev.driver == NULL)
+       /* For devices that don't have a driver, we do a standard suspend. */
+       if (udev->dev.driver == NULL) {
+               status = usb_port_suspend(udev);
                goto done;
+       }
+
        udriver = to_usb_device_driver(udev->dev.driver);
        status = udriver->suspend(udev, msg);
 
@@ -786,8 +790,12 @@ static int resume_device(struct usb_devi
                        udev->state != USB_STATE_SUSPENDED)
                goto done;
 
-       if (udev->dev.driver == NULL)
+       /* Can't resume it if it doesn't have a driver. */
+       if (udev->dev.driver == NULL) {
+               status = -ENOTCONN;
                goto done;
+       }
+
        udriver = to_usb_device_driver(udev->dev.driver);
        status = udriver->resume(udev);
 
@@ -808,7 +816,7 @@ static int suspend_interface(struct usb_
                        !is_active(intf))
                goto done;
 
-       if (intf->dev.driver == NULL)
+       if (intf->dev.driver == NULL)           /* This can't happen */
                goto done;
        driver = to_usb_driver(intf->dev.driver);
 
@@ -842,8 +850,11 @@ static int resume_interface(struct usb_i
                        is_active(intf))
                goto done;
 
-       if (intf->dev.driver == NULL)
+       /* Can't resume it if it doesn't have a driver. */
+       if (intf->dev.driver == NULL) {
+               status = -ENOTCONN;
                goto done;
+       }
        driver = to_usb_driver(intf->dev.driver);
 
        if (driver->resume) {


Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to