Download raw body.
umsm(4): update matching of quectel devices
this updates the umsm match code for quectel devices.
it's based on information in the Quectel UMTS LTE 5G Linux USB Driver
User Guide V3.3 documentation, which is the latest version i can find.
it appears to work on EC200A (which benefits from the updated match
code) and EC25s (which was working before and still works now), but
wider testing can't hurt.
ok?
Index: umsm.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/umsm.c,v
diff -u -p -r1.127 umsm.c
--- umsm.c 23 May 2024 08:06:22 -0000 1.127
+++ umsm.c 14 Oct 2025 01:23:30 -0000
@@ -185,6 +185,7 @@ static const struct umsm_type umsm_devs[
{{ USB_VENDOR_QUECTEL, USB_PRODUCT_QUECTEL_EG12 }, 0},
{{ USB_VENDOR_QUECTEL, USB_PRODUCT_QUECTEL_EG20 }, 0},
{{ USB_VENDOR_QUECTEL, USB_PRODUCT_QUECTEL_BG95 }, 0},
+ {{ USB_VENDOR_QUECTEL, USB_PRODUCT_QUECTEL_EC200A }, 0},
{{ USB_VENDOR_QUECTEL, USB_PRODUCT_QUECTEL_RG5XXQ }, 0},
{{ USB_VENDOR_ZTE, USB_PRODUCT_ZTE_AC2746 }, 0},
@@ -356,12 +357,18 @@ umsm_match(struct device *parent, void *
/* See the Quectel LTE&5G Linux USB Driver User Guide */
} else if (uaa->vendor == USB_VENDOR_QUECTEL) {
/* Some interfaces can be used as network devices */
- if (id->bInterfaceClass != UICLASS_VENDOR)
+ if (id->bInterfaceClass != UICLASS_VENDOR ||
+ id->bInterfaceSubClass == 0x42)
return UMATCH_NONE;
- /* Interface 4 can be used as a network device */
- if (uaa->ifaceno >= 4)
- return UMATCH_NONE;
+ if ((uaa->product & 0xf000) == 0x0000) {
+ /* Interface 4 can be used as a network device */
+ if (uaa->ifaceno == 4 &&
+ id->bNumEndpoints == 3 &&
+ id->bInterfaceSubClass == UICLASS_VENDOR &&
+ id->bInterfaceProtocol == UIPROTO_DATA_VENDOR)
+ return UMATCH_NONE;
+ }
}
return UMATCH_VENDOR_IFACESUBCLASS;
umsm(4): update matching of quectel devices