> -----Original Message----- > From: Hans de Goede <hdegoede@xxxxxxxxxx> > Sent: Friday, May 15, 2020 1:39 PM > To: Darren Hart; Andy Shevchenko > Cc: Hans de Goede; Limonciello, Mario; platform-driver-x86@xxxxxxxxxxxxxxx; > linux-kernel@xxxxxxxxxxxxxxx > Subject: [PATCH] platform/x86: intel-vbtn: Only blacklist SW_TABLET_MODE on the > 9 / "Laptop" chasis-type > > > [EXTERNAL EMAIL] > > The HP Stream x360 11-p000nd no longer report SW_TABLET_MODE state / events > with recent kernels. This model reports a chassis-type of 10 / "Notebook" > which is not on the recently introduced chassis-type whitelist > > Commit de9647efeaa9 ("platform/x86: intel-vbtn: Only activate tablet mode > switch on 2-in-1's") added a chassis-type whitelist and only listed 31 / > "Convertible" as being capable of generating valid SW_TABLET_MOD events. > > Commit 1fac39fd0316 ("platform/x86: intel-vbtn: Also handle tablet-mode > switch on "Detachable" and "Portable" chassis-types") extended the > whitelist with chassis-types 8 / "Portable" and 32 / "Detachable". > > And now we need to exten the whitelist again with 10 / "Notebook"... > > The issue original fixed by the whitelist is really a ACPI DSDT bug on > the Dell XPS 9360 where it has a VGBS which reports it is in tablet mode > even though it is not a 2-in-1 at all, but a regular laptop. > > So since this is a workaround for a DSDT issue on that specific model, > instead of extending the whitelist over and over again, lets switch to > a blacklist and only blacklist the chassis-type of the model for which > the chassis-type check was added. > > Note this also fixes the current version of the code no longer checking > if dmi_get_system_info(DMI_CHASSIS_TYPE) returns NULL. Makes sense, thanks. Reviewed-by: Mario Limonciello <Mario.limonciello@xxxxxxxx> > > Fixes: 1fac39fd0316 ("platform/x86: intel-vbtn: Also handle tablet-mode switch > on "Detachable" and "Portable" chassis-types") > Cc: Mario Limonciello <mario.limonciello@xxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > Note I can even see there being 2-in-1s using intel-vbtn to report > SW_TABLET_MODE with a chassis-type of 9. So maybe we should make the > quirk / blacklist stricter by combining it with a > dmi_name_in_vendors("Dell") check ? > --- > drivers/platform/x86/intel-vbtn.c | 19 ++++++++----------- > 1 file changed, 8 insertions(+), 11 deletions(-) > > diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel- > vbtn.c > index ef92c1c3adbd..0487b606a274 100644 > --- a/drivers/platform/x86/intel-vbtn.c > +++ b/drivers/platform/x86/intel-vbtn.c > @@ -170,21 +170,18 @@ static bool intel_vbtn_has_buttons(acpi_handle handle) > static bool intel_vbtn_has_switches(acpi_handle handle) > { > const char *chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE); > - unsigned long chassis_type_int; > unsigned long long vgbs; > acpi_status status; > > - if (kstrtoul(chassis_type, 10, &chassis_type_int)) > - return false; > - > - switch (chassis_type_int) { > - case 8: /* Portable */ > - case 31: /* Convertible */ > - case 32: /* Detachable */ > - break; > - default: > + /* > + * Some normal laptops have a VGBS method despite being non-convertible > + * and their VGBS method always returns 0, causing detect_tablet_mode() > + * to report SW_TABLET_MODE=1 to userspace, which causes issues. > + * These laptops have a DMI chassis_type of 9 ("Laptop"), do not report > + * switches on any devices with a DMI chassis_type of 9. > + */ > + if (chassis_type && strcmp(chassis_type, "9") == 0) > return false; > - } > > status = acpi_evaluate_integer(handle, "VGBS", NULL, &vgbs); > return ACPI_SUCCESS(status); > -- > 2.26.0