aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hid/usbhid/hid-quirks.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 9287a9e684e5..c4fdccdda858 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -447,6 +447,34 @@ static const struct hid_blacklist {
447 447
448 { 0, 0 } 448 { 0, 0 }
449}; 449};
450/**
451* usbhid_exists_squirk: return any static quirks for a USB HID device
452* @idVendor: the 16-bit USB vendor ID, in native byteorder
453* @idProduct: the 16-bit USB product ID, in native byteorder
454*
455* Description:
456* Given a USB vendor ID and product ID, return a pointer to
457* the hid_blacklist entry associated with that device.
458*
459* Returns: pointer if quirk found, or NULL if no quirks found.
460*/
461static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
462 const u16 idProduct)
463{
464 const struct hid_blacklist *bl_entry = NULL;
465 int n = 0;
466
467 for (; hid_blacklist[n].idVendor; n++)
468 if (hid_blacklist[n].idVendor == idVendor &&
469 hid_blacklist[n].idProduct == idProduct)
470 bl_entry = &hid_blacklist[n];
471
472 if (bl_entry != NULL)
473 dbg("Found squirk 0x%x for USB HID vendor 0x%hx prod 0x%hx\n",
474 bl_entry->quirks, bl_entry->idVendor,
475 bl_entry->idProduct);
476 return bl_entry;
477}
450 478
451/** 479/**
452 * usbhid_lookup_quirk: return any quirks associated with a USB HID device 480 * usbhid_lookup_quirk: return any quirks associated with a USB HID device
@@ -462,7 +490,7 @@ static const struct hid_blacklist {
462u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct) 490u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct)
463{ 491{
464 u32 quirks = 0; 492 u32 quirks = 0;
465 int n = 0; 493 const struct hid_blacklist *bl_entry = NULL;
466 494
467 /* Ignore all Wacom devices */ 495 /* Ignore all Wacom devices */
468 if (idVendor == USB_VENDOR_ID_WACOM) 496 if (idVendor == USB_VENDOR_ID_WACOM)
@@ -474,10 +502,9 @@ u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct)
474 idProduct <= USB_DEVICE_ID_CODEMERCS_IOW_LAST) 502 idProduct <= USB_DEVICE_ID_CODEMERCS_IOW_LAST)
475 return HID_QUIRK_IGNORE; 503 return HID_QUIRK_IGNORE;
476 504
477 for (; hid_blacklist[n].idVendor; n++) 505 bl_entry = usbhid_exists_squirk(idVendor, idProduct);
478 if (hid_blacklist[n].idVendor == idVendor && 506 if (bl_entry)
479 hid_blacklist[n].idProduct == idProduct) 507 quirks = bl_entry->quirks;
480 quirks = hid_blacklist[n].quirks;
481
482 return quirks; 508 return quirks;
483} 509}
510