aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiels Skou Olsen <nolsen@jabra.com>2017-10-04 06:29:57 -0400
committerJiri Kosina <jkosina@suse.cz>2017-11-21 06:54:58 -0500
commitd5158e020c45936d0ea5a1ce1e49a45da6e76f44 (patch)
treeaf2e5652b8943ddd5dc23a0d6c2343b88e00f9c9
parente04a0442d33b8cf183bba38646447b891bb02123 (diff)
HID: Ignore Jabra HID interface based on firmware version
Two Jabra speakerphone devices were added to the ignore list in 2013, because the device HID interfaces didn't work well with kernel usbhid driver, and could cause volume key event storm. See the original commit: Commit 31b9779cb292 ("HID: ignore Jabra speakerphones HID interface") Modify hid_lookup_quirk() to consider the firmware version of these two devices, so that only versions older than a known good version are ignored. Signed-off-by: Niels Skou Olsen <nolsen@jabra.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--drivers/hid/hid-quirks.c16
-rw-r--r--drivers/hid/usbhid/hid-core.c1
2 files changed, 15 insertions, 2 deletions
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index aa6a7f877ced..d57a22432957 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -788,8 +788,6 @@ static const struct hid_device_id hid_ignore_list[] = {
788 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) }, 788 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) },
789 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) }, 789 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) },
790 { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) }, 790 { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) },
791 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_SPEAK_410) },
792 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_SPEAK_510) },
793 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_GN9350E) }, 791 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_GN9350E) },
794 { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) }, 792 { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) },
795 { HID_USB_DEVICE(USB_VENDOR_ID_KWORLD, USB_DEVICE_ID_KWORLD_RADIO_FM700) }, 793 { HID_USB_DEVICE(USB_VENDOR_ID_KWORLD, USB_DEVICE_ID_KWORLD_RADIO_FM700) },
@@ -1235,6 +1233,20 @@ unsigned long hid_lookup_quirk(const struct hid_device *hdev)
1235 hdev->product <= USB_DEVICE_ID_NCR_LAST) 1233 hdev->product <= USB_DEVICE_ID_NCR_LAST)
1236 return HID_QUIRK_NO_INIT_REPORTS; 1234 return HID_QUIRK_NO_INIT_REPORTS;
1237 1235
1236 /* These devices must be ignored if version (bcdDevice) is too old */
1237 if (hdev->bus == BUS_USB && hdev->vendor == USB_VENDOR_ID_JABRA) {
1238 switch (hdev->product) {
1239 case USB_DEVICE_ID_JABRA_SPEAK_410:
1240 if (hdev->version < 0x0111)
1241 return HID_QUIRK_IGNORE;
1242 break;
1243 case USB_DEVICE_ID_JABRA_SPEAK_510:
1244 if (hdev->version < 0x0214)
1245 return HID_QUIRK_IGNORE;
1246 break;
1247 }
1248 }
1249
1238 mutex_lock(&dquirks_lock); 1250 mutex_lock(&dquirks_lock);
1239 quirk_entry = hid_exists_dquirk(hdev); 1251 quirk_entry = hid_exists_dquirk(hdev);
1240 if (quirk_entry) 1252 if (quirk_entry)
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index cd1ccb6b90c9..77c50cdfff97 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -1327,6 +1327,7 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
1327 hid->bus = BUS_USB; 1327 hid->bus = BUS_USB;
1328 hid->vendor = le16_to_cpu(dev->descriptor.idVendor); 1328 hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
1329 hid->product = le16_to_cpu(dev->descriptor.idProduct); 1329 hid->product = le16_to_cpu(dev->descriptor.idProduct);
1330 hid->version = le16_to_cpu(dev->descriptor.bcdDevice);
1330 hid->name[0] = 0; 1331 hid->name[0] = 0;
1331 if (intf->cur_altsetting->desc.bInterfaceProtocol == 1332 if (intf->cur_altsetting->desc.bInterfaceProtocol ==
1332 USB_INTERFACE_PROTOCOL_MOUSE) 1333 USB_INTERFACE_PROTOCOL_MOUSE)