diff options
| author | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2013-12-12 20:12:30 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-12-12 21:19:26 -0500 |
| commit | 222ead7fd80f455ac377ae20dfeb56cab513db96 (patch) | |
| tree | d32eb368882569d2b9ba1d30805b0e3f658b7f9b /drivers/rtc | |
| parent | d73238d4a6ca2eadbd14565d769706c85650c641 (diff) | |
rtc: s5m: enable IRQ wake during suspend
Add PM suspend/resume ops to rtc-s5m driver and enable IRQ wake during
suspend so the RTC would act like a wake up source. This allows waking
up from suspend to RAM on RTC alarm interrupt.
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Mark Brown <broonie@linaro.org>
Acked-by: Sangbeom Kim <sbkim73@samsung.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Liam Girdwood <lgirdwood@gmail.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-s5m.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c index 977b40cd32a7..0ba56b7cb382 100644 --- a/drivers/rtc/rtc-s5m.c +++ b/drivers/rtc/rtc-s5m.c | |||
| @@ -639,6 +639,30 @@ static void s5m_rtc_shutdown(struct platform_device *pdev) | |||
| 639 | s5m_rtc_enable_smpl(info, false); | 639 | s5m_rtc_enable_smpl(info, false); |
| 640 | } | 640 | } |
| 641 | 641 | ||
| 642 | static int s5m_rtc_resume(struct device *dev) | ||
| 643 | { | ||
| 644 | struct s5m_rtc_info *info = dev_get_drvdata(dev); | ||
| 645 | int ret = 0; | ||
| 646 | |||
| 647 | if (device_may_wakeup(dev)) | ||
| 648 | ret = disable_irq_wake(info->irq); | ||
| 649 | |||
| 650 | return ret; | ||
| 651 | } | ||
| 652 | |||
| 653 | static int s5m_rtc_suspend(struct device *dev) | ||
| 654 | { | ||
| 655 | struct s5m_rtc_info *info = dev_get_drvdata(dev); | ||
| 656 | int ret = 0; | ||
| 657 | |||
| 658 | if (device_may_wakeup(dev)) | ||
| 659 | ret = enable_irq_wake(info->irq); | ||
| 660 | |||
| 661 | return ret; | ||
| 662 | } | ||
| 663 | |||
| 664 | static SIMPLE_DEV_PM_OPS(s5m_rtc_pm_ops, s5m_rtc_suspend, s5m_rtc_resume); | ||
| 665 | |||
| 642 | static const struct platform_device_id s5m_rtc_id[] = { | 666 | static const struct platform_device_id s5m_rtc_id[] = { |
| 643 | { "s5m-rtc", 0 }, | 667 | { "s5m-rtc", 0 }, |
| 644 | }; | 668 | }; |
| @@ -647,6 +671,7 @@ static struct platform_driver s5m_rtc_driver = { | |||
| 647 | .driver = { | 671 | .driver = { |
| 648 | .name = "s5m-rtc", | 672 | .name = "s5m-rtc", |
| 649 | .owner = THIS_MODULE, | 673 | .owner = THIS_MODULE, |
| 674 | .pm = &s5m_rtc_pm_ops, | ||
| 650 | }, | 675 | }, |
| 651 | .probe = s5m_rtc_probe, | 676 | .probe = s5m_rtc_probe, |
| 652 | .shutdown = s5m_rtc_shutdown, | 677 | .shutdown = s5m_rtc_shutdown, |
