USB: EHCI: fix handover for designated full-speed ports
authorAlan Stern <stern@rowland.harvard.edu>
Fri, 4 May 2007 15:55:31 +0000 (11:55 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 12 Jul 2007 23:29:47 +0000 (16:29 -0700)
This patch (as895) fixes up a loose end in the port-handover code for
the USB-Persist facility.  A special case occurs when a high-speed
device is attached to a port which the user has designated to run at
full-speed only; the port must be disabled before the handover can
take place.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/ehci-hub.c

index 3e80de7c7f5b11bead160d2df617f7050d9acc06..27291f5026511111580736d97d886f27451f102e 100644 (file)
@@ -60,11 +60,13 @@ static void ehci_handover_companion_ports(struct ehci_hcd *ehci)
        while (port--) {
                if (test_bit(port, &ehci->owned_ports)) {
                        reg = &ehci->regs->port_status[port];
-                       status = ehci_readl(ehci, reg);
+                       status = ehci_readl(ehci, reg) & ~PORT_RWC_BITS;
 
                        /* Port already owned by companion? */
                        if (status & PORT_OWNER)
                                clear_bit(port, &ehci->owned_ports);
+                       else if (test_bit(port, &ehci->companion_ports))
+                               ehci_writel(ehci, status & ~PORT_PE, reg);
                        else
                                ehci_hub_control(hcd, SetPortFeature,
                                                USB_PORT_FEAT_RESET, port + 1,