aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/core/usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/core/usb.c')
-rw-r--r--drivers/usb/core/usb.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index 43ee943d757a..b1b85abb9a2d 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,
413 } else { 413 } else {
414 snprintf(dev->devpath, sizeof dev->devpath, 414 snprintf(dev->devpath, sizeof dev->devpath,
415 "%s.%d", parent->devpath, port1); 415 "%s.%d", parent->devpath, port1);
416 dev->route = parent->route + 416 /* Route string assumes hubs have less than 16 ports */
417 (port1 << ((parent->level - 1)*4)); 417 if (port1 < 15)
418 dev->route = parent->route +
419 (port1 << ((parent->level - 1)*4));
420 else
421 dev->route = parent->route +
422 (15 << ((parent->level - 1)*4));
418 } 423 }
419 424
420 dev->dev.parent = &parent->dev; 425 dev->dev.parent = &parent->dev;
@@ -914,11 +919,11 @@ int usb_buffer_map_sg(const struct usb_device *dev, int is_in,
914 || !(bus = dev->bus) 919 || !(bus = dev->bus)
915 || !(controller = bus->controller) 920 || !(controller = bus->controller)
916 || !controller->dma_mask) 921 || !controller->dma_mask)
917 return -1; 922 return -EINVAL;
918 923
919 /* FIXME generic api broken like pci, can't report errors */ 924 /* FIXME generic api broken like pci, can't report errors */
920 return dma_map_sg(controller, sg, nents, 925 return dma_map_sg(controller, sg, nents,
921 is_in ? DMA_FROM_DEVICE : DMA_TO_DEVICE); 926 is_in ? DMA_FROM_DEVICE : DMA_TO_DEVICE) ? : -ENOMEM;
922} 927}
923EXPORT_SYMBOL_GPL(usb_buffer_map_sg); 928EXPORT_SYMBOL_GPL(usb_buffer_map_sg);
924 929