Add capability for the touchscreen to wakeup the host on touch event.
Signed-off-by: Loic Poulain <redacted>
---
drivers/input/touchscreen/atmel_mxt_ts.c | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
index 05de92c..807f449 100644
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
@@ -3223,6 +3223,8 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
return error;
}
+ device_set_wakeup_capable(&client->dev, true);
+
error = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
data->regulators);
if (error) {@@ -3309,8 +3311,12 @@ static int __maybe_unused mxt_suspend(struct device *dev)
mutex_lock(&input_dev->mutex);
- if (input_device_enabled(input_dev))
- mxt_stop(data);
+ if (input_device_enabled(input_dev)) {
+ if (device_may_wakeup(dev))
+ enable_irq_wake(data->irq);
+ else
+ mxt_stop(data);
+ }
mutex_unlock(&input_dev->mutex);
@@ -3332,8 +3338,12 @@ static int __maybe_unused mxt_resume(struct device *dev)
mutex_lock(&input_dev->mutex);
- if (input_device_enabled(input_dev))
- mxt_start(data);
+ if (input_device_enabled(input_dev)) {
+ if (device_may_wakeup(dev))
+ disable_irq_wake(data->irq);
+ else
+ mxt_start(data);
+ }
mutex_unlock(&input_dev->mutex);
--
2.7.4