Skip to content

Commit

Permalink
Input: tca6416-keypad - suspend/resume wakeup support
Browse files Browse the repository at this point in the history
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 <damm@opensource.se>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
  • Loading branch information
Magnus Damm authored and Dmitry Torokhov committed Mar 16, 2011
1 parent 4c75de3 commit 64dcddd
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions drivers/input/keyboard/tca6416-keypad.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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),
Expand Down

0 comments on commit 64dcddd

Please sign in to comment.