On Wed, 15 Apr 2009, Eric Miao wrote: > From a0e1b72f073f4b3dd811b6c4fe4cae4044e56d45 Mon Sep 17 00:00:00 2001 > From: Yong Yao <yaoyong@xxxxxxxxxxx> > Date: Wed, 15 Apr 2009 13:08:56 +0800 > Subject: [PATCH] usb core: HNP support in hub.c > > When starting HNP, we need reset the port, so USB_PORT_STAT_ENABLE is > set. In such case, we should not disable the port, otherwise the port > will be disconnected. It will cause that HNP to fail, since the state > machine will change from OTG_STATE_B_HOST to OTG_STATE_B_PERIPHERAL > after the port is disconnected. > > Signed-off-by: Yong Yao <yaoyong@xxxxxxxxxxx> > Signed-off-by: Eric Miao <eric.miao@xxxxxxxxxxx> > --- > > Alan, this is a follow-up of the previous thread, with the fix > to be OTG specific, please help review. > > drivers/usb/core/hub.c | 7 +++++-- > 1 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index b19cbfc..2e28f48 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -688,8 +688,11 @@ static void hub_activate(struct usb_hub *hub, > enum hub_activation_type type) > * Unconnected ports should likewise be disabled (paranoia), > * and so should ports for which we have no usb_device. > */ > - if ((portstatus & USB_PORT_STAT_ENABLE) && ( > - type != HUB_RESUME || > + if ((portstatus & USB_PORT_STAT_ENABLE) && > +#ifdef CONFIG_USB_OTG > + !(hdev->bus->is_b_host) && > +#endif > + (type != HUB_RESUME || > !(portstatus & USB_PORT_STAT_CONNECTION) || > !udev || > udev->state == USB_STATE_NOTATTACHED)) { This is a lot better than the previous patch. I wonder if there is a simple way to eliminate the ugly preprocessor test. For instance, if CONFIG_USB_OTG isn't defined, won't hdev->bus->is_b_host always be 0? I also wonder if this is truly correct. Evidently you want the new behavior to apply during the HNP exchange, but what about at other times? Suppose the device is already a B-host when its root hub gets suspended; what would happen then? 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