ACPI / bus: Parse tables as term_list for Dell XPS 9570 and Precision M5530

"Linux Kernel Mailing List" <[email protected]>
Newsgroups gmane.linux.kernel.commits.head
Message-ID <[email protected]>
Web:        https://git.kernel.org/torvalds/c/36904703aeeeb6cd31993f1353c8325006229f9a
Commit:     36904703aeeeb6cd31993f1353c8325006229f9a
Parent:     63347db0affadcbccd5613116ea8431c70139b3e
Refname:    refs/heads/master
Author:     Kai Heng Feng <[email protected]>
AuthorDate: Mon Feb 5 13:19:24 2018 +0800
Committer:  Rafael J. Wysocki <[email protected]>
CommitDate: Tue Feb 6 18:28:24 2018 +0100

    ACPI / bus: Parse tables as term_list for Dell XPS 9570 and Precision M5530
    
    The i2c touchpad on Dell XPS 9570 and Precision M5530 doesn't work out
    of box.
    
    The touchpad relies on its _INI method to update its _HID value from
    XXXX0000 to SYNA2393.
    
    Also, the _STA relies on value of I2CN to report correct status.
    
    Set acpi_gbl_parse_table_as_term_list so the value of I2CN can be
    correctly set up, and _INI can get run. The ACPI table in this machine
    is designed to get parsed this way.
    
    Also, change the quirk table to a more generic name.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=198515
    Signed-off-by: Kai-Heng Feng <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
---
 drivers/acpi/bus.c | 38 +++++++++++++++++++++++++++++++-------
 1 file changed, 31 insertions(+), 7 deletions(-)

diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 433bb5a3f327..5c00e5e18da8 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -66,10 +66,37 @@ static int set_copy_dsdt(const struct dmi_system_id *id)
 	return 0;
 }
 #endif
+static int set_gbl_term_list(const struct dmi_system_id *id)
+{
+	acpi_gbl_parse_table_as_term_list = 1;
+	return 0;
+}
 
-static const struct dmi_system_id dsdt_dmi_table[] __initconst = {
+static const struct dmi_system_id acpi_quirks_dmi_table[] __initconst = {
+	/*
+	 * Touchpad on Dell XPS 9570/Precision M5530 doesn't work under I2C
+	 * mode.
+	 * https://bugzilla.kernel.org/show_bug.cgi?id=198515
+	 */
+	{
+		.callback = set_gbl_term_list,
+		.ident = "Dell Precision M5530",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "Precision M5530"),
+		},
+	},
+	{
+		.callback = set_gbl_term_list,
+		.ident = "Dell XPS 15 9570",
+		.matches = {
+			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+			DMI_MATCH(DMI_PRODUCT_NAME, "XPS 15 9570"),
+		},
+	},
 	/*
 	 * Invoke DSDT corruption work-around on all Toshiba Satellite.
+	 * DSDT will be copied to memory.
 	 * https://bugzilla.kernel.org/show_bug.cgi?id=14679
 	 */
 	{
@@ -83,7 +110,7 @@ static const struct dmi_system_id dsdt_dmi_table[] __initconst = {
 	{}
 };
 #else
-static const struct dmi_system_id dsdt_dmi_table[] __initconst = {
+static const struct dmi_system_id acpi_quirks_dmi_table[] __initconst = {
 	{}
 };
 #endif
@@ -1008,11 +1035,8 @@ void __init acpi_early_init(void)
 
 	acpi_permanent_mmap = true;
 
-	/*
-	 * If the machine falls into the DMI check table,
-	 * DSDT will be copied to memory
-	 */
-	dmi_check_system(dsdt_dmi_table);
+	/* Check machine-specific quirks */
+	dmi_check_system(acpi_quirks_dmi_table);
 
 	status = acpi_reallocate_root_table();
 	if (ACPI_FAILURE(status)) {
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.