aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/core')
-rw-r--r--drivers/usb/core/usb.c10
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);