diff options
Diffstat (limited to 'drivers/usb/core/usb.c')
| -rw-r--r-- | drivers/usb/core/usb.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 30dd2636f26..b1b85abb9a2 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c @@ -413,8 +413,13 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,  		} else {  			snprintf(dev->devpath, sizeof dev->devpath,  				"%s.%d", parent->devpath, port1); -			dev->route = parent->route + -				(port1 << ((parent->level - 1)*4)); +			/* Route string assumes hubs have less than 16 ports */ +			if (port1 < 15) +				dev->route = parent->route + +					(port1 << ((parent->level - 1)*4)); +			else +				dev->route = parent->route + +					(15 << ((parent->level - 1)*4));  		}  		dev->dev.parent = &parent->dev;  |