55 lines
1.8 KiB
Diff
55 lines
1.8 KiB
Diff
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
|
|
|