Input: tca6416-keypad: Suspend/Resume wakeup support
Subsystems (3)
PATCH 1/1 Input: tca6416-keypad: Suspend/Resume wakeup support
From: Magnus Damm <[email protected]>
Extend the tca6416 driver to use enable_irq_wake() and disable_irq_wake() in the suspend/resume hooks.
This makes it possible to wake up from suspend-to-ram using a tca6416 key on the sh7372 mackerel board.
---
drivers/input/keyboard/tca6416-keypad.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
drivers/input/keyboard/tca6416-keypad.c +26 -0
@@ -297,6 +297,7 @@ static int __devinit tca6416_keypad_prob }i2c_set_clientdata (client, chip); +device_init_wakeup (&client->dev,1 );return 0 ;
@@ -326,10 +327,35 @@ static int __devexit tca6416_keypad_remoreturn 0 ; } +static int tca6416_keypad_suspend (struct device *dev) +{ +struct tca6416_keypad_chip *chip =dev_get_drvdata (dev); + +if (device_may_wakeup (dev)) +enable_irq_wake (chip->irqnum); + +return 0 ; +} + +static int tca6416_keypad_resume (struct device *dev) +{ +struct tca6416_keypad_chip *chip =dev_get_drvdata (dev); + +if (device_may_wakeup (dev)) +disable_irq_wake (chip->irqnum); + +return 0 ; +} + +static const struct dev_pm_ops tca6416_keypad_dev_pm_ops = { + .suspend = tca6416_keypad_suspend, + .resume = tca6416_keypad_resume, +};static struct i2c_driver tca6416_keypad_driver = { .driver = { .name ="tca6416-keypad" , + .pm = &tca6416_keypad_dev_pm_ops, }, .probe = tca6416_keypad_probe, .remove =__devexit_p (tca6416_keypad_remove),
Dmitry Torokhov
maintainerQuoted 8 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Extend the tca6416 driver to use
enable_irq_wake()anddisable_irq_wake()in the suspend/resume hooks.This makes it possible to wake up from suspend-to-ram using a tca6416 key on the sh7372 mackerel board.
Hi Magnus,
Looks good, but why don't we guard PM code with CONFIG_PM_SLEEP, like below? I also believe we should use bus-specific helpers to access private driver data since it does not have to stay alias for the core data pointer.
Thanks.
Signature · 19 lines
Dmitry Input: tca6416-keypad - Suspend/Resume wakeup support From: Magnus Damm <[email protected]> Extend the tca6416 driver to use enable_irq_wake() and disable_irq_wake() in the suspend/resume hooks. This makes it possible to wake up from suspend-to-ram using a tca6416 key on the sh7372 mackerel board. Signed-off-by: Magnus Damm <[email protected]> Signed-off-by: Dmitry Torokhov <[email protected]> --- drivers/input/keyboard/tca6416-keypad.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-)
drivers/input/keyboard/tca6416-keypad.c +28 -0
@@ -297,6 +297,7 @@ static int __devinit tca6416_keypad_probe(struct i2c_client *client, }i2c_set_clientdata (client, chip); +device_init_wakeup (&client->dev,1 );return 0 ;
@@ -326,10 +327,37 @@ static int __devexit tca6416_keypad_remove(struct i2c_client *client)return 0 ; } +#ifdef CONFIG_PM_SLEEP +static int tca6416_keypad_suspend (struct device *dev) +{ +struct i2c_client *client =to_i2c_client (dev); +struct tca6416_keypad_chip *chip =i2c_get_clientdata (client); + +if (device_may_wakeup (dev)) +enable_irq_wake (chip->irqnum); + +return 0 ; +} + +static int tca6416_keypad_resume (struct device *dev) +{ +struct i2c_client *client =to_i2c_client (dev); +struct tca6416_keypad_chip *chip =i2c_get_clientdata (client); + +if (device_may_wakeup (dev)) +disable_irq_wake (chip->irqnum); + +return 0 ; +} +#endif + +static SIMPLE_DEV_PM_OPS(tca6416_keypad_dev_pm_ops, + tca6416_keypad_suspend, tca6416_keypad_resume);static struct i2c_driver tca6416_keypad_driver = { .driver = { .name ="tca6416-keypad" , + .pm = &tca6416_keypad_dev_pm_ops, }, .probe = tca6416_keypad_probe, .remove =__devexit_p (tca6416_keypad_remove),
Quoted 10 lines · Dmitry Torokhov
Quoted 8 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Extend the tca6416 driver to use
enable_irq_wake()anddisable_irq_wake()in the suspend/resume hooks.This makes it possible to wake up from suspend-to-ram using a tca6416 key on the sh7372 mackerel board.
Quoted 6 lines
Hi Magnus,
Looks good, but why don't we guard PM code with
CONFIG_PM_SLEEP, like below? I also believe we should use bus-specific helpers to access private driver data since it does not have to stay alias for the core data pointer.
Hi Dmitry,
Thank you for the updated patch, your version looks much better than mine. I tested your version on my Mackerel board a few minutes ago and it is still working as expected. Unless there are any objections, please merge your version of the patch.
Cheers,
/ magnus
Dmitry Torokhov
maintainerQuoted 19 lines · Magnus Damm
Quoted 10 lines · Dmitry Torokhov
Quoted 8 lines · Magnus Damm
From: Magnus Damm <[email protected]>
Extend the tca6416 driver to use
enable_irq_wake()anddisable_irq_wake()in the suspend/resume hooks.This makes it possible to wake up from suspend-to-ram using a tca6416 key on the sh7372 mackerel board.
Quoted 6 lines
Hi Magnus,
Looks good, but why don't we guard PM code with
CONFIG_PM_SLEEP, like below? I also believe we should use bus-specific helpers to access private driver data since it does not have to stay alias for the core data pointer.
Quoted 7 lines
Hi Dmitry,
Thank you for the updated patch, your version looks much better than mine. I tested your version on my Mackerel board a few minutes ago and it is still working as expected. Unless there are any objections, please merge your version of the patch.
Excellent, I'll queue it up.
Thank you for testing the updated patch.
Signature · 1 line
Dmitry