All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ACPI: EC: Set ec_no_wakeup for Lenovo Go S
@ 2025-03-31 20:44 Mario Limonciello
  2025-03-31 20:51 ` Antheas Kapenekakis
  2025-04-01 12:47 ` Antheas Kapenekakis
  0 siblings, 2 replies; 23+ messages in thread
From: Mario Limonciello @ 2025-03-31 20:44 UTC (permalink / raw)
  To: mario.limonciello, rafael; +Cc: Xino JS1 Ni, Antheas Kapenekakis, linux-acpi

From: Mario Limonciello <mario.limonciello@amd.com>

When AC adapter is unplugged or plugged in EC wakes from
HW sleep but APU doesn't enter back into HW sleep.

The reason this hapens is that when APU exits HW sleep the power
rails the EC controls will power up the TCON.  The TCON has a
GPIO that will be toggled during this time.  The GPIO is not marked
as a wakeup source however GPIO controller still has an unserviced
interrupt and it will block entering HW sleep again. Clearing the
GPIO doesn't help, the TCON raises it again until it's been initialized
by i2c-hid.

Fixing this would require TCON F/W changes and it's already broken
in the wild on production hardware.

To avoid triggering this issue add a quirk to avoid letting EC wake
up system at all.  The power button still works properly on this system.

Cc: Xino JS1 Ni <nijs1@lenovo.com>
Reported-by: Antheas Kapenekakis <lkml@antheas.dev>
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3929
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
 drivers/acpi/ec.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 8db09d81918fb..3c5f34892734e 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -2301,6 +2301,34 @@ static const struct dmi_system_id acpi_ec_no_wakeup[] = {
 			DMI_MATCH(DMI_PRODUCT_FAMILY, "103C_5336AN HP ZHAN 66 Pro"),
 		},
 	},
+	/*
+	 * Lenovo Legion Go S; touchscreen blocks HW sleep when woken up from EC
+	 * https://gitlab.freedesktop.org/drm/amd/-/issues/3929
+	 */
+	{
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "83L3"),
+		}
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "83N6"),
+		}
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "83Q2"),
+		}
+	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
+			DMI_MATCH(DMI_PRODUCT_NAME, "83Q3"),
+		}
+	},
 	{ },
 };
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2025-04-03 19:56 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-31 20:44 [PATCH] ACPI: EC: Set ec_no_wakeup for Lenovo Go S Mario Limonciello
2025-03-31 20:51 ` Antheas Kapenekakis
2025-03-31 20:53   ` Antheas Kapenekakis
2025-03-31 20:55     ` Mario Limonciello
2025-03-31 21:16       ` Antheas Kapenekakis
2025-04-01  2:40         ` Mario Limonciello
2025-04-01  9:01           ` Antheas Kapenekakis
2025-04-01 12:29             ` Mario Limonciello
2025-04-01 12:45               ` Antheas Kapenekakis
2025-04-01 14:09                 ` Mario Limonciello
2025-04-01 15:03                   ` Antheas Kapenekakis
2025-04-01 15:24                     ` Mario Limonciello
2025-04-01 18:39                       ` Antheas Kapenekakis
2025-04-01 20:54                         ` Mario Limonciello
2025-04-01 22:06                           ` Antheas Kapenekakis
2025-04-02 19:19                             ` Mario Limonciello
2025-04-02 20:37                               ` Antheas Kapenekakis
2025-04-03 19:56                                 ` Mario Limonciello
2025-04-01 14:16             ` Xino Ni
2025-04-01 14:46               ` Antheas Kapenekakis
2025-04-01 14:58                 ` Xino Ni
2025-04-01 15:05                   ` Antheas Kapenekakis
2025-04-01 12:47 ` Antheas Kapenekakis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.