Merge branch 'linux-linaro-lsk-v4.4-android' of git://git.linaro.org/kernel/linux...
[firefly-linux-kernel-4.4.55.git] / drivers / usb / core / hub.c
index 780db8bb2262075749a16285087583617ea03309..92c99d999f07f7c0864517091a8fc473cae03dff 100644 (file)
@@ -1682,7 +1682,8 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id)
         * bus_resume methods.
         */
        if (hdev->parent) {             /* normal device */
-               usb_enable_autosuspend(hdev);
+               if (!(hdev->parent->quirks & USB_QUIRK_AUTO_SUSPEND))
+                       usb_enable_autosuspend(hdev);
        } else {                        /* root hub */
                const struct hc_driver *drv = bus_to_hcd(hdev->bus)->driver;
 
@@ -1980,7 +1981,7 @@ static void choose_devnum(struct usb_device *udev)
        struct usb_bus  *bus = udev->bus;
 
        /* be safe when more hub events are proceed in parallel */
-       mutex_lock(&bus->usb_address0_mutex);
+       mutex_lock(&bus->devnum_next_mutex);
        if (udev->wusb) {
                devnum = udev->portnum + 1;
                BUG_ON(test_bit(devnum, bus->devmap.devicemap));
@@ -1998,7 +1999,7 @@ static void choose_devnum(struct usb_device *udev)
                set_bit(devnum, bus->devmap.devicemap);
                udev->devnum = devnum;
        }
-       mutex_unlock(&bus->usb_address0_mutex);
+       mutex_unlock(&bus->devnum_next_mutex);
 }
 
 static void release_devnum(struct usb_device *udev)
@@ -4262,7 +4263,7 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,
        if (oldspeed == USB_SPEED_LOW)
                delay = HUB_LONG_RESET_TIME;
 
-       mutex_lock(&hdev->bus->usb_address0_mutex);
+       mutex_lock(hcd->address0_mutex);
 
        /* Reset the device; full speed may morph to high speed */
        /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */
@@ -4548,7 +4549,7 @@ fail:
                hub_port_disable(hub, port1, 0);
                update_devnum(udev, devnum);    /* for disconnect processing */
        }
-       mutex_unlock(&hdev->bus->usb_address0_mutex);
+       mutex_unlock(hcd->address0_mutex);
        return retval;
 }