diff options
Diffstat (limited to 'drivers/usb/core')
-rw-r--r-- | drivers/usb/core/usb.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c index 020b58528d9..f026991d0bd 100644 --- a/drivers/usb/core/usb.c +++ b/drivers/usb/core/usb.c | |||
@@ -375,18 +375,24 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent, | |||
375 | */ | 375 | */ |
376 | if (unlikely(!parent)) { | 376 | if (unlikely(!parent)) { |
377 | dev->devpath[0] = '0'; | 377 | dev->devpath[0] = '0'; |
378 | dev->route = 0; | ||
378 | 379 | ||
379 | dev->dev.parent = bus->controller; | 380 | dev->dev.parent = bus->controller; |
380 | dev_set_name(&dev->dev, "usb%d", bus->busnum); | 381 | dev_set_name(&dev->dev, "usb%d", bus->busnum); |
381 | root_hub = 1; | 382 | root_hub = 1; |
382 | } else { | 383 | } else { |
383 | /* match any labeling on the hubs; it's one-based */ | 384 | /* match any labeling on the hubs; it's one-based */ |
384 | if (parent->devpath[0] == '0') | 385 | if (parent->devpath[0] == '0') { |
385 | snprintf(dev->devpath, sizeof dev->devpath, | 386 | snprintf(dev->devpath, sizeof dev->devpath, |
386 | "%d", port1); | 387 | "%d", port1); |
387 | else | 388 | /* Root ports are not counted in route string */ |
389 | dev->route = 0; | ||
390 | } else { | ||
388 | snprintf(dev->devpath, sizeof dev->devpath, | 391 | snprintf(dev->devpath, sizeof dev->devpath, |
389 | "%s.%d", parent->devpath, port1); | 392 | "%s.%d", parent->devpath, port1); |
393 | dev->route = parent->route + | ||
394 | (port1 << ((parent->level - 1)*4)); | ||
395 | } | ||
390 | 396 | ||
391 | dev->dev.parent = &parent->dev; | 397 | dev->dev.parent = &parent->dev; |
392 | dev_set_name(&dev->dev, "%d-%s", bus->busnum, dev->devpath); | 398 | dev_set_name(&dev->dev, "%d-%s", bus->busnum, dev->devpath); |