aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/core/sysfs.c35
-rw-r--r--drivers/usb/core/usb.c63
2 files changed, 37 insertions, 61 deletions
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c
index eae413bf8c2a..4bdbc9df6e03 100644
--- a/drivers/usb/core/sysfs.c
+++ b/drivers/usb/core/sysfs.c
@@ -462,30 +462,23 @@ static ssize_t show_modalias(struct device *dev, struct device_attribute *attr,
462{ 462{
463 struct usb_interface *intf; 463 struct usb_interface *intf;
464 struct usb_device *udev; 464 struct usb_device *udev;
465 int len; 465 struct usb_host_interface *alt;
466 466
467 intf = to_usb_interface(dev); 467 intf = to_usb_interface(dev);
468 udev = interface_to_usbdev(intf); 468 udev = interface_to_usbdev(intf);
469 469 alt = intf->cur_altsetting;
470 len = sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic", 470
471 le16_to_cpu(udev->descriptor.idVendor), 471 return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X"
472 le16_to_cpu(udev->descriptor.idProduct), 472 "ic%02Xisc%02Xip%02X\n",
473 le16_to_cpu(udev->descriptor.bcdDevice), 473 le16_to_cpu(udev->descriptor.idVendor),
474 udev->descriptor.bDeviceClass, 474 le16_to_cpu(udev->descriptor.idProduct),
475 udev->descriptor.bDeviceSubClass, 475 le16_to_cpu(udev->descriptor.bcdDevice),
476 udev->descriptor.bDeviceProtocol); 476 udev->descriptor.bDeviceClass,
477 buf += len; 477 udev->descriptor.bDeviceSubClass,
478 478 udev->descriptor.bDeviceProtocol,
479 if (udev->descriptor.bDeviceClass == 0) { 479 alt->desc.bInterfaceClass,
480 struct usb_host_interface *alt = intf->cur_altsetting; 480 alt->desc.bInterfaceSubClass,
481 481 alt->desc.bInterfaceProtocol);
482 return len + sprintf(buf, "%02Xisc%02Xip%02X\n",
483 alt->desc.bInterfaceClass,
484 alt->desc.bInterfaceSubClass,
485 alt->desc.bInterfaceProtocol);
486 } else {
487 return len + sprintf(buf, "*isc*ip*\n");
488 }
489} 482}
490static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL); 483static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
491 484
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index 2493e7d9f5b3..4eca4904938f 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -569,6 +569,7 @@ static int usb_hotplug (struct device *dev, char **envp, int num_envp,
569{ 569{
570 struct usb_interface *intf; 570 struct usb_interface *intf;
571 struct usb_device *usb_dev; 571 struct usb_device *usb_dev;
572 struct usb_host_interface *alt;
572 int i = 0; 573 int i = 0;
573 int length = 0; 574 int length = 0;
574 575
@@ -585,7 +586,8 @@ static int usb_hotplug (struct device *dev, char **envp, int num_envp,
585 586
586 intf = to_usb_interface(dev); 587 intf = to_usb_interface(dev);
587 usb_dev = interface_to_usbdev (intf); 588 usb_dev = interface_to_usbdev (intf);
588 589 alt = intf->cur_altsetting;
590
589 if (usb_dev->devnum < 0) { 591 if (usb_dev->devnum < 0) {
590 pr_debug ("usb %s: already deleted?\n", dev->bus_id); 592 pr_debug ("usb %s: already deleted?\n", dev->bus_id);
591 return -ENODEV; 593 return -ENODEV;
@@ -627,46 +629,27 @@ static int usb_hotplug (struct device *dev, char **envp, int num_envp,
627 usb_dev->descriptor.bDeviceProtocol)) 629 usb_dev->descriptor.bDeviceProtocol))
628 return -ENOMEM; 630 return -ENOMEM;
629 631
630 if (usb_dev->descriptor.bDeviceClass == 0) { 632 if (add_hotplug_env_var(envp, num_envp, &i,
631 struct usb_host_interface *alt = intf->cur_altsetting; 633 buffer, buffer_size, &length,
634 "INTERFACE=%d/%d/%d",
635 alt->desc.bInterfaceClass,
636 alt->desc.bInterfaceSubClass,
637 alt->desc.bInterfaceProtocol))
638 return -ENOMEM;
632 639
633 /* 2.4 only exposed interface zero. in 2.5, hotplug 640 if (add_hotplug_env_var(envp, num_envp, &i,
634 * agents are called for all interfaces, and can use 641 buffer, buffer_size, &length,
635 * $DEVPATH/bInterfaceNumber if necessary. 642 "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X",
636 */ 643 le16_to_cpu(usb_dev->descriptor.idVendor),
637 if (add_hotplug_env_var(envp, num_envp, &i, 644 le16_to_cpu(usb_dev->descriptor.idProduct),
638 buffer, buffer_size, &length, 645 le16_to_cpu(usb_dev->descriptor.bcdDevice),
639 "INTERFACE=%d/%d/%d", 646 usb_dev->descriptor.bDeviceClass,
640 alt->desc.bInterfaceClass, 647 usb_dev->descriptor.bDeviceSubClass,
641 alt->desc.bInterfaceSubClass, 648 usb_dev->descriptor.bDeviceProtocol,
642 alt->desc.bInterfaceProtocol)) 649 alt->desc.bInterfaceClass,
643 return -ENOMEM; 650 alt->desc.bInterfaceSubClass,
644 651 alt->desc.bInterfaceProtocol))
645 if (add_hotplug_env_var(envp, num_envp, &i, 652 return -ENOMEM;
646 buffer, buffer_size, &length,
647 "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X",
648 le16_to_cpu(usb_dev->descriptor.idVendor),
649 le16_to_cpu(usb_dev->descriptor.idProduct),
650 le16_to_cpu(usb_dev->descriptor.bcdDevice),
651 usb_dev->descriptor.bDeviceClass,
652 usb_dev->descriptor.bDeviceSubClass,
653 usb_dev->descriptor.bDeviceProtocol,
654 alt->desc.bInterfaceClass,
655 alt->desc.bInterfaceSubClass,
656 alt->desc.bInterfaceProtocol))
657 return -ENOMEM;
658 } else {
659 if (add_hotplug_env_var(envp, num_envp, &i,
660 buffer, buffer_size, &length,
661 "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic*isc*ip*",
662 le16_to_cpu(usb_dev->descriptor.idVendor),
663 le16_to_cpu(usb_dev->descriptor.idProduct),
664 le16_to_cpu(usb_dev->descriptor.bcdDevice),
665 usb_dev->descriptor.bDeviceClass,
666 usb_dev->descriptor.bDeviceSubClass,
667 usb_dev->descriptor.bDeviceProtocol))
668 return -ENOMEM;
669 }
670 653
671 envp[i] = NULL; 654 envp[i] = NULL;
672 655