]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[PATCH] USB: always export interface information for modalias
authorGreg Kroah-Hartman <gregkh@suse.de>
Wed, 9 Nov 2005 18:22:09 +0000 (10:22 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 11 Nov 2005 05:18:55 +0000 (21:18 -0800)
This fixes a problem with some cdc acm devices that were not getting
automatically loaded as the module alias was not being reported
properly.

This check was for back in the days when we only reported hotplug events
for the main usb device, not the interfaces.  We should always give the
interface information for MODALIAS/modalias as it can be needed.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/core/sysfs.c
drivers/usb/core/usb.c

index 00297f1138493124a163b7e66f123975d4bcd124..1e494233a58176c12c960d77632f7996f0c5aa92 100644 (file)
@@ -292,30 +292,23 @@ static ssize_t show_modalias(struct device *dev, struct device_attribute *attr,
 {
        struct usb_interface *intf;
        struct usb_device *udev;
-       int len;
+       struct usb_host_interface *alt;
 
        intf = to_usb_interface(dev);
        udev = interface_to_usbdev(intf);
-
-       len = sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic",
-                              le16_to_cpu(udev->descriptor.idVendor),
-                              le16_to_cpu(udev->descriptor.idProduct),
-                              le16_to_cpu(udev->descriptor.bcdDevice),
-                              udev->descriptor.bDeviceClass,
-                              udev->descriptor.bDeviceSubClass,
-                              udev->descriptor.bDeviceProtocol);
-       buf += len;
-
-       if (udev->descriptor.bDeviceClass == 0) {
-               struct usb_host_interface *alt = intf->cur_altsetting;
-
-               return len + sprintf(buf, "%02Xisc%02Xip%02X\n",
-                              alt->desc.bInterfaceClass,
-                              alt->desc.bInterfaceSubClass,
-                              alt->desc.bInterfaceProtocol);
-       } else {
-               return len + sprintf(buf, "*isc*ip*\n");
-       }
+       alt = intf->cur_altsetting;
+
+       return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X"
+                       "ic%02Xisc%02Xip%02X\n",
+                       le16_to_cpu(udev->descriptor.idVendor),
+                       le16_to_cpu(udev->descriptor.idProduct),
+                       le16_to_cpu(udev->descriptor.bcdDevice),
+                       udev->descriptor.bDeviceClass,
+                       udev->descriptor.bDeviceSubClass,
+                       udev->descriptor.bDeviceProtocol,
+                       alt->desc.bInterfaceClass,
+                       alt->desc.bInterfaceSubClass,
+                       alt->desc.bInterfaceProtocol);
 }
 static DEVICE_ATTR(modalias, S_IRUGO, show_modalias, NULL);
 
index 7d131509e41909a0aa92bac2665cf1acbccb2d1b..ff8b9fd7aae01dd2192ade559d656ab3fcd3327c 100644 (file)
@@ -557,6 +557,7 @@ static int usb_hotplug (struct device *dev, char **envp, int num_envp,
 {
        struct usb_interface *intf;
        struct usb_device *usb_dev;
+       struct usb_host_interface *alt;
        int i = 0;
        int length = 0;
 
@@ -573,7 +574,8 @@ static int usb_hotplug (struct device *dev, char **envp, int num_envp,
 
        intf = to_usb_interface(dev);
        usb_dev = interface_to_usbdev (intf);
-       
+       alt = intf->cur_altsetting;
+
        if (usb_dev->devnum < 0) {
                pr_debug ("usb %s: already deleted?\n", dev->bus_id);
                return -ENODEV;
@@ -615,46 +617,27 @@ static int usb_hotplug (struct device *dev, char **envp, int num_envp,
                                usb_dev->descriptor.bDeviceProtocol))
                return -ENOMEM;
 
-       if (usb_dev->descriptor.bDeviceClass == 0) {
-               struct usb_host_interface *alt = intf->cur_altsetting;
-
-               /* 2.4 only exposed interface zero.  in 2.5, hotplug
-                * agents are called for all interfaces, and can use
-                * $DEVPATH/bInterfaceNumber if necessary.
-                */
-               if (add_hotplug_env_var(envp, num_envp, &i,
-                                       buffer, buffer_size, &length,
-                                       "INTERFACE=%d/%d/%d",
-                                       alt->desc.bInterfaceClass,
-                                       alt->desc.bInterfaceSubClass,
-                                       alt->desc.bInterfaceProtocol))
-                       return -ENOMEM;
-
-               if (add_hotplug_env_var(envp, num_envp, &i,
-                                       buffer, buffer_size, &length,
-                                       "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X",
-                                       le16_to_cpu(usb_dev->descriptor.idVendor),
-                                       le16_to_cpu(usb_dev->descriptor.idProduct),
-                                       le16_to_cpu(usb_dev->descriptor.bcdDevice),
-                                       usb_dev->descriptor.bDeviceClass,
-                                       usb_dev->descriptor.bDeviceSubClass,
-                                       usb_dev->descriptor.bDeviceProtocol,
-                                       alt->desc.bInterfaceClass,
-                                       alt->desc.bInterfaceSubClass,
-                                       alt->desc.bInterfaceProtocol))
-                       return -ENOMEM;
-       } else {
-               if (add_hotplug_env_var(envp, num_envp, &i,
-                                       buffer, buffer_size, &length,
-                                       "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic*isc*ip*",
-                                       le16_to_cpu(usb_dev->descriptor.idVendor),
-                                       le16_to_cpu(usb_dev->descriptor.idProduct),
-                                       le16_to_cpu(usb_dev->descriptor.bcdDevice),
-                                       usb_dev->descriptor.bDeviceClass,
-                                       usb_dev->descriptor.bDeviceSubClass,
-                                       usb_dev->descriptor.bDeviceProtocol))
-                       return -ENOMEM;
-       }
+       if (add_hotplug_env_var(envp, num_envp, &i,
+                               buffer, buffer_size, &length,
+                               "INTERFACE=%d/%d/%d",
+                               alt->desc.bInterfaceClass,
+                               alt->desc.bInterfaceSubClass,
+                               alt->desc.bInterfaceProtocol))
+               return -ENOMEM;
+
+       if (add_hotplug_env_var(envp, num_envp, &i,
+                               buffer, buffer_size, &length,
+                               "MODALIAS=usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02Xic%02Xisc%02Xip%02X",
+                               le16_to_cpu(usb_dev->descriptor.idVendor),
+                               le16_to_cpu(usb_dev->descriptor.idProduct),
+                               le16_to_cpu(usb_dev->descriptor.bcdDevice),
+                               usb_dev->descriptor.bDeviceClass,
+                               usb_dev->descriptor.bDeviceSubClass,
+                               usb_dev->descriptor.bDeviceProtocol,
+                               alt->desc.bInterfaceClass,
+                               alt->desc.bInterfaceSubClass,
+                               alt->desc.bInterfaceProtocol))
+               return -ENOMEM;
 
        envp[i] = NULL;