| From 963e22c084c2b6097e1e635d29c6336881f67708 Mon Sep 17 00:00:00 2001 |
| From: Armin Wolf <W_Armin@gmx.de> |
| Date: Tue, 29 Jul 2025 08:20:38 +0200 |
| Subject: ACPI: EC: Relax sanity check of the ECDT ID string |
| |
| From: Armin Wolf <W_Armin@gmx.de> |
| |
| commit 963e22c084c2b6097e1e635d29c6336881f67708 upstream. |
| |
| It turns out that the ECDT table inside the ThinkBook 14 G7 IML |
| contains a valid EC description but an invalid ID string |
| ("_SB.PC00.LPCB.EC0"). Ignoring this ECDT based on the invalid |
| ID string prevents the kernel from detecting the built-in touchpad, |
| so relax the sanity check of the ID string and only reject ECDTs |
| with empty ID strings. |
| |
| Reported-by: Ilya K <me@0upti.me> |
| Fixes: 7a0d59f6a913 ("ACPI: EC: Ignore ECDT tables with an invalid ID string") |
| Signed-off-by: Armin Wolf <W_Armin@gmx.de> |
| Tested-by: Ilya K <me@0upti.me> |
| Link: https://patch.msgid.link/20250729062038.303734-1-W_Armin@gmx.de |
| Cc: 6.16+ <stable@vger.kernel.org> # 6.16+ |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/acpi/ec.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c |
| index 75c7db8b156a..7855bbf752b1 100644 |
| --- a/drivers/acpi/ec.c |
| +++ b/drivers/acpi/ec.c |
| @@ -2033,7 +2033,7 @@ void __init acpi_ec_ecdt_probe(void) |
| goto out; |
| } |
| |
| - if (!strstarts(ecdt_ptr->id, "\\")) { |
| + if (!strlen(ecdt_ptr->id)) { |
| /* |
| * The ECDT table on some MSI notebooks contains invalid data, together |
| * with an empty ID string (""). |
| @@ -2042,9 +2042,13 @@ void __init acpi_ec_ecdt_probe(void) |
| * a "fully qualified reference to the (...) embedded controller device", |
| * so this string always has to start with a backslash. |
| * |
| - * By verifying this we can avoid such faulty ECDT tables in a safe way. |
| + * However some ThinkBook machines have a ECDT table with a valid EC |
| + * description but an invalid ID string ("_SB.PC00.LPCB.EC0"). |
| + * |
| + * Because of this we only check if the ID string is empty in order to |
| + * avoid the obvious cases. |
| */ |
| - pr_err(FW_BUG "Ignoring ECDT due to invalid ID string \"%s\"\n", ecdt_ptr->id); |
| + pr_err(FW_BUG "Ignoring ECDT due to empty ID string\n"); |
| goto out; |
| } |
| |
| -- |
| 2.50.1 |
| |