ucom0: could not set data multiplex mode

M. Warner Losh imp at bsdimp.com
Thu May 31 07:04:55 UTC 2007


In message: <20070531054845.GA22380 at zone3000.net>
            Nikolay Pavlov <quetzal at zone3000.net> writes:
: On Monday, 28 May 2007 at 12:39:44 +0300, Nikolay Pavlov wrote:
: > Hi folks. 
: > I have an issue with CCU-550 CDMA modem
: > (http://www.cmotech.com/eproduct6-1.htm) on recent current. 
: > Every time i am reattaching it i see this error:
: > ucom0: could not set data multiplex mode 
: > 
: > So in order to work with it i have to reboot after each detache
: > procedure. The only known workaround for this is to delete the 
: > "goto bad;" code in /usr/src/sys/dev/usb/umodem.c:
: > 
: >         printf("%s: could not set data multiplex mode\n",
: >             devname);
: >         goto bad;
: > 
: > Could someone comment on this?
: > 
: > P.S. Please cc me, becuase i am not subscribe to freebsd-usb or
: > freebsd-mobile
: > 
: 
: May be i should send this to maintainer..?

I thought that NetBSD did something clever in this condition, but it
doesn't.  Try adding the device to usb_quirks.c.  You'll need an entry
like the following:

 { USB_VENDOR_METRICOM, USB_PRODUCT_METRICOM_RICOCHET_GS,
 	0x100, { UQ_ASSUME_CM_OVER_DATA }},

for whatever values your CCU-550 CDMA modem has.  alternatively, you
could try the following patch, which may be lame:

Index: umodem.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/usb/umodem.c,v
retrieving revision 1.60
diff -u -r1.60 umodem.c
--- umodem.c	7 Sep 2006 00:06:42 -0000	1.60
+++ umodem.c	31 May 2007 07:03:49 -0000
@@ -279,7 +279,6 @@
 	usb_cdc_cm_descriptor_t *cmd;
 	char *devinfo = NULL;
 	const char *devname;
-	usbd_status err;
 	int data_ifcno;
 	int i;
 	struct ucom_softc *ucom;
@@ -373,16 +372,8 @@
 	} else {
 		if (sc->sc_cm_cap & USB_CDC_CM_OVER_DATA) {
 			if (sc->sc_acm_cap & USB_CDC_ACM_HAS_FEATURE)
-				err = umodem_set_comm_feature(sc,
-				    UCDC_ABSTRACT_STATE, UCDC_DATA_MULTIPLEXED);
-			else
-				err = 0;
-			if (err) {
-				printf("%s: could not set data multiplex mode\n",
-				    devname);
-				goto bad;
-			}
-			sc->sc_cm_over_data = 1;
+				umodem_set_comm_feature(sc,
+				    UCDC_ABSTRACT_STATE, UCDC_DATA_MULTIPLEXED);			sc->sc_cm_over_data = 1;
 		}
 	}
 

this patch just feels wrong to me, but I suspect it will just work.


Warner


More information about the freebsd-usb mailing list