svn commit: r201302 - in stable/8/sys/dev/usb: . quirk serial

Andrew Thompson thompsa at FreeBSD.org
Thu Dec 31 00:08:18 UTC 2009


Author: thompsa
Date: Thu Dec 31 00:08:17 2009
New Revision: 201302
URL: http://svn.freebsd.org/changeset/base/201302

Log:
  MFC r200395
  
   Add a quirk for the Curitel UM175 where setting multiplexing for call
   management over the data endpoint causes communication to die.
  
   Take this one step further and model it on the existing NetBSD quirk and import
   other device IDs from them.
  
  Obtained from:	NetBSD

Modified:
  stable/8/sys/dev/usb/quirk/usb_quirk.c
  stable/8/sys/dev/usb/quirk/usb_quirk.h
  stable/8/sys/dev/usb/serial/umodem.c
  stable/8/sys/dev/usb/usbdevs
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/dev/usb/quirk/usb_quirk.c
==============================================================================
--- stable/8/sys/dev/usb/quirk/usb_quirk.c	Thu Dec 31 00:07:37 2009	(r201301)
+++ stable/8/sys/dev/usb/quirk/usb_quirk.c	Thu Dec 31 00:08:17 2009	(r201302)
@@ -125,6 +125,24 @@ static struct usb_quirk_entry usb_quirks
 	/* MS keyboards do weird things */
 	{USB_QUIRK_ENTRY(USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE, 0x0000, 0xFFFF, UQ_MS_LEADING_BYTE, UQ_NONE)},
 	{USB_QUIRK_ENTRY(USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24X, 0x0000, 0xFFFF, UQ_KBD_IGNORE, UQ_HID_IGNORE, UQ_NONE)},
+	/* umodem(4) device quirks */
+	{USB_QUIRK_ENTRY(USB_VENDOR_METRICOM, USB_PRODUCT_METRICOM_RICOCHET_GS,
+	    0x100, 0x100, UQ_ASSUME_CM_OVER_DATA)},
+	{USB_QUIRK_ENTRY(USB_VENDOR_SANYO, USB_PRODUCT_SANYO_SCP4900,
+	    0x000, 0x000, UQ_ASSUME_CM_OVER_DATA)},
+	{USB_QUIRK_ENTRY(USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_T720C,
+	    0x001, 0x001, UQ_ASSUME_CM_OVER_DATA)},
+	{USB_QUIRK_ENTRY(USB_VENDOR_EICON, USB_PRODUCT_EICON_DIVA852,
+	    0x100, 0x100, UQ_ASSUME_CM_OVER_DATA)},
+	{USB_QUIRK_ENTRY(USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_ES75,
+	    0x000, 0x000, UQ_ASSUME_CM_OVER_DATA)},
+	{USB_QUIRK_ENTRY(USB_VENDOR_QUALCOMM, USB_PRODUCT_QUALCOMM_CDMA_MSM,
+	    0x0000, 0xFFFF, UQ_ASSUME_CM_OVER_DATA)},
+	{USB_QUIRK_ENTRY(USB_VENDOR_QUALCOMM2, USB_PRODUCT_QUALCOMM2_CDMA_MSM,
+	    0x0000, 0xFFFF, UQ_ASSUME_CM_OVER_DATA)},
+	{USB_QUIRK_ENTRY(USB_VENDOR_CURITEL, USB_PRODUCT_CURITEL_UM175,
+	    0x0000, 0xFFFF, UQ_ASSUME_CM_OVER_DATA)},
+
 };
 
 static const char *usb_quirk_str[USB_QUIRK_MAX] = {
@@ -152,6 +170,7 @@ static const char *usb_quirk_str[USB_QUI
 	[UQ_CFG_INDEX_3]	= "UQ_CFG_INDEX_3",
 	[UQ_CFG_INDEX_4]	= "UQ_CFG_INDEX_4",
 	[UQ_CFG_INDEX_0]	= "UQ_CFG_INDEX_0",
+	[UQ_ASSUME_CM_OVER_DATA]= "UQ_ASSUME_CM_OVER_DATA",
 };
 
 /*------------------------------------------------------------------------*

Modified: stable/8/sys/dev/usb/quirk/usb_quirk.h
==============================================================================
--- stable/8/sys/dev/usb/quirk/usb_quirk.h	Thu Dec 31 00:07:37 2009	(r201301)
+++ stable/8/sys/dev/usb/quirk/usb_quirk.h	Thu Dec 31 00:08:17 2009	(r201302)
@@ -53,6 +53,7 @@ enum {	/* keep in sync with usb_quirk_st
 	UQ_CFG_INDEX_3,		/* select configuration index 3 by default */
 	UQ_CFG_INDEX_4,		/* select configuration index 4 by default */
 	UQ_CFG_INDEX_0,		/* select configuration index 0 by default */
+	UQ_ASSUME_CM_OVER_DATA,	/* modem device breaks on cm over data */
 	USB_QUIRK_MAX
 };
 

