aboutsummaryrefslogtreecommitdiff
path: root/drivers/input
diff options
context:
space:
mode:
authorSundar Iyer <sundar.iyer@stericsson.com>2010-10-29 21:49:02 +0530
committerSundar Iyer <sundar.iyer@stericsson.com>2010-11-10 18:04:20 +0530
commit783bae97b3a295c30d87209bb79bebd367c33818 (patch)
tree42906aa6ee77e2d0cb7b89ef4b4d19e8bdf44b1e /drivers/input
parent861d31a241a5a4054539d62eed223bf85bf84fb9 (diff)
input/tc35893: fix keypad suspend/resume
Fix crashes during suspend/resume and enable wakeup through the NUIB keyboard for mach-ux500 ST-Ericcson ID: TASK_ER170555 Change-Id: I2232209ef08a64a4b58a7ea91d9f7b3baeec1e17 Signed-off-by: Sundar Iyer <sundar.iyer@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/7524 Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'drivers/input')
-rw-r--r--drivers/input/keyboard/tc35893-keypad.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/input/keyboard/tc35893-keypad.c b/drivers/input/keyboard/tc35893-keypad.c
index 7eb0a191e26..85472e018e9 100644
--- a/drivers/input/keyboard/tc35893-keypad.c
+++ b/drivers/input/keyboard/tc35893-keypad.c
@@ -544,25 +544,36 @@ static int __devexit tc35893_keypad_remove(struct i2c_client *client)
}
#ifdef CONFIG_PM
-static int tc35893_keypad_suspend(struct i2c_client *client)
+static int tc35893_keypad_suspend(struct device *dev)
{
+ struct i2c_client *client = to_i2c_client(dev);
struct tc_keypad *keypad = i2c_get_clientdata(client);
+ int irq = keypad->board->irq;
+
+ client = keypad->client;
+ /* disable the IRQ */
if (!device_may_wakeup(&client->dev))
- tc35893_set_bits(keypad->client, TC_KBDMSK,
- ~(TC_EVT_LOSS_INT | TC_EVT_INT), 0x0);
+ tc35893_keypad_disable(client);
+ else
+ enable_irq_wake(irq);
return 0;
}
-static int tc35893_keypad_resume(struct i2c_client *client)
+static int tc35893_keypad_resume(struct device *dev)
{
+ struct i2c_client *client = to_i2c_client(dev);
struct tc_keypad *keypad = i2c_get_clientdata(client);
+ int irq = keypad->board->irq;
+
+ client = keypad->client;
/* enable the IRQ */
if (!device_may_wakeup(&client->dev))
- tc35893_set_bits(keypad->client, TC_KBDMSK,
- 0x0, TC_EVT_LOSS_INT | TC_EVT_INT);
+ tc35893_keypad_enable(client);
+ else
+ disable_irq_wake(irq);
return 0;
}