aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Anderson <dianders@chromium.org>2014-10-13 18:52:55 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-13 20:18:18 -0400
commite7f7fc73693e0a9de693f261d63aa681f7979c33 (patch)
tree09d92d0c34a5a905326644e20292b4a958b344aa
parentd5fae669a99d00dc9362da354f2b9fdfbeb669a7 (diff)
rtc: max77686: Allow the max77686 rtc to wakeup the system
This series add support for the Real Time clock present in the Maxim 77802 Power Managment IC. The version number is quite high because it previously was part of a bigger series [0] that aimed to add support for all the devices in the max77802 PMIC. But now that the max77802 dependencies were already merged for 3.17, the series were split but I kept the version numbering. While working on the max77802 rtc support a lot of feedback was given and the issues pointed out also apply to a driver for a similar PMIC RTC (max77686). So patches 01/06 to 05/06 in the series are cleanups for the max77686 driver and patch 06/06 adds the support for the max77802 RTC. The series were tested on an Exynos5250 Snow (max77686) and Exynos5420 Peach Pit (max77802) machines. This patch (of 6): The max77686 includes an RTC that keeps power during suspend. It's convenient to be able to use it as a wakeup source. Signed-off-by: Doug Anderson <dianders@chromium.org> Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> Reviewed-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Olof Johansson <olof@lixom.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/rtc/rtc-max77686.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/drivers/rtc/rtc-max77686.c b/drivers/rtc/rtc-max77686.c
index d20a7f0786eb..c1c6055ccb71 100644
--- a/drivers/rtc/rtc-max77686.c
+++ b/drivers/rtc/rtc-max77686.c
@@ -583,6 +583,33 @@ static void max77686_rtc_shutdown(struct platform_device *pdev)
583#endif /* MAX77686_RTC_WTSR_SMPL */ 583#endif /* MAX77686_RTC_WTSR_SMPL */
584} 584}
585 585
586#ifdef CONFIG_PM_SLEEP
587static int max77686_rtc_suspend(struct device *dev)
588{
589 if (device_may_wakeup(dev)) {
590 struct max77686_rtc_info *info = dev_get_drvdata(dev);
591
592 return enable_irq_wake(info->virq);
593 }
594
595 return 0;
596}
597
598static int max77686_rtc_resume(struct device *dev)
599{
600 if (device_may_wakeup(dev)) {
601 struct max77686_rtc_info *info = dev_get_drvdata(dev);
602
603 return disable_irq_wake(info->virq);
604 }
605
606 return 0;
607}
608#endif
609
610static SIMPLE_DEV_PM_OPS(max77686_rtc_pm_ops,
611 max77686_rtc_suspend, max77686_rtc_resume);
612
586static const struct platform_device_id rtc_id[] = { 613static const struct platform_device_id rtc_id[] = {
587 { "max77686-rtc", 0 }, 614 { "max77686-rtc", 0 },
588 {}, 615 {},
@@ -592,6 +619,7 @@ static struct platform_driver max77686_rtc_driver = {
592 .driver = { 619 .driver = {
593 .name = "max77686-rtc", 620 .name = "max77686-rtc",
594 .owner = THIS_MODULE, 621 .owner = THIS_MODULE,
622 .pm = &max77686_rtc_pm_ops,
595 }, 623 },
596 .probe = max77686_rtc_probe, 624 .probe = max77686_rtc_probe,
597 .shutdown = max77686_rtc_shutdown, 625 .shutdown = max77686_rtc_shutdown,