Modified: stable/8/sys/dev/usb/serial/umodem.c
==============================================================================
--- stable/8/sys/dev/usb/serial/umodem.c	Thu Dec 31 00:07:37 2009	(r201301)
+++ stable/8/sys/dev/usb/serial/umodem.c	Thu Dec 31 00:08:17 2009	(r201302)
@@ -112,6 +112,7 @@ __FBSDID("$FreeBSD$");
 #define	USB_DEBUG_VAR umodem_debug
 #include <dev/usb/usb_debug.h>
 #include <dev/usb/usb_process.h>
+#include <dev/usb/quirk/usb_quirk.h>
 
 #include <dev/usb/serial/usb_serial.h>
 
@@ -349,16 +350,20 @@ umodem_attach(device_t dev)
 		}
 	}
 
-	if (sc->sc_cm_cap & USB_CDC_CM_OVER_DATA) {
-		if (sc->sc_acm_cap & USB_CDC_ACM_HAS_FEATURE) {
+	if (usb_test_quirk(uaa, UQ_ASSUME_CM_OVER_DATA)) {
+		sc->sc_cm_over_data = 1;
+	} else {
+		if (sc->sc_cm_cap & USB_CDC_CM_OVER_DATA) {
+			if (sc->sc_acm_cap & USB_CDC_ACM_HAS_FEATURE) {
 
-			error = umodem_set_comm_feature
-			    (uaa->device, sc->sc_ctrl_iface_no,
-			    UCDC_ABSTRACT_STATE, UCDC_DATA_MULTIPLEXED);
+				error = umodem_set_comm_feature
+				(uaa->device, sc->sc_ctrl_iface_no,
+				 UCDC_ABSTRACT_STATE, UCDC_DATA_MULTIPLEXED);
 
-			/* ignore any errors */
+				/* ignore any errors */
+			}
+			sc->sc_cm_over_data = 1;
 		}
-		sc->sc_cm_over_data = 1;
 	}
 	error = usbd_transfer_setup(uaa->device,
 	    sc->sc_iface_index, sc->sc_xfer,

Modified: stable/8/sys/dev/usb/usbdevs
==============================================================================
--- stable/8/sys/dev/usb/usbdevs	Thu Dec 31 00:07:37 2009	(r201301)
+++ stable/8/sys/dev/usb/usbdevs	Thu Dec 31 00:08:17 2009	(r201302)
@@ -1212,6 +1212,9 @@ product DRESDENELEKTRONIK WIRELESSHANDHE
 /* Dynastream Innovations */
 product DYNASTREAM ANTDEVBOARD	0x1003	ANT dev board
 
+/* Eicon Networks */
+product EICON DIVA852		0x4905	Diva 852 ISDN TA
+
 /* EIZO products */
 product EIZO HUB		0x0000	hub
 product EIZO MONITOR		0x0001	monitor
@@ -1826,6 +1829,7 @@ product MOSCHIP MCS7830		0x7830	MCS7830 
 /* Motorola products */
 product MOTOROLA MC141555	0x1555	MC141555 hub controller
 product MOTOROLA SB4100		0x4100	SB4100 USB Cable Modem
+product MOTOROLA2 T720C		0x2822	T720c
 product MOTOROLA2 A41XV32X	0x2a22	A41x/V32x Mobile Phones
 product MOTOROLA2 E398		0x4810	E398 Mobile Phone
 product MOTOROLA2 USBLAN	0x600c	USBLAN


More information about the svn-src-stable-8 mailing list