Commit b2190cc3 authored by Kai Heng Feng's avatar Kai Heng Feng Committed by Greg Kroah-Hartman
Browse files

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

commit 36904703 upstream.

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: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b95f8ca8
Loading
Loading
Loading
Loading
+31 −7
Original line number Diff line number Diff line
@@ -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
@@ -1001,11 +1028,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)) {