usb: Do not power-cycle usb devices on init
authorHans de Goede <hdegoede@redhat.com>
Sat, 20 Sep 2014 15:03:53 +0000 (17:03 +0200)
committerMarek Vasut <marex@denx.de>
Tue, 4 Nov 2014 05:03:59 +0000 (06:03 +0100)
Do as the Linux kernel does and power on any ports which are not yet one,
this is enough.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
common/usb_hub.c

index c416e5e0b31790e2bc7570fd113f7b52bb2a4502..0f1eab448649541a45e674bcfbd599460cc89677 100644 (file)
@@ -86,49 +86,10 @@ static void usb_hub_power_on(struct usb_hub_device *hub)
        int i;
        struct usb_device *dev;
        unsigned pgood_delay = hub->desc.bPwrOn2PwrGood * 2;
-       ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
-       unsigned short portstatus;
-       int ret;
 
        dev = hub->pusb_dev;
 
-       /*
-        * Enable power to the ports:
-        * Here we Power-cycle the ports: aka,
-        * turning them off and turning on again.
-        */
        debug("enabling power on all ports\n");
-       for (i = 0; i < dev->maxchild; i++) {
-               usb_clear_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
-               debug("port %d returns %lX\n", i + 1, dev->status);
-       }
-
-       /* Wait at least 2*bPwrOn2PwrGood for PP to change */
-       mdelay(pgood_delay);
-
-       for (i = 0; i < dev->maxchild; i++) {
-               ret = usb_get_port_status(dev, i + 1, portsts);
-               if (ret < 0) {
-                       debug("port %d: get_port_status failed\n", i + 1);
-                       continue;
-               }
-
-               /*
-                * Check to confirm the state of Port Power:
-                * xHCI says "After modifying PP, s/w shall read
-                * PP and confirm that it has reached the desired state
-                * before modifying it again, undefined behavior may occur
-                * if this procedure is not followed".
-                * EHCI doesn't say anything like this, but no harm in keeping
-                * this.
-                */
-               portstatus = le16_to_cpu(portsts->wPortStatus);
-               if (portstatus & (USB_PORT_STAT_POWER << 1)) {
-                       debug("port %d: Port power change failed\n", i + 1);
-                       continue;
-               }
-       }
-
        for (i = 0; i < dev->maxchild; i++) {
                usb_set_port_feature(dev, i + 1, USB_PORT_FEAT_POWER);
                debug("port %d returns %lX\n", i + 1, dev->status);