Hi,

I believe that following patch is good for us because my USB modem device
is bad information and it should be treated as special case.

Index: sys/dev/usb/umodem.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/umodem.c,v
retrieving revision 1.66
diff -u -r1.66 umodem.c
--- sys/dev/usb/umodem.c        6 Apr 2014 02:01:43 -0000       1.66
+++ sys/dev/usb/umodem.c        5 Apr 2015 00:49:30 -0000
@@ -81,6 +81,11 @@
        NULL,
 };
 
+Static const struct usb_devno umodem_devs[] = {
+       { USB_VENDOR_CONEXANT, USB_PRODUCT_CONEXANT_MODEM_1},
+};
+#define umodem_lookup(v, p) usb_lookup(umodem_devs, v, p)
+
 int             umodem_match(device_t, cfdata_t, void *);
 void            umodem_attach(device_t, device_t, void *);
 int             umodem_detach(device_t, int);
@@ -97,22 +102,24 @@
        struct usbif_attach_arg *uaa = aux;
        usb_interface_descriptor_t *id;
        int cm, acm;
+       int ret = UMATCH_NONE;
 
-       id = usbd_get_interface_descriptor(uaa->iface);
-       if (uaa->subclass != UISUBCLASS_ABSTRACT_CONTROL_MODEL &&
-           (id->bInterfaceClass == UICLASS_CDC_DATA &&
-            id->bInterfaceSubClass == UISUBCLASS_DATA))
-               return (UMATCH_IFACECLASS_IFACESUBCLASS);
-
-       if (uaa->class != UICLASS_CDC ||
-           uaa->subclass != UISUBCLASS_ABSTRACT_CONTROL_MODEL ||
-           !(uaa->proto == UIPROTO_CDC_NOCLASS || uaa->proto == 
UIPROTO_CDC_AT))
-               return (UMATCH_NONE);
+       if (umodem_lookup(uaa->vendor, uaa->product))
+               ret = UMATCH_VENDOR_PRODUCT;
 
+       if (uaa->class == UICLASS_CDC &&
+           uaa->subclass == UISUBCLASS_ABSTRACT_CONTROL_MODEL &&
+           uaa->proto == UIPROTO_CDC_AT)
+               ret = UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO;
+
+       if (ret == UMATCH_NONE)
+               return UMATCH_NONE;
+
+       id = usbd_get_interface_descriptor(uaa->iface);
        if (umodem_get_caps(uaa->device, &cm, &acm, id) == -1)
                return (UMATCH_NONE);
 
-       return (UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO);
+       return (ret);
 }
 
 void 
Index: sys/dev/usb/usbdevs
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs,v
retrieving revision 1.693
diff -u -r1.693 usbdevs
--- sys/dev/usb/usbdevs 17 Mar 2015 08:14:30 -0000      1.693
+++ sys/dev/usb/usbdevs 5 Apr 2015 00:49:31 -0000
@@ -3345,6 +3345,7 @@
 /* Conexant */
 product CONEXANT PRISM_GT_1    0x2000  PrismGT USB 2.0 WLAN
 product CONEXANT PRISM_GT_2    0x2002  PrismGT USB 2.0 WLAN
+product CONEXANT MODEM_1       0x1329  USB Modem
 
 /* Yamaha products */
 product YAMAHA UX256           0x1000  UX256 MIDI I/F
Index: sys/dev/usb/usbdevs.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs.h,v
retrieving revision 1.685
diff -u -r1.685 usbdevs.h
--- sys/dev/usb/usbdevs.h       17 Mar 2015 08:15:48 -0000      1.685
+++ sys/dev/usb/usbdevs.h       5 Apr 2015 00:49:31 -0000
@@ -1,10 +1,10 @@
-/*     $NetBSD: usbdevs.h,v 1.685 2015/03/17 08:15:48 macallan Exp $   */
+/*     $NetBSD$        */
 
 /*
  * THIS FILE AUTOMATICALLY GENERATED.  DO NOT EDIT.
  *
  * generated from:
- *     NetBSD: usbdevs,v 1.692 2015/03/15 01:37:47 nonaka Exp
+ *     NetBSD: usbdevs,v 1.693 2015/03/17 08:14:30 macallan Exp
  */
 
 /*
@@ -3352,6 +3352,7 @@
 /* Conexant */
 #define        USB_PRODUCT_CONEXANT_PRISM_GT_1 0x2000          /* PrismGT USB 
2.0 WLAN */
 #define        USB_PRODUCT_CONEXANT_PRISM_GT_2 0x2002          /* PrismGT USB 
2.0 WLAN */
+#define        USB_PRODUCT_CONEXANT_MODEM_1    0x1329          /* USB Modem */
 
 /* Yamaha products */
 #define        USB_PRODUCT_YAMAHA_UX256        0x1000          /* UX256 MIDI 
I/F */
Index: sys/dev/usb/usbdevs_data.h
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/usbdevs_data.h,v
retrieving revision 1.686
diff -u -r1.686 usbdevs_data.h
--- sys/dev/usb/usbdevs_data.h  17 Mar 2015 08:15:48 -0000      1.686
+++ sys/dev/usb/usbdevs_data.h  5 Apr 2015 00:49:31 -0000
@@ -1,10 +1,10 @@
-/*     $NetBSD: usbdevs_data.h,v 1.686 2015/03/17 08:15:48 macallan Exp $      
*/
+/*     $NetBSD$        */
 
 /*
  * THIS FILE AUTOMATICALLY GENERATED.  DO NOT EDIT.
  *
  * generated from:
- *     NetBSD: usbdevs,v 1.692 2015/03/15 01:37:47 nonaka Exp
+ *     NetBSD: usbdevs,v 1.693 2015/03/17 08:14:30 macallan Exp
  */
 
 /*
@@ -4510,6 +4510,8 @@
            5167, 4710, 5175, 5140, 0,
            USB_VENDOR_CONEXANT, USB_PRODUCT_CONEXANT_PRISM_GT_2, 
            5167, 4710, 5175, 5140, 0,
+           USB_VENDOR_CONEXANT, USB_PRODUCT_CONEXANT_MODEM_1, 
+           4710, 4845, 0,
            USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_UX256, 
            18766, 15980, 15971, 0,
            USB_VENDOR_YAMAHA, USB_PRODUCT_YAMAHA_MU1000, 
@@ -5280,7 +5282,7 @@
            "GNU\0" /* 1 refs @ 4689 */
            "USRP\0" /* 2 refs @ 4693 */
            "HomeConnect\0" /* 4 refs @ 4698 */
-           "USB\0" /* 188 refs @ 4710 */
+           "USB\0" /* 189 refs @ 4710 */
            "Bluetooth\0" /* 17 refs @ 4714 */
            "Adapter\0" /* 71 refs @ 4724 */
            "3C19250\0" /* 1 refs @ 4732 */
@@ -5296,7 +5298,7 @@
            "3C460B\0" /* 1 refs @ 4812 */
            "3CRUSB10075\0" /* 1 refs @ 4819 */
            "OfficeConnect\0" /* 1 refs @ 4831 */
-           "Modem\0" /* 14 refs @ 4845 */
+           "Modem\0" /* 15 refs @ 4845 */
            "ISDN\0" /* 3 refs @ 4851 */
            "TA\0" /* 2 refs @ 4856 */
            "camera\0" /* 5 refs @ 4859 */

--
Ryo ONODERA // ryo...@yk.rim.or.jp
PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3

Reply via email to