summaryrefslogtreecommitdiff
path: root/drivers/input/keyboard/nomadik-ske-keypad.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/keyboard/nomadik-ske-keypad.c')
-rw-r--r--drivers/input/keyboard/nomadik-ske-keypad.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/input/keyboard/nomadik-ske-keypad.c b/drivers/input/keyboard/nomadik-ske-keypad.c
index 9a3e7dfb605..7ab061f0124 100644
--- a/drivers/input/keyboard/nomadik-ske-keypad.c
+++ b/drivers/input/keyboard/nomadik-ske-keypad.c
@@ -67,6 +67,7 @@
* @keymap: matrix scan code table for keycodes
* @clk: clock structure pointer
* @enable: flag to enable the driver event
+ * @enable_on_resume: set if keypad should be enabled on resume
* @regulator: pointer to the regulator used for ske kyepad
* @gpio_input_irq: array for gpio irqs
* @key_pressed: hold the key state
@@ -89,6 +90,7 @@ struct ske_keypad {
struct clk *clk;
spinlock_t ske_keypad_lock;
bool enable;
+ bool enable_on_resume;
struct regulator *regulator;
int gpio_input_irq[SKE_KPD_MAX_ROWS];
int key_pressed;
@@ -790,6 +792,9 @@ static int ske_keypad_suspend(struct device *dev)
cancel_delayed_work_sync(&keypad->work);
cancel_delayed_work_sync(&keypad->scan_work);
disable_irq(irq);
+
+ keypad->enable_on_resume = keypad->enable;
+
if (keypad->enable) {
ske_mode_enable(keypad, false);
keypad->enable = false;
@@ -808,7 +813,7 @@ static int ske_keypad_resume(struct device *dev)
if (device_may_wakeup(dev))
disable_irq_wake(irq);
else {
- if (!keypad->enable) {
+ if (keypad->enable_on_resume) {
keypad->enable = true;
ske_mode_enable(keypad, true);
}