diff options
Diffstat (limited to 'drivers/input/keyboard/bf54x-keys.c')
-rw-r--r-- | drivers/input/keyboard/bf54x-keys.c | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/drivers/input/keyboard/bf54x-keys.c b/drivers/input/keyboard/bf54x-keys.c index 05e3494cf8b8..54ed8e2e1c02 100644 --- a/drivers/input/keyboard/bf54x-keys.c +++ b/drivers/input/keyboard/bf54x-keys.c | |||
@@ -312,6 +312,8 @@ static int __devinit bfin_kpad_probe(struct platform_device *pdev) | |||
312 | 312 | ||
313 | bfin_write_KPAD_CTL(bfin_read_KPAD_CTL() | KPAD_EN); | 313 | bfin_write_KPAD_CTL(bfin_read_KPAD_CTL() | KPAD_EN); |
314 | 314 | ||
315 | device_init_wakeup(&pdev->dev, 1); | ||
316 | |||
315 | printk(KERN_ERR DRV_NAME | 317 | printk(KERN_ERR DRV_NAME |
316 | ": Blackfin BF54x Keypad registered IRQ %d\n", bf54x_kpad->irq); | 318 | ": Blackfin BF54x Keypad registered IRQ %d\n", bf54x_kpad->irq); |
317 | 319 | ||
@@ -354,12 +356,40 @@ static int __devexit bfin_kpad_remove(struct platform_device *pdev) | |||
354 | return 0; | 356 | return 0; |
355 | } | 357 | } |
356 | 358 | ||
359 | #ifdef CONFIG_PM | ||
360 | static int bfin_kpad_suspend(struct platform_device *pdev, pm_message_t state) | ||
361 | { | ||
362 | struct bf54x_kpad *bf54x_kpad = platform_get_drvdata(pdev); | ||
363 | |||
364 | if (device_may_wakeup(&pdev->dev)) | ||
365 | enable_irq_wake(bf54x_kpad->irq); | ||
366 | |||
367 | return 0; | ||
368 | } | ||
369 | |||
370 | static int bfin_kpad_resume(struct platform_device *pdev) | ||
371 | { | ||
372 | struct bf54x_kpad *bf54x_kpad = platform_get_drvdata(pdev); | ||
373 | |||
374 | if (device_may_wakeup(&pdev->dev)) | ||
375 | disable_irq_wake(bf54x_kpad->irq); | ||
376 | |||
377 | return 0; | ||
378 | } | ||
379 | #else | ||
380 | # define bfin_kpad_suspend NULL | ||
381 | # define bfin_kpad_resume NULL | ||
382 | #endif | ||
383 | |||
357 | struct platform_driver bfin_kpad_device_driver = { | 384 | struct platform_driver bfin_kpad_device_driver = { |
358 | .probe = bfin_kpad_probe, | ||
359 | .remove = __devexit_p(bfin_kpad_remove), | ||
360 | .driver = { | 385 | .driver = { |
361 | .name = DRV_NAME, | 386 | .name = DRV_NAME, |
362 | } | 387 | .owner = THIS_MODULE, |
388 | }, | ||
389 | .probe = bfin_kpad_probe, | ||
390 | .remove = __devexit_p(bfin_kpad_remove), | ||
391 | .suspend = bfin_kpad_suspend, | ||
392 | .resume = bfin_kpad_resume, | ||
363 | }; | 393 | }; |
364 | 394 | ||
365 | static int __init bfin_kpad_init(void) | 395 | static int __init bfin_kpad_init(void) |
@@ -378,3 +408,4 @@ module_exit(bfin_kpad_exit); | |||
378 | MODULE_LICENSE("GPL"); | 408 | MODULE_LICENSE("GPL"); |
379 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); | 409 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); |
380 | MODULE_DESCRIPTION("Keypad driver for BF54x Processors"); | 410 | MODULE_DESCRIPTION("Keypad driver for BF54x Processors"); |
411 | MODULE_ALIAS("platform:bf54x-keys"); | ||