Expand USB quirks and hardware validation

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-17 13:32:32 +01:00
parent 07a9238e06
commit 6f93b6ed43
7 changed files with 3395 additions and 47 deletions
@@ -69,18 +69,35 @@ bitflags::bitflags! {
bitflags::bitflags! {
/// Flags for USB device quirks.
///
/// Mirrors Linux's `USB_QUIRK_*` defines.
/// Mirrors Linux's `USB_QUIRK_*` defines from `include/linux/usb/quirks.h`.
/// Flags 08 are the original Red Bear set. Flags 921 are mined from
/// Linux 7.0 (`drivers/usb/core/quirks.c`, released 2026-04-13).
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct UsbQuirkFlags: u64 {
const NO_STRING_FETCH = 1 << 0;
const RESET_DELAY = 1 << 1;
const NO_USB3 = 1 << 2;
const NO_SET_CONFIG = 1 << 3;
const NO_SUSPEND = 1 << 4;
const NEED_RESET = 1 << 5;
const BAD_DESCRIPTOR = 1 << 6;
const NO_LPM = 1 << 7;
const NO_U1U2 = 1 << 8;
// Original Red Bear flags (08)
const NO_STRING_FETCH = 1 << 0; // USB_QUIRK_STRING_FETCH_255
const RESET_DELAY = 1 << 1; // USB_QUIRK_DELAY_INIT
const NO_USB3 = 1 << 2; // no Linux equivalent (Red Bear-specific)
const NO_SET_CONFIG = 1 << 3; // USB_QUIRK_NO_SET_INTF (SET_INTERFACE)
const NO_SUSPEND = 1 << 4; // USB_QUIRK_DISCONNECT_SUSPEND
const NEED_RESET = 1 << 5; // USB_QUIRK_RESET_RESUME
const BAD_DESCRIPTOR = 1 << 6; // USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL
const NO_LPM = 1 << 7; // USB_QUIRK_NO_LPM
const NO_U1U2 = 1 << 8; // USB_QUIRK_NO_U1_U2
// Mined from Linux 7.0 (922)
const NO_SET_INTF = 1 << 9; // USB_QUIRK_NO_SET_INTF
const CONFIG_INTF_STRINGS = 1 << 10; // USB_QUIRK_CONFIG_INTF_STRINGS
const NO_RESET = 1 << 11; // USB_QUIRK_RESET (device can't be reset)
const HONOR_BNUMINTERFACES = 1 << 12; // USB_QUIRK_HONOR_BNUMINTERFACES
const DEVICE_QUALIFIER = 1 << 13; // USB_QUIRK_DEVICE_QUALIFIER
const IGNORE_REMOTE_WAKEUP = 1 << 14; // USB_QUIRK_IGNORE_REMOTE_WAKEUP
const DELAY_CTRL_MSG = 1 << 15; // USB_QUIRK_DELAY_CTRL_MSG
const HUB_SLOW_RESET = 1 << 16; // USB_QUIRK_HUB_SLOW_RESET
const NO_BOS = 1 << 17; // USB_QUIRK_NO_BOS
const SHORT_SET_ADDR_TIMEOUT = 1 << 18; // USB_QUIRK_SHORT_SET_ADDRESS_REQ_TIMEOUT
const FORCE_ONE_CONFIG = 1 << 19; // USB_QUIRK_FORCE_ONE_CONFIG
const ENDPOINT_IGNORE = 1 << 20; // USB_QUIRK_ENDPOINT_IGNORE
const LINEAR_FRAME_BINTERVAL = 1 << 21; // USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL
}
}
@@ -126,6 +126,25 @@ const USB_FLAG_NAMES: &[(&str, UsbQuirkFlags)] = &[
("bad_descriptor", UsbQuirkFlags::BAD_DESCRIPTOR),
("no_lpm", UsbQuirkFlags::NO_LPM),
("no_u1u2", UsbQuirkFlags::NO_U1U2),
("no_set_intf", UsbQuirkFlags::NO_SET_INTF),
("config_intf_strings", UsbQuirkFlags::CONFIG_INTF_STRINGS),
("no_reset", UsbQuirkFlags::NO_RESET),
("honor_bnuminterfaces", UsbQuirkFlags::HONOR_BNUMINTERFACES),
("device_qualifier", UsbQuirkFlags::DEVICE_QUALIFIER),
("ignore_remote_wakeup", UsbQuirkFlags::IGNORE_REMOTE_WAKEUP),
("delay_ctrl_msg", UsbQuirkFlags::DELAY_CTRL_MSG),
("hub_slow_reset", UsbQuirkFlags::HUB_SLOW_RESET),
("no_bos", UsbQuirkFlags::NO_BOS),
(
"short_set_addr_timeout",
UsbQuirkFlags::SHORT_SET_ADDR_TIMEOUT,
),
("force_one_config", UsbQuirkFlags::FORCE_ONE_CONFIG),
("endpoint_ignore", UsbQuirkFlags::ENDPOINT_IGNORE),
(
"linear_frame_binterval",
UsbQuirkFlags::LINEAR_FRAME_BINTERVAL,
),
];
fn flag_from_name<F: Copy>(name: &str, mapping: &[(&str, F)]) -> Option<F> {
@@ -1,51 +1,752 @@
use super::{UsbQuirkEntry, UsbQuirkFlags, PCI_QUIRK_ANY_ID};
const F_NO_SUSP_RESET: UsbQuirkFlags = UsbQuirkFlags::from_bits_truncate(
UsbQuirkFlags::NO_SUSPEND.bits() | UsbQuirkFlags::NEED_RESET.bits(),
const F_00: UsbQuirkFlags = UsbQuirkFlags::from_bits_truncate(
UsbQuirkFlags::NEED_RESET.bits() | UsbQuirkFlags::NO_LPM.bits(),
);
const F_BAD_DESC_NO_CFG: UsbQuirkFlags = UsbQuirkFlags::from_bits_truncate(
UsbQuirkFlags::BAD_DESCRIPTOR.bits() | UsbQuirkFlags::NO_SET_CONFIG.bits(),
const F_01: UsbQuirkFlags = UsbQuirkFlags::from_bits_truncate(
UsbQuirkFlags::NO_LPM.bits() | UsbQuirkFlags::RESET_DELAY.bits(),
);
const F_02: UsbQuirkFlags = UsbQuirkFlags::from_bits_truncate(
UsbQuirkFlags::DELAY_CTRL_MSG.bits() | UsbQuirkFlags::RESET_DELAY.bits(),
);
const F_03: UsbQuirkFlags = UsbQuirkFlags::from_bits_truncate(
UsbQuirkFlags::NO_SUSPEND.bits() | UsbQuirkFlags::NEED_RESET.bits(),
);
pub const USB_QUIRK_TABLE: &[UsbQuirkEntry] = &[
UsbQuirkEntry {
vendor: 0x0BDA,
product: 0x8153,
vendor: 0x0204,
product: 0x6025,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0218,
product: 0x0201,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x0218,
product: 0x0401,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x03F0,
product: 0x0701,
flags: UsbQuirkFlags::NO_STRING_FETCH,
},
UsbQuirkEntry {
vendor: 0x0BDA,
product: 0x8156,
vendor: 0x03F0,
product: 0x3F40,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x03F0,
product: 0xA31D,
flags: UsbQuirkFlags::NO_SUSPEND,
},
UsbQuirkEntry {
vendor: 0x041E,
product: 0x3020,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0424,
product: 0x3503,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x045E,
product: 0x00E1,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x045E,
product: 0x0770,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x045E,
product: 0x07C6,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x046A,
product: 0x0023,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x0825,
flags: F_00,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x082D,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x0841,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x0843,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x085B,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x085C,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x0847,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x0848,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x0853,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x086C,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x08C1,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x08C2,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x08C3,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x08C5,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x08C6,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0x08C7,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0xC122,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x0471,
product: 0x0155,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x047F,
product: 0xC008,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x047F,
product: 0xC013,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x04B4,
product: 0x0526,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x04D8,
product: 0x000C,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x04E7,
product: 0x0009,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x04E7,
product: 0x0030,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x04E8,
product: 0x6601,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x04F3,
product: 0x0089,
flags: UsbQuirkFlags::DEVICE_QUALIFIER,
},
UsbQuirkEntry {
vendor: 0x04F3,
product: 0x009B,
flags: UsbQuirkFlags::DEVICE_QUALIFIER,
},
UsbQuirkEntry {
vendor: 0x04F3,
product: 0x010C,
flags: UsbQuirkFlags::DEVICE_QUALIFIER,
},
UsbQuirkEntry {
vendor: 0x04F3,
product: 0x0125,
flags: UsbQuirkFlags::DEVICE_QUALIFIER,
},
UsbQuirkEntry {
vendor: 0x04F3,
product: 0x016F,
flags: UsbQuirkFlags::DEVICE_QUALIFIER,
},
UsbQuirkEntry {
vendor: 0x04F3,
product: 0x0381,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x04F3,
product: 0x21B8,
flags: UsbQuirkFlags::DEVICE_QUALIFIER,
},
UsbQuirkEntry {
vendor: 0x0582,
product: 0x0007,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0582,
product: 0x0027,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x058F,
product: 0x9254,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x05AC,
product: 0x021A,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x05E3,
product: 0x0612,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x05CC,
product: 0x2267,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x05E3,
product: 0x0616,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x0638,
product: 0x0A13,
flags: UsbQuirkFlags::NO_STRING_FETCH,
},
UsbQuirkEntry {
vendor: 0x067B,
product: 0x2731,
flags: F_01,
},
UsbQuirkEntry {
vendor: 0x06A3,
product: 0x0006,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x06BD,
product: 0x0001,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x06F8,
product: 0x0804,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x06F8,
product: 0x3005,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x06F8,
product: 0xB000,
flags: UsbQuirkFlags::ENDPOINT_IGNORE,
},
UsbQuirkEntry {
vendor: 0x0763,
product: 0x0192,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0781,
product: 0x5583,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x0781,
product: 0x5591,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x0781,
product: 0x5596,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x0781,
product: 0x55A3,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x0781,
product: 0x55AE,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x07CA,
product: 0x2553,
flags: UsbQuirkFlags::NO_BOS,
},
UsbQuirkEntry {
vendor: 0x0853,
product: 0x011B,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x08EC,
product: 0x1000,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0904,
product: 0x6101,
flags: UsbQuirkFlags::LINEAR_FRAME_BINTERVAL,
},
UsbQuirkEntry {
vendor: 0x0904,
product: 0x6102,
flags: UsbQuirkFlags::LINEAR_FRAME_BINTERVAL,
},
UsbQuirkEntry {
vendor: 0x0904,
product: 0x6103,
flags: UsbQuirkFlags::LINEAR_FRAME_BINTERVAL,
},
UsbQuirkEntry {
vendor: 0x090C,
product: 0x1000,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x090C,
product: 0x2000,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x0926,
product: 0x0202,
flags: UsbQuirkFlags::ENDPOINT_IGNORE,
},
UsbQuirkEntry {
vendor: 0x0926,
product: 0x0208,
flags: UsbQuirkFlags::ENDPOINT_IGNORE,
},
UsbQuirkEntry {
vendor: 0x0926,
product: 0x3333,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x0951,
product: 0x1666,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x0930,
product: 0x1408,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x0955,
product: 0x7018,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0955,
product: 0x7019,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0955,
product: 0x7418,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0955,
product: 0x7721,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0955,
product: 0x7C18,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0955,
product: 0x7E19,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0955,
product: 0x7F21,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0971,
product: 0x2000,
flags: UsbQuirkFlags::NO_SET_INTF,
},
UsbQuirkEntry {
vendor: 0x09A1,
product: 0x0028,
flags: UsbQuirkFlags::DELAY_CTRL_MSG,
},
UsbQuirkEntry {
vendor: 0x0A5C,
product: 0x2021,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0A92,
product: 0x0091,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x0B05,
product: 0x17E0,
flags: UsbQuirkFlags::IGNORE_REMOTE_WAKEUP,
},
UsbQuirkEntry {
vendor: 0x0B05,
product: 0x1AB9,
flags: UsbQuirkFlags::NO_BOS,
},
UsbQuirkEntry {
vendor: 0x0BDA,
product: 0x0151,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x0BDA,
product: 0x0487,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x0BDA,
product: 0x8153,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x0C45,
product: 0x7056,
flags: UsbQuirkFlags::IGNORE_REMOTE_WAKEUP,
},
UsbQuirkEntry {
vendor: 0x0FD9,
product: 0x009B,
flags: UsbQuirkFlags::NO_BOS,
},
UsbQuirkEntry {
vendor: 0x0FCE,
product: 0x0DDE,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x10D6,
product: 0x2200,
flags: UsbQuirkFlags::NO_STRING_FETCH,
},
UsbQuirkEntry {
vendor: 0x1235,
product: 0x0061,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x1235,
product: 0x8211,
flags: UsbQuirkFlags::NO_SUSPEND,
},
UsbQuirkEntry {
vendor: 0x12D1,
product: 0x15BB,
flags: UsbQuirkFlags::NO_SUSPEND,
},
UsbQuirkEntry {
vendor: 0x12D1,
product: 0x15C1,
flags: UsbQuirkFlags::NO_SUSPEND,
},
UsbQuirkEntry {
vendor: 0x12D1,
product: 0x15C3,
flags: UsbQuirkFlags::NO_SUSPEND,
},
UsbQuirkEntry {
vendor: 0x1516,
product: 0x8628,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x1532,
product: 0x0116,
flags: UsbQuirkFlags::BAD_DESCRIPTOR,
},
UsbQuirkEntry {
vendor: 0x1532,
product: 0x0E05,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x17EF,
product: 0x1018,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x17EF,
product: 0x1019,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x17EF,
product: 0x720C,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x17EF,
product: 0x721E,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x17EF,
product: 0xA012,
flags: UsbQuirkFlags::NO_SUSPEND,
},
UsbQuirkEntry {
vendor: 0x17EF,
product: 0xA387,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x1908,
product: 0x1315,
flags: UsbQuirkFlags::HONOR_BNUMINTERFACES,
},
UsbQuirkEntry {
vendor: 0x1A0A,
product: 0x0200,
flags: UsbQuirkFlags::BAD_DESCRIPTOR,
},
UsbQuirkEntry {
vendor: 0x1A40,
product: 0x0101,
flags: UsbQuirkFlags::HUB_SLOW_RESET,
},
UsbQuirkEntry {
vendor: 0x1B1C,
product: 0x1B13,
flags: F_02,
},
UsbQuirkEntry {
vendor: 0x1B1C,
product: 0x1B15,
flags: F_02,
},
UsbQuirkEntry {
vendor: 0x1B1C,
product: 0x1B20,
flags: F_02,
},
UsbQuirkEntry {
vendor: 0x1B1C,
product: 0x1B33,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x1B1C,
product: 0x1B36,
flags: UsbQuirkFlags::RESET_DELAY,
},
UsbQuirkEntry {
vendor: 0x1B1C,
product: 0x1B38,
flags: F_02,
},
UsbQuirkEntry {
vendor: 0x1BC3,
product: 0x0003,
flags: UsbQuirkFlags::NO_SET_INTF,
},
UsbQuirkEntry {
vendor: 0x1C75,
product: 0x0204,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x1DE1,
product: 0xC102,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2109,
product: 0x2813,
vendor: 0x1EDB,
product: 0xBD3B,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2109,
product: 0x0815,
flags: UsbQuirkFlags::NO_U1U2,
vendor: 0x1EDB,
product: 0xBD4F,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x8087,
product: 0x0025,
flags: UsbQuirkFlags::NO_SUSPEND,
vendor: 0x1F75,
product: 0x0917,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2040,
product: 0x7200,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x2109,
product: 0x0711,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2386,
product: 0x3114,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2386,
product: 0x3119,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2386,
product: 0x350E,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2B89,
product: 0x5871,
flags: UsbQuirkFlags::NO_BOS,
},
UsbQuirkEntry {
vendor: 0x2C48,
product: 0x0132,
flags: UsbQuirkFlags::SHORT_SET_ADDR_TIMEOUT,
},
UsbQuirkEntry {
vendor: 0x2CA3,
product: 0x0031,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x2CE3,
product: 0x9563,
flags: UsbQuirkFlags::NO_LPM,
},
UsbQuirkEntry {
vendor: 0x32ED,
product: 0x0401,
flags: UsbQuirkFlags::NO_BOS,
},
UsbQuirkEntry {
vendor: 0x413C,
product: 0xB062,
flags: F_00,
},
UsbQuirkEntry {
vendor: 0x4296,
product: 0x7570,
flags: UsbQuirkFlags::CONFIG_INTF_STRINGS,
},
UsbQuirkEntry {
vendor: 0x5131,
product: 0x2007,
flags: UsbQuirkFlags::FORCE_ONE_CONFIG,
},
UsbQuirkEntry {
vendor: 0x8086,
product: 0xF1A5,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x17EF,
product: 0x602E,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x093A,
product: 0x2500,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x093A,
product: 0x2510,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x093A,
product: 0x2521,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x03F0,
product: 0x2B4A,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x046D,
product: 0xC05A,
flags: UsbQuirkFlags::NEED_RESET,
},
UsbQuirkEntry {
vendor: 0x8087,
product: 0x0A2B,
flags: F_NO_SUSP_RESET,
},
UsbQuirkEntry {
vendor: 0x0A12,
product: PCI_QUIRK_ANY_ID,
flags: F_BAD_DESC_NO_CFG,
flags: F_03,
},
];