umodem: add quirk to ignore CDC_CM descriptor
Some devices have CDC_CM descriptors that would point us to the wrong interfaces. Add a quirk to ignore those (prefering the CDC_UNION descriptor effectively) Reviewed by: manu MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Differential Revision: https://reviews.freebsd.org/D37942
This commit is contained in:
parent
896f556205
commit
73c3e8b1de
@ -100,6 +100,8 @@ select configuration index 4 by default
|
||||
select configuration index 0 by default
|
||||
.It UQ_ASSUME_CM_OVER_DATA
|
||||
assume cm over data feature
|
||||
.It UQ_IGNORE_CDC_CM
|
||||
ignore cm descriptor
|
||||
.It UQ_WMT_IGNORE
|
||||
device should be ignored by wmt driver
|
||||
.El
|
||||
|
@ -662,6 +662,7 @@ static const char *usb_quirk_str[USB_QUIRK_MAX] = {
|
||||
[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",
|
||||
[UQ_IGNORE_CDC_CM] = "UQ_IGNORE_CDC_CM",
|
||||
[UQ_MSC_NO_TEST_UNIT_READY] = "UQ_MSC_NO_TEST_UNIT_READY",
|
||||
[UQ_MSC_NO_RS_CLEAR_UA] = "UQ_MSC_NO_RS_CLEAR_UA",
|
||||
[UQ_MSC_NO_START_STOP] = "UQ_MSC_NO_START_STOP",
|
||||
|
@ -66,6 +66,7 @@ enum {
|
||||
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, /* assume cm over data feature */
|
||||
UQ_IGNORE_CDC_CM, /* ignore cm descriptor */
|
||||
|
||||
/*
|
||||
* USB Mass Storage Quirks. See "storage/umass.c" for a
|
||||
|
@ -359,7 +359,9 @@ umodem_attach(device_t dev)
|
||||
|
||||
/* get the data interface number */
|
||||
|
||||
cmd = umodem_get_desc(uaa, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
|
||||
cmd = NULL;
|
||||
if (!usb_test_quirk(uaa, UQ_IGNORE_CDC_CM))
|
||||
cmd = umodem_get_desc(uaa, UDESC_CS_INTERFACE, UDESCSUB_CDC_CM);
|
||||
|
||||
if ((cmd == NULL) || (cmd->bLength < sizeof(*cmd))) {
|
||||
cud = usbd_find_descriptor(uaa->device, NULL,
|
||||
|
Loading…
Reference in New Issue
Block a user