]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ACPI: EC: Relax sanity check of the ECDT ID string
authorArmin Wolf <W_Armin@gmx.de>
Tue, 29 Jul 2025 06:20:38 +0000 (08:20 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 12 Aug 2025 17:16:27 +0000 (19:16 +0200)
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>
drivers/acpi/ec.c

index 75c7db8b156a206a5436189afba9890673cf1694..7855bbf752b1e8a5133a73bbd3001ae3adec06b5 100644 (file)
@@ -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;
        }