blob: 26fd4fdae143ccc2eed3c95d247ddddc82cdb7b2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index bcfaf32..c54cb28 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -502,7 +502,8 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
field->hidinput = hidinput;
- if (field->flags & HID_MAIN_ITEM_CONSTANT)
+ if ((field->flags & HID_MAIN_ITEM_CONSTANT) &&
+ (usage->hid & HID_USAGE_PAGE) != HID_UP_ASUSVENDOR)
goto ignore;
/* Ignore if report count is out of bounds. */
@@ -980,6 +981,17 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
}
break;
+ case HID_UP_ASUSVENDOR:
+ switch (usage->hid & HID_USAGE) {
+ case 0x06C: map_key_clear(KEY_SLEEP); break; /* Fn+F1: Sleep */
+ case 0x088: map_key_clear(KEY_WLAN); break; /* Fn+F2: Wifi & BT */
+ case 0x010: map_key_clear(KEY_BRIGHTNESSDOWN); break; /* Fn+F5: Brightness down */
+ case 0x020: map_key_clear(KEY_BRIGHTNESSUP); break; /* Fn+F6: Brightness up */
+ case 0x06B: map_key_clear(KEY_F24); break; /* Fn+F9: Touchpad */
+ default: goto ignore;
+ }
+ break;
+
default:
unknown:
if (field->report_size == 1) {
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 75b66ec..16a64fd 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -172,6 +172,7 @@ struct hid_item {
#define HID_UP_LOGIVENDOR3 0xff430000
#define HID_UP_LNVENDOR 0xffa00000
#define HID_UP_SENSOR 0x00200000
+#define HID_UP_ASUSVENDOR 0xff310000
#define HID_USAGE 0x0000ffff
|