Bugzilla – Attachment 55137 Details for
Bug 105621
cdc-acm: USB device id table not complete
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
IDP Log In
|
Forgot Password
[patch]
Fix for not autoloading cdc-acm drivers
usb-interface-modalias-fix.patch (text/plain), 5.16 KB, created by
Greg Kroah-Hartman
on 2005-10-21 22:05:19 UTC
(
hide
)
Description:
Fix for not autoloading cdc-acm drivers
Filename:
MIME Type:
Creator:
Greg Kroah-Hartman
Created:
2005-10-21 22:05:19 UTC
Size:
5.16 KB
patch
obsolete
>From: Greg Kroah-Hartman <gregkh@suse.de> >Subject: USB: always export interface information for modalias > >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 | 33 +++++++++--------------- > drivers/usb/core/usb.c | 63 +++++++++++++++++------------------------------ > 2 files changed, 36 insertions(+), 60 deletions(-) > >--- gregkh-2.6.orig/drivers/usb/core/sysfs.c >+++ gregkh-2.6/drivers/usb/core/sysfs.c >@@ -462,30 +462,23 @@ static ssize_t show_modalias(struct devi > { > 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); >+ alt = intf->cur_altsetting; > >- 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"); >- } >+ 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); > >--- gregkh-2.6.orig/drivers/usb/core/usb.c >+++ gregkh-2.6/drivers/usb/core/usb.c >@@ -569,6 +569,7 @@ static int usb_hotplug (struct device *d > { > struct usb_interface *intf; > struct usb_device *usb_dev; >+ struct usb_host_interface *alt; > int i = 0; > int length = 0; > >@@ -585,7 +586,8 @@ static int usb_hotplug (struct device *d > > 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; >@@ -627,46 +629,27 @@ static int usb_hotplug (struct device *d > usb_dev->descriptor.bDeviceProtocol)) > return -ENOMEM; > >- if (usb_dev->descriptor.bDeviceClass == 0) { >- struct usb_host_interface *alt = intf->cur_altsetting; >+ 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; > >- /* 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, >+ "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; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 105621
:
46672
|
46680
|
47547
| 55137