[PATCH] Input: tca6416-keypad: Suspend/Resume wakeup support

STALE5687d

4 messages, 2 authors, 2011-03-16 · open the first message on its own page

[PATCH] Input: tca6416-keypad: Suspend/Resume wakeup support

From: Magnus Damm <magnus.damm@gmail.com>
Date: 2011-03-16 05:10:30

From: Magnus Damm <redacted>

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 <redacted>
---

 drivers/input/keyboard/tca6416-keypad.c |   26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
--- 0001/drivers/input/keyboard/tca6416-keypad.c
+++ work/drivers/input/keyboard/tca6416-keypad.c	2011-03-16 12:53:34.000000000 +0900
@@ -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_remo
 	return 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),

Re: [PATCH] Input: tca6416-keypad: Suspend/Resume wakeup support

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2011-03-16 05:32:02

On Wed, Mar 16, 2011 at 02:10:30PM +0900, Magnus Damm wrote:
From: Magnus Damm <redacted>

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.
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.

-- 
Dmitry


Input: tca6416-keypad - Suspend/Resume wakeup support

From: Magnus Damm <redacted>

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 <redacted>
Signed-off-by: Dmitry Torokhov <redacted>
---

 drivers/input/keyboard/tca6416-keypad.c |   28 ++++++++++++++++++++++++++++
 1 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/drivers/input/keyboard/tca6416-keypad.c b/drivers/input/keyboard/tca6416-keypad.c
index 800fbcc..3afea3f 100644
--- a/drivers/input/keyboard/tca6416-keypad.c
+++ b/drivers/input/keyboard/tca6416-keypad.c
@@ -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),

Re: [PATCH] Input: tca6416-keypad: Suspend/Resume wakeup support

From: Magnus Damm <magnus.damm@gmail.com>
Date: 2011-03-16 05:45:11

On Wed, Mar 16, 2011 at 2:32 PM, Dmitry Torokhov
[off-list ref] wrote:
On Wed, Mar 16, 2011 at 02:10:30PM +0900, Magnus Damm wrote:
quoted
From: Magnus Damm <redacted>

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.
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

Re: [PATCH] Input: tca6416-keypad: Suspend/Resume wakeup support

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2011-03-16 05:51:08

On Wed, Mar 16, 2011 at 02:45:11PM +0900, Magnus Damm wrote:
On Wed, Mar 16, 2011 at 2:32 PM, Dmitry Torokhov
[off-list ref] wrote:
quoted
On Wed, Mar 16, 2011 at 02:10:30PM +0900, Magnus Damm wrote:
quoted
From: Magnus Damm <redacted>

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.
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.
Excellent, I'll queue it up.

Thank you for testing the updated patch.

-- 
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help