-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
- Loading branch information
Hans de Goede
authored and
Jiri Kosina
committed
May 11, 2017
1 parent
61df56b
commit f1918be
Showing
5 changed files
with
66 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
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"); |