dev_dbg(&udev->dev, "USB quirks for this device: %x\n",
                                udev->quirks);
 
+#ifdef CONFIG_USB_SUSPEND
+
        /* By default, disable autosuspend for all devices.  The hub driver
         * will enable it for hubs.
         */
        usb_disable_autosuspend(udev);
 
+       /* Autosuspend can also be disabled if the initial autosuspend_delay
+        * is negative.
+        */
+       if (udev->autosuspend_delay < 0)
+               usb_autoresume_device(udev);
+
+#endif
+
        /* For the present, all devices default to USB-PERSIST enabled */
 #if 0          /* was: #ifdef CONFIG_PM */
        /* Hubs are automatically enabled for USB-PERSIST */
 
                const char *buf, size_t count)
 {
        struct usb_device *udev = to_usb_device(dev);
-       int value;
+       int value, old_delay;
+       int rc;
 
        if (sscanf(buf, "%d", &value) != 1 || value >= INT_MAX/HZ ||
                        value <= - INT_MAX/HZ)
        value *= HZ;
 
        usb_lock_device(udev);
+       old_delay = udev->autosuspend_delay;
        udev->autosuspend_delay = value;
-       if (value >= 0)
-               usb_try_autosuspend_device(udev);
-       else {
-               if (usb_autoresume_device(udev) == 0)
+
+       if (old_delay < 0) {    /* Autosuspend wasn't allowed */
+               if (value >= 0)
                        usb_autosuspend_device(udev);
+       } else {                /* Autosuspend was allowed */
+               if (value < 0) {
+                       rc = usb_autoresume_device(udev);
+                       if (rc < 0) {
+                               count = rc;
+                               udev->autosuspend_delay = old_delay;
+                       }
+               } else {
+                       usb_try_autosuspend_device(udev);
+               }
        }
+
        usb_unlock_device(udev);
        return count;
 }