diff options
author | Jeremy Cline <jeremy@jcline.org> | 2018-02-23 09:36:25 -0500 |
---|---|---|
committer | Jeremy Cline <jeremy@jcline.org> | 2018-02-23 09:36:25 -0500 |
commit | 294e924caaebdf82670fbd873f0484fa2f03235d (patch) | |
tree | 15be74fcdc919569cd0f18448b623d0c7570f565 /platform-x86-Only-activate-tablet-mode-switch-on-2-i.patch | |
parent | a62acee612826cbf53475dfdea946759399a6148 (diff) | |
download | kernel-294e924caaebdf82670fbd873f0484fa2f03235d.tar.gz kernel-294e924caaebdf82670fbd873f0484fa2f03235d.tar.xz kernel-294e924caaebdf82670fbd873f0484fa2f03235d.zip |
Linux v4.16-rc2-189-g0f9da844d877
Diffstat (limited to 'platform-x86-Only-activate-tablet-mode-switch-on-2-i.patch')
-rw-r--r-- | platform-x86-Only-activate-tablet-mode-switch-on-2-i.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/platform-x86-Only-activate-tablet-mode-switch-on-2-i.patch b/platform-x86-Only-activate-tablet-mode-switch-on-2-i.patch new file mode 100644 index 000000000..ab9a24faa --- /dev/null +++ b/platform-x86-Only-activate-tablet-mode-switch-on-2-i.patch @@ -0,0 +1,95 @@ +From 7714f7a44a29a4e873d5acfd4c9549c87a4bb4e4 Mon Sep 17 00:00:00 2001 +From: Mario Limonciello <mario.limonciello@dell.com> +Date: Thu, 22 Feb 2018 13:58:42 -0600 +Subject: [PATCH] platform/x86: Only activate tablet mode switch on 2-in-1's + +Some laptops such as the XPS 9360 support the intel-vbtn INT33D6 +interface but don't initialize the bit that intel-vbtn uses to +represent switching tablet mode. + +By running this only on real 2-in-1's it shouldn't cause false +positives. + +Fixes: 30323fb6d5 ("Support tablet mode switch") +Reported-by: Jeremy Cline <jeremy@jcline.org> +Signed-off-by: Mario Limonciello <mario.limonciello@dell.com> +--- + drivers/platform/x86/intel-vbtn.c | 46 ++++++++++++++++++++++++--------------- + 1 file changed, 29 insertions(+), 17 deletions(-) + +diff --git a/drivers/platform/x86/intel-vbtn.c b/drivers/platform/x86/intel-vbtn.c +index b703d6f5b099..8173307d6bb1 100644 +--- a/drivers/platform/x86/intel-vbtn.c ++++ b/drivers/platform/x86/intel-vbtn.c +@@ -7,6 +7,7 @@ + */ + + #include <linux/acpi.h> ++#include <linux/dmi.h> + #include <linux/input.h> + #include <linux/input/sparse-keymap.h> + #include <linux/kernel.h> +@@ -97,9 +98,35 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) + dev_dbg(&device->dev, "unknown event index 0x%x\n", event); + } + +-static int intel_vbtn_probe(struct platform_device *device) ++static void detect_tablet_mode(struct platform_device *device) + { ++ const char *chassis_type = dmi_get_system_info(DMI_CHASSIS_TYPE); ++ struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev); ++ acpi_handle handle = ACPI_HANDLE(&device->dev); + struct acpi_buffer vgbs_output = { ACPI_ALLOCATE_BUFFER, NULL }; ++ union acpi_object *obj; ++ acpi_status status; ++ int m; ++ ++ if (!(chassis_type && strcmp(chassis_type, "31") == 0)) ++ goto out; ++ ++ status = acpi_evaluate_object(handle, "VGBS", NULL, &vgbs_output); ++ if (ACPI_FAILURE(status)) ++ goto out; ++ ++ obj = vgbs_output.pointer; ++ if (!(obj && obj->type == ACPI_TYPE_INTEGER)) ++ goto out; ++ ++ m = !(obj->integer.value & TABLET_MODE_FLAG); ++ input_report_switch(priv->input_dev, SW_TABLET_MODE, m); ++out: ++ kfree(vgbs_output.pointer); ++} ++ ++static int intel_vbtn_probe(struct platform_device *device) ++{ + acpi_handle handle = ACPI_HANDLE(&device->dev); + struct intel_vbtn_priv *priv; + acpi_status status; +@@ -122,22 +149,7 @@ static int intel_vbtn_probe(struct platform_device *device) + return err; + } + +- /* +- * VGBS being present and returning something means we have +- * a tablet mode switch. +- */ +- status = acpi_evaluate_object(handle, "VGBS", NULL, &vgbs_output); +- if (ACPI_SUCCESS(status)) { +- union acpi_object *obj = vgbs_output.pointer; +- +- if (obj && obj->type == ACPI_TYPE_INTEGER) { +- int m = !(obj->integer.value & TABLET_MODE_FLAG); +- +- input_report_switch(priv->input_dev, SW_TABLET_MODE, m); +- } +- } +- +- kfree(vgbs_output.pointer); ++ detect_tablet_mode(device); + + status = acpi_install_notify_handler(handle, + ACPI_DEVICE_NOTIFY, +-- +2.16.2 + |