On Monday, February 5, 2018 6:19:24 AM CET Kai-Heng Feng wrote: > 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. > > Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=198515 > Cc: Mario Limonciello <mario.limonciello@xxxxxxxx> > Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx> > --- > v4: Remove unnecessary message for user. > > v3: Put the function under right #ifdef, comment adjustment > > v2: Andy's suggestion, merge to a single quirk table. > 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 f87ed3be779a..11c6dda233d6 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 > @@ -1019,11 +1046,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)) { > Applied, thanks! -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html