Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5158e02 authored by Niels Skou Olsen's avatar Niels Skou Olsen Committed by Jiri Kosina
Browse files

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 31b9779c ("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: default avatarNiels Skou Olsen <nolsen@jabra.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent e04a0442
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -788,8 +788,6 @@ static const struct hid_device_id hid_ignore_list[] = {
	{ HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_SPEAK_410) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_SPEAK_510) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_GN9350E) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) },
	{ 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)
	    hdev->product <= USB_DEVICE_ID_NCR_LAST)
		return HID_QUIRK_NO_INIT_REPORTS;

	/* These devices must be ignored if version (bcdDevice) is too old */
	if (hdev->bus == BUS_USB && hdev->vendor == USB_VENDOR_ID_JABRA) {
		switch (hdev->product) {
		case USB_DEVICE_ID_JABRA_SPEAK_410:
			if (hdev->version < 0x0111)
				return HID_QUIRK_IGNORE;
			break;
		case USB_DEVICE_ID_JABRA_SPEAK_510:
			if (hdev->version < 0x0214)
				return HID_QUIRK_IGNORE;
			break;
		}
	}

	mutex_lock(&dquirks_lock);
	quirk_entry = hid_exists_dquirk(hdev);
	if (quirk_entry)
+1 −0
Original line number Diff line number Diff line
@@ -1327,6 +1327,7 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
	hid->bus = BUS_USB;
	hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
	hid->product = le16_to_cpu(dev->descriptor.idProduct);
	hid->version = le16_to_cpu(dev->descriptor.bcdDevice);
	hid->name[0] = 0;
	if (intf->cur_altsetting->desc.bInterfaceProtocol ==
			USB_INTERFACE_PROTOCOL_MOUSE)