summaryrefslogtreecommitdiffstats
path: root/0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch
diff options
context:
space:
mode:
authorPeter Robinson <pbrobinson@gmail.com>2017-07-12 10:22:44 +0100
committerPeter Robinson <pbrobinson@gmail.com>2017-07-12 10:22:44 +0100
commit87fc2a45ad81705dc8559e93d608720c963f334c (patch)
treea23cfd78e8d10a59b35daea33bf9bccf2e01c920 /0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch
parent272a38dcb88cb85ea5d34fdd5134f38da10cc7ad (diff)
downloadkernel-87fc2a45ad81705dc8559e93d608720c963f334c.tar.gz
kernel-87fc2a45ad81705dc8559e93d608720c963f334c.tar.xz
kernel-87fc2a45ad81705dc8559e93d608720c963f334c.zip
add missing patches from the 4.12 GA commit
Diffstat (limited to '0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch')
-rw-r--r--0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch b/0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch
new file mode 100644
index 000000000..14b4c27bf
--- /dev/null
+++ b/0016-Input-silead-Do-not-try-to-directly-access-the-GPIO-.patch
@@ -0,0 +1,54 @@
+From fd4fb1f6633b21042ff084868323e15e708fe1cd Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede@redhat.com>
+Date: Sun, 1 Jan 2017 22:11:20 +0100
+Subject: [PATCH 16/16] Input: silead: Do not try to directly access the GPIO
+ when using ACPI pm
+
+On some x86 tablets we cannot directly access the GPIOs as they are
+claimed by the ACPI tables, so check it the i2c client is not being
+power-managed by ACPI before trying to get the power pin GPIO.
+
+Note this is a workaround patch to fix this until Andy' gpiolib-ACPI
+patches which make gpiolib more strict land, once those are landed this
+patch is no longer needed.
+
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ drivers/input/touchscreen/silead.c | 22 ++++++++++++++++------
+ 1 file changed, 16 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
+index c0ba40c09699..30fba3cbe277 100644
+--- a/drivers/input/touchscreen/silead.c
++++ b/drivers/input/touchscreen/silead.c
+@@ -517,12 +518,21 @@ static int silead_ts_probe(struct i2c_client *client,
+ if (error)
+ return error;
+
+- /* Power GPIO pin */
+- data->gpio_power = devm_gpiod_get_optional(dev, "power", GPIOD_OUT_LOW);
+- if (IS_ERR(data->gpio_power)) {
+- if (PTR_ERR(data->gpio_power) != -EPROBE_DEFER)
+- dev_err(dev, "Shutdown GPIO request failed\n");
+- return PTR_ERR(data->gpio_power);
++ /*
++ * If device power is not managed by ACPI, get the power_gpio
++ * and manage it ourselves.
++ */
++#ifdef CONFIG_ACPI
++ if (!acpi_bus_power_manageable(ACPI_HANDLE(dev)))
++#endif
++ {
++ data->gpio_power = devm_gpiod_get_optional(dev, "power",
++ GPIOD_OUT_LOW);
++ if (IS_ERR(data->gpio_power)) {
++ if (PTR_ERR(data->gpio_power) != -EPROBE_DEFER)
++ dev_err(dev, "Power GPIO request failed\n");
++ return PTR_ERR(data->gpio_power);
++ }
+ }
+
+ error = silead_ts_setup(client);
+--
+2.13.0
+