ChangeSet 1.1321, 2003/05/30 10:25:11-07:00, stern@rowland.harvard.edu [PATCH] USB: fix address assignment after device reset Until my ambitious project gets going, this patch at least fixes the problem of assigning a device's new address following a device reset. The only change needed to David's original suggestion was to handle the pathway involved in registering root hubs. drivers/usb/core/hcd.c | 1 + drivers/usb/core/hub.c | 3 +++ drivers/usb/core/usb.c | 3 --- 3 files changed, 4 insertions(+), 3 deletions(-) diff -Nru a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c --- a/drivers/usb/core/hcd.c Fri May 30 11:34:53 2003 +++ b/drivers/usb/core/hcd.c Fri May 30 11:34:53 2003 @@ -720,6 +720,7 @@ int retval; sprintf (&usb_dev->dev.bus_id[0], "usb%d", usb_dev->bus->busnum); + usb_dev->state = USB_STATE_DEFAULT; retval = usb_new_device (usb_dev, parent_dev); if (retval) dev_err (parent_dev, "can't register root hub for %s, %d\n", diff -Nru a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c --- a/drivers/usb/core/hub.c Fri May 30 11:34:53 2003 +++ b/drivers/usb/core/hub.c Fri May 30 11:34:53 2003 @@ -737,6 +737,9 @@ if (status != -1) { usb_clear_port_feature(hub, port + 1, USB_PORT_FEAT_C_RESET); + dev->state = status + ? USB_STATE_NOTATTACHED + : USB_STATE_DEFAULT; return status; } diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c --- a/drivers/usb/core/usb.c Fri May 30 11:34:53 2003 +++ b/drivers/usb/core/usb.c Fri May 30 11:34:53 2003 @@ -1017,9 +1017,6 @@ /* dma masks come from the controller; readonly, except to hcd */ dev->dev.dma_mask = parent->dma_mask; - /* it's not usable yet */ - dev->state = USB_STATE_DEFAULT; - /* USB 2.0 section 5.5.3 talks about ep0 maxpacket ... * it's fixed size except for full speed devices. */