-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathideapad-laptop.patch
106 lines (97 loc) · 2.85 KB
/
ideapad-laptop.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
--- ideapad-laptop.c 2025-01-11 19:28:33.173517541 +0800
+++ ideapad-laptop-tb.c 2025-01-11 19:58:50.711543174 +0800
@@ -32,7 +32,7 @@
#include <linux/sysfs.h>
#include <linux/types.h>
#include <linux/wmi.h>
-#include "ideapad-laptop.h"
+#include "ideapad-laptop-tb.h"
#include <acpi/video.h>
@@ -188,6 +188,7 @@
struct led_classdev led;
unsigned int last_brightness;
} fn_lock;
+ bool suspended;
};
static bool no_bt_rfkill;
@@ -1297,7 +1298,10 @@
/* Specific to some newer models */
{ KE_KEY, 0x3e | IDEAPAD_WMI_KEY, { KEY_MICMUTE } },
{ KE_KEY, 0x3f | IDEAPAD_WMI_KEY, { KEY_RFKILL } },
-
+ /* Touchpad Toggle */
+ { KE_KEY, 0x29 | IDEAPAD_WMI_KEY, { KEY_TOUCHPAD_TOGGLE } },
+ /* Print Screen */
+ { KE_KEY, 0x2d | IDEAPAD_WMI_KEY, { KEY_PRINT } },
{ KE_END },
};
@@ -1846,6 +1850,17 @@
unsigned long vpc1, vpc2, bit;
scoped_guard(mutex, &priv->vpc_mutex) {
+ acpi_handle_info(handle, "event: %lu\n",
+ (unsigned long)event);
+
+ if(!data){
+ acpi_handle_info(handle, "no data");
+ return;
+ }
+
+ if (priv->suspended)
+ return;
+
if (read_ec_data(handle, VPCCMD_R_VPC1, &vpc1))
return;
@@ -1892,6 +1907,7 @@
ideapad_backlight_notify_power(priv);
break;
case KBD_BL_KBLC_CHANGED_EVENT:
+ case 0:
case 1:
/*
* Some IdeaPads report event 1 every ~20
@@ -1901,8 +1917,6 @@
* backlight has changed.
*/
ideapad_kbd_bl_notify(priv);
- break;
- case 0:
ideapad_check_special_buttons(priv);
break;
default:
@@ -2106,6 +2120,9 @@
{ "26CAB2E5-5CF1-46AE-AAC3-4A12B6BA50E6", &ideapad_wmi_context_esc }, /* Yoga 3 */
{ "56322276-8493-4CE8-A783-98C991274F5E", &ideapad_wmi_context_esc }, /* Yoga 700 */
{ "8FC0DE0C-B4E4-43FD-B0F3-8871711C1294", &ideapad_wmi_context_fn_keys }, /* Legion 5 */
+ { "46f16367-fb9d-11ee-a4f6-40c2ba4a5625", &ideapad_wmi_context_esc }, /* ThinkBook 16+ 2024 IMH */
+ { "077c4a1f-e344-11ee-a4f6-40c2ba413e67", &ideapad_wmi_context_esc }, /* ThinkBook 2024 AMD */
+ { "32b0d441-1cba-11ef-a4f6-40c2ba54d301", &ideapad_wmi_context_esc }, /* ThinkBook 14+ 2024 AGH */
{},
};
MODULE_DEVICE_TABLE(wmi, ideapad_wmi_ids);
@@ -2296,10 +2313,19 @@
if (priv->dytc)
dytc_profile_refresh(priv);
+ priv->suspended = false;
+
+ return 0;
+}
+
+static int ideapad_acpi_suspended(struct device *dev)
+{
+ struct ideapad_private *priv = dev_get_drvdata(dev);
+ priv->suspended = true;
return 0;
}
#endif
-static SIMPLE_DEV_PM_OPS(ideapad_pm, NULL, ideapad_acpi_resume);
+static SIMPLE_DEV_PM_OPS(ideapad_pm, ideapad_acpi_suspended, ideapad_acpi_resume);
static const struct acpi_device_id ideapad_device_ids[] = {
{"VPC2004", 0},
@@ -2309,7 +2335,7 @@
static struct platform_driver ideapad_acpi_driver = {
.probe = ideapad_acpi_add,
- .remove_new = ideapad_acpi_remove,
+ .remove = ideapad_acpi_remove,
.driver = {
.name = "ideapad_acpi",
.pm = &ideapad_pm,