|
@@ -49,13 +49,22 @@ static const u32 udlfb_info_flags = FBINFO_DEFAULT | FBINFO_READS_FAST |
|
|
|
FBINFO_HWACCEL_COPYAREA | FBINFO_MISC_ALWAYS_SETPAR;
|
|
|
|
|
|
/*
|
|
|
- * There are many DisplayLink-based products, all with unique PIDs. We are able
|
|
|
- * to support all volume ones (circa 2009) with a single driver, so we match
|
|
|
- * globally on VID. TODO: Probe() needs to detect when we might be running
|
|
|
- * "future" chips, and bail on those, so a compatible driver can match.
|
|
|
+ * There are many DisplayLink-based graphics products, all with unique PIDs.
|
|
|
+ * So we match on DisplayLink's VID + Vendor-Defined Interface Class (0xff)
|
|
|
+ * We also require a match on SubClass (0x00) and Protocol (0x00),
|
|
|
+ * which is compatible with all known USB 2.0 era graphics chips and firmware,
|
|
|
+ * but allows DisplayLink to increment those for any future incompatible chips
|
|
|
*/
|
|
|
static struct usb_device_id id_table[] = {
|
|
|
- {.idVendor = 0x17e9, .match_flags = USB_DEVICE_ID_MATCH_VENDOR,},
|
|
|
+ {.idVendor = 0x17e9,
|
|
|
+ .bInterfaceClass = 0xff,
|
|
|
+ .bInterfaceSubClass = 0x00,
|
|
|
+ .bInterfaceProtocol = 0x00,
|
|
|
+ .match_flags = USB_DEVICE_ID_MATCH_VENDOR |
|
|
|
+ USB_DEVICE_ID_MATCH_INT_CLASS |
|
|
|
+ USB_DEVICE_ID_MATCH_INT_SUBCLASS |
|
|
|
+ USB_DEVICE_ID_MATCH_INT_PROTOCOL,
|
|
|
+ },
|
|
|
{},
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(usb, id_table);
|