On Thu, 29 Apr 2010, Andiry Xu wrote: > >From 7fab4880295b3af163342570d3c33ac0b51d29b5 Mon Sep 17 00:00:00 2001 > From: Andiry Xu <andiry.xu@xxxxxxx> > Date: Thu, 29 Apr 2010 00:21:38 +0800 > Subject: [PATCH] usbcore: Do not disable USB3 protocol ports in hub_activate > > When USB3 protocol port detects an USB3.0 device attach, the port will > automatically transition to the Enabled state upon the completion > of successful link training. > > Do not disable USB3 protocol ports in hub_activate(), or USB3.0 device > will fail to be recognized if xHCI bus power management is implemented. I would prefer to see xhci-hcd changed to register two separate root hubs. But until that gets done, something like this appears to be necessary. > Signed-off-by: Andiry Xu <andiry.xu@xxxxxxx> > --- > drivers/usb/core/hub.c | 16 ++++++++++++++-- > 1 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index 5c483fa..96bad49 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -745,8 +745,20 @@ static void hub_activate(struct usb_hub *hub, enum hub_activation_type type) > !(portstatus & USB_PORT_STAT_CONNECTION) || > !udev || > udev->state == USB_STATE_NOTATTACHED)) { > - clear_port_feature(hdev, port1, USB_PORT_FEAT_ENABLE); > - portstatus &= ~USB_PORT_STAT_ENABLE; > + /* > + * USB3 protocol ports will automatically transition > + * to Enabled state when detect an USB3.0 device attach. > + * Do not disable USB3 protocol ports. > + * FIXME: USB3 root hub and external hubs are treated > + * differently here. > + */ > + if ((hdev->descriptor.bDeviceProtocol != 3) || > + ((!hdev->parent) && > + !(portstatus & USB_PORT_STAT_SUPER_SPEED))) { You've got lots of excess ()'s here; they tend to clutter up the text. > + clear_port_feature(hdev, port1, > + USB_PORT_FEAT_ENABLE); > + portstatus &= ~USB_PORT_STAT_ENABLE; > + } > } Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html