-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path0001-Add-support-for-Acer-Predator-macro-keys.patch
89 lines (85 loc) · 3.27 KB
/
0001-Add-support-for-Acer-Predator-macro-keys.patch
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
diff -up linux-6.9-rc1/drivers/platform/x86/acer-wmi.c.3~ linux-6.9-rc1/drivers/platform/x86/acer-wmi.c
--- linux-6.9-rc1/drivers/platform/x86/acer-wmi.c.3~ 2024-03-24 22:10:05.000000000 +0100
+++ linux-6.9-rc1/drivers/platform/x86/acer-wmi.c 2024-03-25 10:52:42.435851128 +0100
@@ -7,6 +7,9 @@
* Based on acer_acpi:
* Copyright (C) 2005-2007 E.M. Smith
* Copyright (C) 2007-2008 Carlos Corbacho <[email protected]>
+ *
+ * Added support for Acer Predator hotkeys:
+ * Copyright (C) 2021 Bernhard Rosenkraenzer <[email protected]>
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@ -95,7 +98,7 @@ MODULE_ALIAS("wmi:676AA15E-6A47-4D9F-A2C
enum acer_wmi_event_ids {
WMID_HOTKEY_EVENT = 0x1,
WMID_ACCEL_OR_KBD_DOCK_EVENT = 0x5,
- WMID_GAMING_TURBO_KEY_EVENT = 0x7,
+ WMID_GAMING_KEY_EVENT = 0x7,
};
enum acer_wmi_predator_v4_sys_info_command {
@@ -146,6 +149,26 @@ static const struct key_entry acer_wmi_k
{KE_KEY, 0x85, {KEY_TOUCHPAD_TOGGLE} },
{KE_KEY, 0x86, {KEY_WLAN} },
{KE_KEY, 0x87, {KEY_POWER} },
+ /* Acer Predator macro keys:
+ * 0xdaXY:
+ * da - magic value (preDAtor)
+ * X - macro key selector state (0: red, 1: blue, 2: green)
+ * Y - key pressed (0: 1, 1: 2, ...) */
+ {KE_KEY, 0xda00, {KEY_PROG1} },
+ {KE_KEY, 0xda01, {KEY_PROG2} },
+ {KE_KEY, 0xda02, {KEY_PROG3} },
+ {KE_KEY, 0xda03, {KEY_PROG4} },
+ {KE_KEY, 0xda04, {KEY_F13} },
+ {KE_KEY, 0xda10, {KEY_F14} },
+ {KE_KEY, 0xda11, {KEY_F15} },
+ {KE_KEY, 0xda12, {KEY_F16} },
+ {KE_KEY, 0xda13, {KEY_F17} },
+ {KE_KEY, 0xda14, {KEY_F18} },
+ {KE_KEY, 0xda20, {KEY_F19} },
+ {KE_KEY, 0xda21, {KEY_F20} },
+ {KE_KEY, 0xda22, {KEY_F21} },
+ {KE_KEY, 0xda23, {KEY_F22} },
+ {KE_KEY, 0xda24, {KEY_F23} },
{KE_END, 0}
};
@@ -275,6 +298,7 @@ static bool ec_raw_mode;
static bool has_type_aa;
static u16 commun_func_bitmap;
static u8 commun_fn_key_number;
+static u8 macro_key_state = 0;
static bool cycle_gaming_thermal_profile = true;
static bool predator_v4;
@@ -2285,10 +2309,28 @@ static void acer_wmi_notify(u32 value, v
acer_gsensor_event();
acer_kbd_dock_event(&return_value);
break;
- case WMID_GAMING_TURBO_KEY_EVENT:
- if (return_value.key_num == 0x4)
+ case WMID_GAMING_KEY_EVENT:
+ if (return_value.key_num == 0x1) {
+ /*
+ * This is the macro toggle key on Acer Predator
+ * laptops (it switches colors and selects which
+ * events are generated by the actual macro keys,
+ * key_num = 0x2)
+ */
+ if(return_value.device_state >= 1 && return_value.device_state <= 3)
+ macro_key_state = return_value.device_state - 1;
+ else
+ pr_warn("macro key state %d requested (only values 1 to 3 are known)\n", return_value.device_state);
+ break;
+ } else if (return_value.key_num == 0x2) {
+ if(return_value.device_state >= 1 && return_value.device_state <= 5)
+ sparse_keymap_report_event(acer_wmi_input_dev, 0xda00 + (macro_key_state<<4) + return_value.device_state-1, 1, true);
+ else
+ pr_warn("macro key %d pressed (only 1 to 5 are known)\n", return_value.device_state);
+ break;
+ } else if (return_value.key_num == 0x4)
acer_toggle_turbo();
- if (return_value.key_num == 0x5 && has_cap(ACER_CAP_PLATFORM_PROFILE))
+ else if (return_value.key_num == 0x5 && has_cap(ACER_CAP_PLATFORM_PROFILE))
acer_thermal_profile_change();
break;
default: