RE: [PATCH] HID: Add special driver for Jabra devices
From: Niels Skou Olsen <hidden>
Date: 2017-09-08 12:59:01
On Fri, 8 Sep 2017, jikos@kernel.org write:
On Fri, 1 Sep 2017, nolsen@jabra.com wrote:quoted
From: Niels Skou Olsen <redacted> Add a hid-jabra driver to the list of special drivers in hid-core. The driver prevents vendor defined HID usages (FF00-FFFF) in Jabra devices from being mapped to input events that become unintended mouse events in the X11 server. Signed-off-by: Niels Skou Olsen <redacted> --- drivers/hid/Kconfig | 11 ++++++++++ drivers/hid/Makefile | 1 + drivers/hid/hid-core.c | 3 +++ drivers/hid/hid-jabra.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 drivers/hid/hid-jabra.cdiff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index0a3117c..d9d2843 100644--- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig@@ -395,6 +395,17 @@ config HID_ITE ---help--- Support for ITE devices not fully compliant with HID standard. +config HID_JABRA +tristate "Jabra USB HID Driver" +depends on HID +---help--- +Support for Jabra USB HID devices. + +Prevents mapping of vendor defined HID usages to input events.Withoutquoted
+this driver HIDreports from Jabra devices may incorrectly be seen as +mouse button events. +Say M here if you may ever plug in a Jabra USB device. + config HID_TWINHAN tristate "Twinhan IR remote control" depends on HIDdiff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index8659d7e..d2563e5 100644--- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile@@ -51,6 +51,7 @@ obj-$(CONFIG_HID_HOLTEK)+= hid-holtekff.o obj-$(CONFIG_HID_HYPERV_MOUSE)+= hid-hyperv.o obj-$(CONFIG_HID_ICADE)+= hid-icade.o obj-$(CONFIG_HID_ITE)+= hid-ite.o +obj-$(CONFIG_HID_JABRA)+= hid-jabra.o obj-$(CONFIG_HID_KENSINGTON)+= hid-kensington.o obj-$(CONFIG_HID_KEYTOUCH)+= hid-keytouch.o obj-$(CONFIG_HID_KYE)+= hid-kye.odiff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index9bc9116..0603012 100644--- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c@@ -2077,6 +2077,9 @@ static const struct hid_device_idhid_have_special_driver[] = { #if IS_ENABLED(CONFIG_HID_ITE) { HID_USB_DEVICE(USB_VENDOR_ID_ITE,USB_DEVICE_ID_ITE8595) },quoted
#endif +#if IS_ENABLED(CONFIG_HID_JABRA) +{ HID_USB_DEVICE(USB_VENDOR_ID_JABRA, HID_ANY_ID) },#endifquoted
#if IS_ENABLED(CONFIG_HID_KENSINGTON) { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) }, #endif diff --git a/drivers/hid/hid-jabra.c b/drivers/hid/hid-jabra.c new file mode 100644 index 0000000..1f52daf--- /dev/null +++ b/drivers/hid/hid-jabra.c@@ -0,0 +1,58 @@ +/* + * Jabra USB HID Driver + * + * Copyright (c) 2017 Niels Skou Olsen <nolsen@jabra.com> */ + +/* + * This program is free software; you can redistribute it and/or +modify it + * under the terms of the GNU General Public License as published by +the Free + * Software Foundation; either version 2 of the License, or (at your +option) + * any later version. + */ + +#include <linux/hid.h> +#include <linux/module.h> + +#include "hid-ids.h" + +#define HID_UP_VENDOR_DEFINED_MIN0xff000000 +#define HID_UP_VENDOR_DEFINED_MAX0xffff0000 + +static int jabra_input_mapping(struct hid_device *hdev, + struct hid_input *hi, + struct hid_field *field, + struct hid_usage *usage, + unsigned long **bit, int *max) { +int is_vendor_defined = +((usage->hid & HID_USAGE_PAGE) >=HID_UP_VENDOR_DEFINED_MIN &"ed
+ (usage->hid & HID_USAGE_PAGE) <=HID_UP_VENDOR_DEFINED_MAX);quoted
+ +dbg_hid("hid=0x%08x appl=0x%08x coll_idx=0x%02xusage_idx=0x%02x: %s\n",quoted
+usage->hid, +field->application, +usage->collection_index, +usage->usage_index, +is_vendor_defined ? "ignored" : "defaulted"); + +/* Ignore vendor defined usages, default map standard usages */ +return is_vendor_defined ? -1 : 0; +} + +static const struct hid_device_id jabra_devices[] = { +{ HID_USB_DEVICE(USB_VENDOR_ID_JABRA, HID_ANY_ID) },You also need to update hid-core so that generic driver doesn't bind to those device. See hid_have_special_driver[] in drivers/hid/hid-core.c
The original patch already has a hunk that patches hid_have_special_driver[] -- did you miss it, or do I need to do something else also? Thanks, Niels **** GN GROUP NOTICE - AUTOMATICALLY INSERTED**** The information in this e-mail (including attachments, if any) is considered confidential and is intended only for the recipient(s) listed above. Any review, use, disclosure, distribution or copying of this e-mail is prohibited except by or on behalf of the intended recipient. If you have received this email in error, please notify me immediately by reply e-mail, delete this e-mail, and do not disclose its contents to anyone. Any opinions expressed in this e-mail are those of the individual and not necessarily the GN group. Thank you. ******************** DISCLAIMER END ************************