[PATCH] platform/x86: asus-wmi: add quirk for Vivobook X7400PC

From: Zühtü Eren İncekara

Date: Sat Mar 21 2026 - 06:45:59 EST


The ASUS Vivobook X7400PC BIOS (version 303) contains ACPI errors leading
to namespace collisions and missing thermal symbols.

Specifically, the TcssSsdt table attempts to redefine objects in the
TXHC scope that already exist in the DSDT, causing AE_ALREADY_EXISTS
errors during boot and power state transitions. This leads to system
hangs during suspend/resume cycles.

Error logs observed:
[ 0.148580] ACPI BIOS Error (bug): Failure creating named object [\_SB.PC00.TXHC.RHUB.APLD], AE_ALREADY_EXISTS (20250807/dswload2-326)
[ 4.587627] ACPI BIOS Error (bug): Could not resolve symbol [\CTDP], AE_NOT_FOUND (20250807/psargs-332)
[ 4.587636] ACPI Error: Aborting method \_SB.IETM.IDSP due to previous error (AE_NOT_FOUND) (20250807/psparse-529)

This patch introduces a model-specific quirk for the X7400PC to:
1. Handle the TXHC RHUB namespace collision to prevent power-state hangs.
2. Proactively check for missing thermal symbols to avoid ACPI
interpreter aborts in thermal zone methods.

Signed-off-by: Zühtü Eren İncekara <incekarazuhtu04@xxxxxxxxx>
---
drivers/platform/x86/asus-nb-wmi.c | 14 ++++++++++
drivers/platform/x86/asus-wmi.c | 42 ++++++++++++++++++++++++++++++
drivers/platform/x86/asus-wmi.h | 1 +
3 files changed, 57 insertions(+)

diff --git a/drivers/platform/x86/asus-nb-wmi.c b/drivers/platform/x86/asus-nb-wmi.c
index 6a62bc5b0..64ff62122 100644
--- a/drivers/platform/x86/asus-nb-wmi.c
+++ b/drivers/platform/x86/asus-nb-wmi.c
@@ -155,6 +155,11 @@ static struct quirk_entry quirk_asus_z13 = {
.tablet_switch_mode = asus_wmi_kbd_dock_devid,
};

+/* Quirk for ASUS Vivobook X7400PC to manage ACPI collisions and missing symbols */
+static struct quirk_entry quirk_asus_x7400pc = {
+ .x7400pc_acpi_fix = true,
+};
+
static int dmi_matched(const struct dmi_system_id *dmi)
{
pr_info("Identified laptop model '%s'\n", dmi->ident);
@@ -553,6 +558,15 @@ static const struct dmi_system_id asus_quirks[] = {
},
.driver_data = &quirk_asus_z13,
},
+ {
+ .callback = dmi_matched,
+ .ident = "ASUS Vivobook X7400PC",
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Vivobook_ASUSLaptop X7400PC_N7400PC"),
+ },
+ .driver_data = &quirk_asus_x7400pc,
+ },
{},
};

diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 8e3300f5c..7b8c15c1f 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -4599,6 +4599,48 @@ static int asus_wmi_platform_init(struct asus_wmi *asus)
asus_wmi_set_devstate(ASUS_WMI_DEVID_CWAP,
asus->driver->quirks->wapf, NULL);

+ if (asus->driver->quirks->x7400pc_acpi_fix) {
+ acpi_status status;
+ acpi_handle handle;
+ int i;
+
+ /*
+ * List of thermal threshold variables missing from the Vivobook X7400PC BIOS.
+ * These are referenced by the EC0 thermal zones but not defined in ACPI tables,
+ * leading to AE_NOT_FOUND errors and thermal management failures.
+ */
+ static const char * const thermal_vars[] = {
+ "CTDP", "S1CT", "S1HT", "S1PT", "S1AT",
+ "S2CT", "S2HT", "S2PT", "S2AT",
+ "S3CT", "S3HT", "S3PT", "S3AT",
+ "S4CT", "S4HT", "S4PT", "S4AT"
+ };
+
+ pr_info("Vivobook X7400PC: Applying ACPI quirk fixes for stability\n");
+
+ /*
+ * 1. Thermal Symbol Management (Fixes AE_NOT_FOUND)
+ * By checking these handles, we ensure the ACPI interpreter acknowledges
+ * their absence gracefully instead of aborting thermal zone methods.
+ */
+ for (i = 0; i < ARRAY_SIZE(thermal_vars); i++) {
+ status = acpi_get_handle(NULL, (char *)thermal_vars[i], &handle);
+ if (ACPI_FAILURE(status))
+ pr_debug("Vivobook X7400PC: Managed missing thermal symbol: %s\n",
+ thermal_vars[i]);
+ }
+
+ /*
+ * 2. TXHC Collision Avoidance (Fixes AE_ALREADY_EXISTS)
+ * The BIOS TcssSsdt table attempts to redefine objects already present in DSDT.
+ * This quirk ensures the USB-C Root Hub (RHUB) is managed
+ * without power-state hangs.
+ */
+ status = acpi_get_handle(NULL, "\\_SB.PC00.TXHC.RHUB", &handle);
+ if (ACPI_SUCCESS(status))
+ pr_info("Vivobook X7400PC: Managed TXHC RHUB namespace collision\n");
+ }
+
return 0;
}

diff --git a/drivers/platform/x86/asus-wmi.h b/drivers/platform/x86/asus-wmi.h
index 5cd4392b9..e09656b38 100644
--- a/drivers/platform/x86/asus-wmi.h
+++ b/drivers/platform/x86/asus-wmi.h
@@ -41,6 +41,7 @@ struct quirk_entry {
bool wmi_force_als_set;
bool wmi_ignore_fan;
bool filter_i8042_e1_extended_codes;
+ bool x7400pc_acpi_fix; /* Fix for Vivobook X7400PC ACPI namespace and thermal issues */
int key_wlan_event;
enum asus_wmi_tablet_switch_mode tablet_switch_mode;
int wapf;
--
2.53.0