From: Hans de Goede <hdegoede@redhat.com>
To: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Cc: Jiri Kosina <jikos@kernel.org>, linux-input@vger.kernel.org
Subject: Re: [PATCH 2/2] HID: ite: Add hid-ite driver
Date: Wed, 10 May 2017 18:24:01 +0200 [thread overview]
Message-ID: <056410b9-3bae-4ae4-2257-8b9ccecb20fa@redhat.com> (raw)
In-Reply-To: <20170510154636.GB30987@mail.corp.redhat.com>
Hi,
On 10-05-17 17:46, Benjamin Tissoires wrote:
> On May 10 2017 or thereabouts, Hans de Goede wrote:
>> The ITE8595 keyboard uses the HID_GD_RFKILL_BTN usage code
>> from the Wireless Radio Controls Application Collection Microsoft
>> has defined for Windows 8 and later.
>>
>> However it has a quirk, when the rfkill hotkey is pressed it does
>> generate a report for the collection, but the reported value is
>> always 0. Luckily it is the only button in this collection / report,
>> and it sends a report on release only, so receiving a report means the
>> button was pressed.
>>
>> This commit adds a hid-ite driver which watches for the Wireless Radio
>> Controls Application Collection report and then reports a KEY_RFKILL event,
>> ignoring the value, making the rfkill on this keyboard work.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>> drivers/hid/Kconfig | 7 +++++++
>> drivers/hid/Makefile | 1 +
>> drivers/hid/hid-core.c | 1 +
>> drivers/hid/hid-ids.h | 1 +
>> drivers/hid/hid-ite.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> 5 files changed, 66 insertions(+)
>> create mode 100644 drivers/hid/hid-ite.c
>>
>> diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
>> index 8c54cb8f5d6d..8db13f2b748b 100644
>> --- a/drivers/hid/Kconfig
>> +++ b/drivers/hid/Kconfig
>> @@ -370,6 +370,13 @@ config HID_ICADE
>> To compile this driver as a module, choose M here: the
>> module will be called hid-icade.
>>
>> +config HID_ITE
>> + tristate "ITE devices"
>> + depends on HID
>> + default !EXPERT
>> + ---help---
>> + Support for ITE devices not fully compliant with HID standard.
>> +
>> config HID_TWINHAN
>> tristate "Twinhan IR remote control"
>> depends on HID
>> diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
>> index 4d111f23e801..606545745cfe 100644
>> --- a/drivers/hid/Makefile
>> +++ b/drivers/hid/Makefile
>> @@ -49,6 +49,7 @@ obj-$(CONFIG_HID_HOLTEK) += hid-holtek-mouse.o
>> 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_KENSINGTON) += hid-kensington.o
>> obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o
>> obj-$(CONFIG_HID_KYE) += hid-kye.o
>> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
>> index 63ec1993eaaa..9348a6f589f7 100644
>> --- a/drivers/hid/hid-core.c
>> +++ b/drivers/hid/hid-core.c
>> @@ -1911,6 +1911,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
>> { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
>> { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) },
>> { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) },
>> + { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
>> { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_JESS_ZEN_AIO_KBD) },
>> { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
>> { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
>> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
>> index 4e2648c86c8c..975c82993308 100644
>> --- a/drivers/hid/hid-ids.h
>> +++ b/drivers/hid/hid-ids.h
>> @@ -552,6 +552,7 @@
>> #define USB_DEVICE_ID_ITE_LENOVO_YOGA 0x8386
>> #define USB_DEVICE_ID_ITE_LENOVO_YOGA2 0x8350
>> #define USB_DEVICE_ID_ITE_LENOVO_YOGA900 0x8396
>> +#define USB_DEVICE_ID_ITE8595 0x8595
>>
>> #define USB_VENDOR_ID_JABRA 0x0b0e
>> #define USB_DEVICE_ID_JABRA_SPEAK_410 0x0412
>> diff --git a/drivers/hid/hid-ite.c b/drivers/hid/hid-ite.c
>> new file mode 100644
>> index 000000000000..1882a4ab0f29
>> --- /dev/null
>> +++ b/drivers/hid/hid-ite.c
>> @@ -0,0 +1,56 @@
>> +/*
>> + * HID driver for some ITE "special" devices
>> + * Copyright (c) 2017 Hans de Goede <hdegoede@redhat.com>
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + */
>> +
>> +#include <linux/device.h>
>> +#include <linux/input.h>
>> +#include <linux/hid.h>
>> +#include <linux/module.h>
>> +
>> +#include "hid-ids.h"
>> +
>> +static int ite_event(struct hid_device *hdev, struct hid_field *field,
>> + struct hid_usage *usage, __s32 value)
>> +{
>> + struct input_dev *input;
>> +
>> + if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput)
>
> I would say if HID_CLAIMED_INPUT is there, there is no reasons for
> field->hidinput to not be set.
I just checked the first couple of drivers (3-4 or so) defining an
event callback and they all check for both the flag and field->hidinput,
so for consistencies sake I would like to keep this as is.
Regards,
Hans
>> + return 0;
>> +
>> + input = field->hidinput->input;
>> +
>> + /*
>> + * The ITE8595 always reports 0 as value for the rfkill button. Luckily
>> + * it is the only button in its report, and it sends a report on
>> + * release only, so receiving a report means the button was pressed.
>> + */
>> + if (usage->hid == HID_GD_RFKILL_BTN) {
>> + input_event(input, EV_KEY, KEY_RFKILL, 1);
>> + input_sync(input);
>> + input_event(input, EV_KEY, KEY_RFKILL, 0);
>> + input_sync(input);
>> + return 1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static const struct hid_device_id ite_devices[] = {
>> + { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
>> + { }
>> +};
>> +MODULE_DEVICE_TABLE(hid, ite_devices);
>> +
>> +static struct hid_driver ite_driver = {
>> + .name = "itetech",
>> + .id_table = ite_devices,
>> + .event = ite_event,
>> +};
>> +module_hid_driver(ite_driver);
>> +
>> +MODULE_LICENSE("GPL");
>> --
>> 2.12.2
>>
>
> Cheers,
> Benjamin
>
next prev parent reply other threads:[~2017-05-10 16:24 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-10 15:12 [PATCH 1/2] HID: Add mapping for Microsoft Win8 Wireless Radio Controls extensions Hans de Goede
2017-05-10 15:12 ` [PATCH 2/2] HID: ite: Add hid-ite driver Hans de Goede
2017-05-10 15:46 ` Benjamin Tissoires
2017-05-10 16:24 ` Hans de Goede [this message]
2017-05-10 18:40 ` Benjamin Tissoires
2017-05-10 15:41 ` [PATCH 1/2] HID: Add mapping for Microsoft Win8 Wireless Radio Controls extensions Benjamin Tissoires
2017-05-10 16:19 ` Hans de Goede
2017-05-10 18:38 ` Benjamin Tissoires
2017-05-11 8:28 ` Jiri Kosina
2017-05-11 17:07 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=056410b9-3bae-4ae4-2257-8b9ccecb20fa@redhat.com \
--to=hdegoede@redhat.com \
--cc=benjamin.tissoires@redhat.com \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.