[PATCH] Quirk for Hummingbird huc56s / Conexant ACM modem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



	A Conexant USB ACM modem sold by Hummingbird under the model
name "huc56s" declares some USB communications class descriptors on
its "data" class interface that instead belong on the "communications"
class interface, at least according to my reading of the "Universal
Serial Bus Class Definitions for Communications Devices", revision
1.2, November 16, 2007 (part of the zip file at
http://www.usb.org/developers/devclass_docs/CDC1.2_WMC1.1.zip ),
page 15, section 5.2.3 ("Functional Descriptors"):

		"Although the Communications Class currently defines
		specific descriptor information, the Data Class does not."
		[Goes on to describe the descriptors in question.]

	I am apparently not the first person to identify this kind of
descriptor bug on a communications class device, since the source code
for lsusb in usbutils-0.73/lsusb.c contains the following
accommodation.
	
			case USB_DT_CS_INTERFACE:
				/* MISPLACED DESCRIPTOR ... less indent */
				switch (interface->bInterfaceClass) {
				case USB_CLASS_COMM:
				case USB_CLASS_DATA:	// comm data
					dump_comm_descriptor(dev, buf,
						"      ");
					break;

	So, I would like to submit the attached patch that adds a
quirk entry to linux-2.6.29-rc5/drivers/usb/class/cdc-acm.c for this
modem.  Since the patch is tiny, I have included it both in line and as a MIME attachment.  The quirk that it adds causes the driver to the communication class descriptors to be absent.  With this patch, I am able to do "AT" commands on the modem using minicom.  Feel free to trim down the
comment in the patch if you wish.

	Since the huc56s is a small cheap USB dongle, I imagine it
will remain popular among people who still need an analog modem, so I
doubt that I am the only person effected by this.  Also, the linuxant
"DGC" driver already has explicit support for this device by product
and vendor ID, and I would prefer not to cause people to install
a duplicative driver just to accommodate this quirk.

	Just as a thought for the future, if this problem of misplaced
communications class descriptors is a common enough already to have
kludge in lsusb, then perhaps it might be worthwhile to define a new
quirk to indicate that the descriptors can be found on the data
interface, although I have not investigated how cdc-acm uses the
information in these descriptors, so I don't know whether or not it
would be worth the effort.

	Anyhow, please let me know what more I need to do to get this
patch or one like it integrated and forwarded upstream.  Thanks in
advance.

Adam Richter

--- linux-2.6.29-rc5/drivers/usb/class/cdc-acm.c	2009-02-13 15:31:30.000000000 -0800
+++ linux-2.6.29-rc5.hummingbird-modem/drivers/usb/class/cdc-acm.c	2009-02-17 16:18:24.000000000 -0800
@@ -1376,6 +1376,13 @@
 	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 	},
+	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
+	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
+					   data interface instead of
+					   communications interface.
+					   Maybe we should define a new
+					   quirk for this. */
+	},
 
 	/* control interfaces with various AT-command sets */
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,



      
--- linux-2.6.29-rc5/drivers/usb/class/cdc-acm.c	2009-02-13 15:31:30.000000000 -0800
+++ linux-2.6.29-rc5.hummingbird-modem/drivers/usb/class/cdc-acm.c	2009-02-17 16:18:24.000000000 -0800
@@ -1376,6 +1376,13 @@
 	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 	},
+	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
+	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
+					   data interface instead of
+					   communications interface.
+					   Maybe we should define a new
+					   quirk for this. */
+	},
 
 	/* control interfaces with various AT-command sets */
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux