summaryrefslogtreecommitdiffstats
path: root/drivers/acpi/x86/utils.c
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2017-07-09 21:05:13 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-07-12 13:26:10 +0200
commitb5cc1699191829cda2dd9447210e1e801e2082c9 (patch)
tree09cc1dd203abc907787747d8c135dbfc1aaf0a29 /drivers/acpi/x86/utils.c
parent3b6a70be5ac81673af1ca8b4dae84743cb9fcc87 (diff)
downloadlinux-b5cc1699191829cda2dd9447210e1e801e2082c9.tar.gz
linux-b5cc1699191829cda2dd9447210e1e801e2082c9.tar.bz2
linux-b5cc1699191829cda2dd9447210e1e801e2082c9.zip
ACPI / x86: Add Dell Venue 11 Pro 7130 touchscreen to always_present_ids
The _STA method of the Venue 11 Pro 7130 touchscreen has this ugliness: Method (_STA, 0, NotSerialized) // _STA: Status { If ((SDS1 & One) == One) { If (RST1 == Zero) { Return (0x0F) } ElseIf (RST2 == Zero) { RST2 = One TMRV = Timer } Else { Local0 = ((Timer - TMRV) / 0x2710) If (Local0 > TMRI) { RST2 = Zero RST1 = Zero } } } Else { Return (Zero) } } Whereby RST1 gets set by _SB.PCI0.GFX0.LCD.LCD1._ON, this means that after RST1 has been set first _STA must be called to set TIMER and then after enough time has elapsed _STA must be called twice more, once to clear RST1 and once to finally return 0xf before the touchscreen will show up. Which is just crazy. This commit adds an always_present_ids entry for the SYNA7500 touchscreen ACPI node, together with a DMI match for the Venue 11 Pro 7130, fixing the touchscreen not working on this device. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/x86/utils.c')
-rw-r--r--drivers/acpi/x86/utils.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/acpi/x86/utils.c b/drivers/acpi/x86/utils.c
index b0e16516adfd..eb6caf6f708b 100644
--- a/drivers/acpi/x86/utils.c
+++ b/drivers/acpi/x86/utils.c
@@ -61,6 +61,15 @@ static const struct always_present_id always_present_ids[] = {
* on Cherry Trail devices, without it we get nobody cared IRQ msgs.
*/
ENTRY("INT0002", "1", ICPU(INTEL_FAM6_ATOM_AIRMONT), {}),
+ /*
+ * On the Dell Venue 11 Pro 7130 the DSDT hides the touchscreen ACPI
+ * device until a certain time after _SB.PCI0.GFX0.LCD.LCD1._ON gets
+ * called has passed *and* _STA has been called at least 3 times since.
+ */
+ ENTRY("SYNA7500", "1", ICPU(INTEL_FAM6_HASWELL_ULT), {
+ DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
+ DMI_MATCH(DMI_PRODUCT_NAME, "Venue 11 Pro 7130"),
+ }),
};
bool acpi_device_always_present(struct acpi_device *adev)