platform/x86: intel-vbtn: Also handle tablet-mode switch on "Detachable" and "Portable" chassis-types
Commitde9647efea
("platform/x86: intel-vbtn: Only activate tablet mode switch on 2-in-1's") added a DMI chassis-type check to avoid accidentally reporting SW_TABLET_MODE = 1 to userspace on laptops. Some devices with a detachable keyboard and using the intel-vbnt (INT33D6) interface to report if they are in tablet mode (keyboard detached) or not, report 32 / "Detachable" as chassis-type, e.g. the HP Pavilion X2 series. Other devices with a detachable keyboard and using the intel-vbnt (INT33D6) interface to report SW_TABLET_MODE, report 8 / "Portable" as chassis-type. The Dell Venue 11 Pro 7130 is an example of this. Extend the DMI chassis-type check to also accept Portables and Detachables so that the intel-vbtn driver will report SW_TABLET_MODE on these devices. Note the chassis-type check was originally added to avoid a false-positive tablet-mode report on the Dell XPS 9360 laptop. To the best of my knowledge that laptop is using a chassis-type of 9 / "Laptop", so after this commit we still ignore the tablet-switch for that chassis-type. Fixes:de9647efea
("platform/x86: intel-vbtn: Only activate tablet mode switch on 2-in-1's") Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Mario Limonciello <Mario.limonciello@dell.com> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
990fbb4806
commit
1fac39fd03
|
@ -158,12 +158,22 @@ static void detect_tablet_mode(struct platform_device *device)
|
||||||
static bool intel_vbtn_has_switches(acpi_handle handle)
|
static bool intel_vbtn_has_switches(acpi_handle handle)
|
||||||
{
|
{
|
||||||
const char *chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE);
|
const char *chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE);
|
||||||
|
unsigned long chassis_type_int;
|
||||||
unsigned long long vgbs;
|
unsigned long long vgbs;
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
|
|
||||||
if (!(chassis_type && strcmp(chassis_type, "31") == 0))
|
if (kstrtoul(chassis_type, 10, &chassis_type_int))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
switch (chassis_type_int) {
|
||||||
|
case 8: /* Portable */
|
||||||
|
case 31: /* Convertible */
|
||||||
|
case 32: /* Detachable */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
status = acpi_evaluate_integer(handle, "VGBS", NULL, &vgbs);
|
status = acpi_evaluate_integer(handle, "VGBS", NULL, &vgbs);
|
||||||
return ACPI_SUCCESS(status);
|
return ACPI_SUCCESS(status);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue