git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git]
/
drivers
/
input
/
keyboard
/
pxa27x_keypad.c
diff --git
a/drivers/input/keyboard/pxa27x_keypad.c
b/drivers/input/keyboard/pxa27x_keypad.c
index
45767e7
..
6f1516f
100644
(file)
--- a/
drivers/input/keyboard/pxa27x_keypad.c
+++ b/
drivers/input/keyboard/pxa27x_keypad.c
@@
-105,6
+105,8
@@
struct pxa27x_keypad {
struct input_dev *input_dev;
void __iomem *mmio_base;
struct input_dev *input_dev;
void __iomem *mmio_base;
+ int irq;
+
/* matrix key code map */
unsigned int matrix_keycodes[MAX_MATRIX_KEY_NUM];
/* matrix key code map */
unsigned int matrix_keycodes[MAX_MATRIX_KEY_NUM];
@@
-392,6
+394,10
@@
static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t stat
struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
clk_disable(keypad->clk);
struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
clk_disable(keypad->clk);
+
+ if (device_may_wakeup(&pdev->dev))
+ enable_irq_wake(keypad->irq);
+
return 0;
}
return 0;
}
@@
-400,6
+406,9
@@
static int pxa27x_keypad_resume(struct platform_device *pdev)
struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
struct input_dev *input_dev = keypad->input_dev;
struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
struct input_dev *input_dev = keypad->input_dev;
+ if (device_may_wakeup(&pdev->dev))
+ disable_irq_wake(keypad->irq);
+
mutex_lock(&input_dev->mutex);
if (input_dev->users) {
mutex_lock(&input_dev->mutex);
if (input_dev->users) {
@@
-509,6
+518,8
@@
static int __devinit pxa27x_keypad_probe(struct platform_device *pdev)
goto failed_free_dev;
}
goto failed_free_dev;
}
+ keypad->irq = irq;
+
/* Register the input device */
error = input_register_device(input_dev);
if (error) {
/* Register the input device */
error = input_register_device(input_dev);
if (error) {
@@
-516,6
+527,8
@@
static int __devinit pxa27x_keypad_probe(struct platform_device *pdev)
goto failed_free_irq;
}
goto failed_free_irq;
}
+ device_init_wakeup(&pdev->dev, 1);
+
return 0;
failed_free_irq:
return 0;
failed_free_irq:
@@
-539,7
+552,7
@@
static int __devexit pxa27x_keypad_remove(struct platform_device *pdev)
struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
struct resource *res;
struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
struct resource *res;
- free_irq(
platform_get_irq(pdev, 0)
, pdev);
+ free_irq(
keypad->irq
, pdev);
clk_disable(keypad->clk);
clk_put(keypad->clk);
clk_disable(keypad->clk);
clk_put(keypad->clk);