| Index: common/usb.c
|
| diff --git a/common/usb.c b/common/usb.c
|
| index 87fca70706519353561722fdb91a4eee8701085f..1fb760bb2e311e8bd1cbca8768cfc02224370495 100644
|
| --- a/common/usb.c
|
| +++ b/common/usb.c
|
| @@ -754,6 +754,18 @@ struct usb_device *usb_alloc_new_device(void)
|
| return &usb_dev[dev_index - 1];
|
| }
|
|
|
| +/*
|
| + * Free the newly created device node.
|
| + * Called in error cases where configuring a newly attached
|
| + * device fails for some reason.
|
| + */
|
| +void usb_free_device(void)
|
| +{
|
| + dev_index--;
|
| + USB_PRINTF("Freeing device node: %d \n", dev_index);
|
| + memset(&usb_dev[dev_index], 0, sizeof(struct usb_device));
|
| + usb_dev[dev_index].devnum = -1;
|
| +}
|
|
|
| /*
|
| * By the time we get here, the device has gotten a new device ID
|
| @@ -1160,6 +1172,8 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
|
| /* Run it through the hoops (find a driver, etc) */
|
| if (usb_new_device(usb)) {
|
| /* Woops, disable the port */
|
| + usb_free_device();
|
| + dev->children[port] = NULL;
|
| USB_HUB_PRINTF("hub: disabling port %d\n", port + 1);
|
| usb_clear_port_feature(dev, port + 1, USB_PORT_FEAT_ENABLE);
|
| }
|
|
|