Message ID | 20190517211741.8906-1-stefano.manni@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] Input: atmel_mxt_ts - add wakeup support | expand |
Hi Sefano, On Fri, May 17, 2019 at 11:17:40PM +0200, Stefano Manni wrote: > Add wakeup support to the maxtouch driver. > The device can wake up the system from suspend, > mark the IRQ as wakeup capable, so that device > irq is not disabled during system suspend. This should already be handled by I2C core, see lines after "if (client->flags & I2C_CLIENT_WAKE)" in drivers/i2c/i2c-core-base.c. Unless there is dedicated wakeup interrupt we configure main interrupt as wake source. Thanks.
Hi Dmitry, On Fri, 2019-05-17 at 14:30 -0700, Dmitry Torokhov wrote: > Hi Sefano, > > On Fri, May 17, 2019 at 11:17:40PM +0200, Stefano Manni wrote: > > Add wakeup support to the maxtouch driver. > > The device can wake up the system from suspend, > > mark the IRQ as wakeup capable, so that device > > irq is not disabled during system suspend. > > This should already be handled by I2C core, see lines after "if > (client->flags & I2C_CLIENT_WAKE)" in drivers/i2c/i2c-core-base.c. > > Unless there is dedicated wakeup interrupt we configure main > interrupt > as wake source. > what's about the other drivers (e.g. ili210x.c) doing like this? Shall they be purged? Thank you.
On Sat, May 18, 2019 at 06:55:10PM +0200, stefano.manni@gmail.com wrote: > Hi Dmitry, > > On Fri, 2019-05-17 at 14:30 -0700, Dmitry Torokhov wrote: > > Hi Sefano, > > > > On Fri, May 17, 2019 at 11:17:40PM +0200, Stefano Manni wrote: > > > Add wakeup support to the maxtouch driver. > > > The device can wake up the system from suspend, > > > mark the IRQ as wakeup capable, so that device > > > irq is not disabled during system suspend. > > > > This should already be handled by I2C core, see lines after "if > > (client->flags & I2C_CLIENT_WAKE)" in drivers/i2c/i2c-core-base.c. > > > > Unless there is dedicated wakeup interrupt we configure main > > interrupt > > as wake source. > > > > what's about the other drivers (e.g. ili210x.c) doing like this? > Shall they be purged? They were likely done before I2C and driver core were enhanced to handle wakeup automatically. We might want to clean them up, as long as we verify that they keep working. Thanks.
diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 5c63d25ce84e..2e0abc0b665d 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -3041,6 +3041,7 @@ static const struct dmi_system_id chromebook_T9_suspend_dmi[] = { static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct mxt_data *data; + struct device_node *node = client->dev.of_node; int error; /* @@ -3125,6 +3126,12 @@ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id) goto err_free_object; } + if (node) { + if (of_property_read_bool(node, "wakeup-source") || + of_property_read_bool(node, "linux,wakeup")) + device_init_wakeup(&client->dev, true); + } + return 0; err_free_object: @@ -3156,6 +3163,9 @@ static int __maybe_unused mxt_suspend(struct device *dev) mutex_lock(&input_dev->mutex); + if (device_may_wakeup(&client->dev)) + enable_irq_wake(client->irq); + if (input_dev->users) mxt_stop(data); @@ -3175,6 +3185,9 @@ static int __maybe_unused mxt_resume(struct device *dev) mutex_lock(&input_dev->mutex); + if (device_may_wakeup(&client->dev)) + disable_irq_wake(client->irq); + if (input_dev->users) mxt_start(data);
Add wakeup support to the maxtouch driver. The device can wake up the system from suspend, mark the IRQ as wakeup capable, so that device irq is not disabled during system suspend. Signed-off-by: Stefano Manni <stefano.manni@gmail.com> --- drivers/input/touchscreen/atmel_mxt_ts.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)