From: Hans de Goede <hidden> Date: 2017-05-10 15:12:58
Microsoft has defined some extra HUT codes for the Generic Desktop Page
for Wireless Radio controls, see:
https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-managementhttps://web.archive.org/web/20170509144631/https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-management
I've 3 2-in-1 keyboard docks: Dell Venue Pro 11 keyboard dock,
HP pavilion x2 keyboard dock and a PEAQ C1010 keyboard dock which have
a wireless radio toggle hotkey, which uses the 0x000100c6 HUT code
defined in these extensions.
This commit adds a mapping for this key, this makes the rfkill toggle
hotkey work on the Dell Venue Pro 11 and HP Pavilion X2 keyboards,
the PEAQ C1010 keyboard does generate events for the 0x000100c6 HUT
code when pressed, but the reported value is always 0.
Signed-off-by: Hans de Goede <redacted>
---
drivers/hid/hid-input.c | 9 +++++++++
include/linux/hid.h | 10 ++++++++++
2 files changed, 19 insertions(+)
@@ -656,6 +656,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcaseHID_GD_START:map_key_clear(BTN_START);break;caseHID_GD_SELECT:map_key_clear(BTN_SELECT);break;+caseHID_GD_RFKILL_BTN:+/* MS wireless radio ctl extension, also check CA */+if(field->application==0x0001000c){+map_key_clear(KEY_RFKILL);+/* We need to simulate the btn release */+field->flags|=HID_MAIN_ITEM_RELATIVE;+break;+}+default:gotounknown;}
From: Hans de Goede <hidden> Date: 2017-05-10 15:12:59
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 <redacted>
---
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
From: Benjamin Tissoires <hidden> Date: 2017-05-10 15:41:20
On May 10 2017 or thereabouts, Hans de Goede wrote:
quoted hunk
Microsoft has defined some extra HUT codes for the Generic Desktop Page
for Wireless Radio controls, see:
https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-managementhttps://web.archive.org/web/20170509144631/https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-management
I've 3 2-in-1 keyboard docks: Dell Venue Pro 11 keyboard dock,
HP pavilion x2 keyboard dock and a PEAQ C1010 keyboard dock which have
a wireless radio toggle hotkey, which uses the 0x000100c6 HUT code
defined in these extensions.
This commit adds a mapping for this key, this makes the rfkill toggle
hotkey work on the Dell Venue Pro 11 and HP Pavilion X2 keyboards,
the PEAQ C1010 keyboard does generate events for the 0x000100c6 HUT
code when pressed, but the reported value is always 0.
Signed-off-by: Hans de Goede <redacted>
---
drivers/hid/hid-input.c | 9 +++++++++
include/linux/hid.h | 10 ++++++++++
2 files changed, 19 insertions(+)
@@ -656,6 +656,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcaseHID_GD_START:map_key_clear(BTN_START);break;caseHID_GD_SELECT:map_key_clear(BTN_SELECT);break;+caseHID_GD_RFKILL_BTN:+/* MS wireless radio ctl extension, also check CA */+if(field->application==0x0001000c){
Nitpicking, but you should probably use HID_GD_WIRELESS_RADIO_CTLS
instead of the constant.
quoted hunk
+ map_key_clear(KEY_RFKILL);+ /* We need to simulate the btn release */+ field->flags |= HID_MAIN_ITEM_RELATIVE;+ break;+ }+ default: goto unknown; }
From: Benjamin Tissoires <hidden> Date: 2017-05-10 15:46:45
On May 10 2017 or thereabouts, Hans de Goede wrote:
quoted hunk
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 <redacted>
---
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
From: Hans de Goede <hidden> Date: 2017-05-10 16:20:05
Hi,
On 10-05-17 17:41, Benjamin Tissoires wrote:
On May 10 2017 or thereabouts, Hans de Goede wrote:
quoted
Microsoft has defined some extra HUT codes for the Generic Desktop Page
for Wireless Radio controls, see:
https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-managementhttps://web.archive.org/web/20170509144631/https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-management
I've 3 2-in-1 keyboard docks: Dell Venue Pro 11 keyboard dock,
HP pavilion x2 keyboard dock and a PEAQ C1010 keyboard dock which have
a wireless radio toggle hotkey, which uses the 0x000100c6 HUT code
defined in these extensions.
This commit adds a mapping for this key, this makes the rfkill toggle
hotkey work on the Dell Venue Pro 11 and HP Pavilion X2 keyboards,
the PEAQ C1010 keyboard does generate events for the 0x000100c6 HUT
code when pressed, but the reported value is always 0.
Signed-off-by: Hans de Goede <redacted>
---
drivers/hid/hid-input.c | 9 +++++++++
include/linux/hid.h | 10 ++++++++++
2 files changed, 19 insertions(+)
@@ -656,6 +656,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcaseHID_GD_START:map_key_clear(BTN_START);break;caseHID_GD_SELECT:map_key_clear(BTN_SELECT);break;+caseHID_GD_RFKILL_BTN:+/* MS wireless radio ctl extension, also check CA */+if(field->application==0x0001000c){
Nitpicking, but you should probably use HID_GD_WIRELESS_RADIO_CTLS
instead of the constant.
Yeah that is actually why I defined it in the first place, my bad.
quoted
+ map_key_clear(KEY_RFKILL);+ /* We need to simulate the btn release */+ field->flags |= HID_MAIN_ITEM_RELATIVE;+ break;+ }+ default: goto unknown; }
Ah I did not know about that version, I added the web.archive.org version
because using URLs usually is a bad idea because they tend to go stale.
I will do as you suggested and send a v2 tomorrow.
In the HID usage table extension, they are called "Wireless Radio *".
I wonder if we should have a closer name.
Then we would end up with HID_GD_WIRELESS_RADIO_* ?
Which is a bit long, RFKILL is linux-speak for this,
and nice and short, but if you prefer the long version
let me know and I'll change it for v2.
Regards,
Hans
From: Hans de Goede <hidden> Date: 2017-05-10 16:24:12
Hi,
On 10-05-17 17:46, Benjamin Tissoires wrote:
On May 10 2017 or thereabouts, Hans de Goede wrote:
quoted
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 <redacted>
---
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
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
quoted
+ 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
From: Benjamin Tissoires <hidden> Date: 2017-05-10 18:38:42
On May 10 2017 or thereabouts, Hans de Goede wrote:
Hi,
On 10-05-17 17:41, Benjamin Tissoires wrote:
quoted
On May 10 2017 or thereabouts, Hans de Goede wrote:
quoted
Microsoft has defined some extra HUT codes for the Generic Desktop Page
for Wireless Radio controls, see:
https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-managementhttps://web.archive.org/web/20170509144631/https://docs.microsoft.com/en-us/windows-hardware/drivers/hid/airplane-mode-radio-management
I've 3 2-in-1 keyboard docks: Dell Venue Pro 11 keyboard dock,
HP pavilion x2 keyboard dock and a PEAQ C1010 keyboard dock which have
a wireless radio toggle hotkey, which uses the 0x000100c6 HUT code
defined in these extensions.
This commit adds a mapping for this key, this makes the rfkill toggle
hotkey work on the Dell Venue Pro 11 and HP Pavilion X2 keyboards,
the PEAQ C1010 keyboard does generate events for the 0x000100c6 HUT
code when pressed, but the reported value is always 0.
Signed-off-by: Hans de Goede <redacted>
---
drivers/hid/hid-input.c | 9 +++++++++
include/linux/hid.h | 10 ++++++++++
2 files changed, 19 insertions(+)
@@ -656,6 +656,15 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fielcaseHID_GD_START:map_key_clear(BTN_START);break;caseHID_GD_SELECT:map_key_clear(BTN_SELECT);break;+caseHID_GD_RFKILL_BTN:+/* MS wireless radio ctl extension, also check CA */+if(field->application==0x0001000c){
Nitpicking, but you should probably use HID_GD_WIRELESS_RADIO_CTLS
instead of the constant.
Yeah that is actually why I defined it in the first place, my bad.
quoted
quoted
+ map_key_clear(KEY_RFKILL);+ /* We need to simulate the btn release */+ field->flags |= HID_MAIN_ITEM_RELATIVE;+ break;+ }+ default: goto unknown; }
Ah I did not know about that version, I added the web.archive.org version
because using URLs usually is a bad idea because they tend to go stale.
I will do as you suggested and send a v2 tomorrow.
In the HID usage table extension, they are called "Wireless Radio *".
I wonder if we should have a closer name.
Then we would end up with HID_GD_WIRELESS_RADIO_* ?
Which is a bit long, RFKILL is linux-speak for this,
and nice and short, but if you prefer the long version
let me know and I'll change it for v2.
Nah, no worries. Just that I am not a big fan of the RFKILL either, but
it's shorter than the "official" name in the HUT.
Cheers,
Benjamin
From: Benjamin Tissoires <hidden> Date: 2017-05-10 18:40:17
On May 10 2017 or thereabouts, Hans de Goede wrote:
Hi,
On 10-05-17 17:46, Benjamin Tissoires wrote:
quoted
On May 10 2017 or thereabouts, Hans de Goede wrote:
quoted
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 <redacted>
---
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
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.
... which is different to the ones I checked where there is not both
checks :)
Anyway, no worries:
Reviewed-by: Benjamin Tissoires <redacted>
Cheers,
Benjamin
Regards,
Hans
quoted
quoted
+ 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
From: Hans de Goede <hidden> Date: 2017-05-11 17:07:19
Hi,
On 05/11/2017 10:28 AM, Jiri Kosina wrote:
Applied to for-4.13/ite. Thanks,
Thank you, but Benjamin had 2 valid remarks about the first
patch in this set, so I was planning to do a v2. Instead
I will send a follow-up patch (right after this mail),
feel free to squash that into the original if you want to.
Regards,
Hans