]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
[ARM] pxa/sa1100: replace wakeup support
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Mon, 12 Nov 2007 22:49:58 +0000 (22:49 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 26 Jan 2008 15:07:51 +0000 (15:07 +0000)
Replace wakeup support using the alarm via the SA1100 RTC driver on
SA1100 and PXA platforms.  This allows RTC alarm wakeup to be enabled
via sysfs using the conventional attributes.

Acked-by: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/rtc/rtc-sa1100.c

index 6f1e9a9804bc9a7b0edbee3e83c256d5c1572e07..2eb38520f0c8cf267f57360ae16970623e316588 100644 (file)
@@ -337,6 +337,8 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
        if (IS_ERR(rtc))
                return PTR_ERR(rtc);
 
+       device_init_wakeup(&pdev->dev, 1);
+
        platform_set_drvdata(pdev, rtc);
 
        return 0;
@@ -352,9 +354,38 @@ static int sa1100_rtc_remove(struct platform_device *pdev)
        return 0;
 }
 
+#ifdef CONFIG_PM
+static int sa1100_rtc_suspend(struct platform_device *pdev, pm_message_t state)
+{
+       if (pdev->dev.power.power_state.event != state.event) {
+               if (state.event == PM_EVENT_SUSPEND &&
+                   device_may_wakeup(&pdev->dev))
+                       enable_irq_wake(IRQ_RTCAlrm);
+
+               pdev->dev.power.power_state = state;
+       }
+       return 0;
+}
+
+static int sa1100_rtc_resume(struct platform_device *pdev)
+{
+       if (pdev->dev.power.power_state.event != PM_EVENT_ON) {
+               if (device_may_wakeup(&pdev->dev))
+                       disable_irq_wake(IRQ_RTCAlrm);
+               pdev->dev.power.power_state = PMSG_ON;
+       }
+       return 0;
+}
+#else
+#define sa1100_rtc_suspend     NULL
+#define sa1100_rtc_resume      NULL
+#endif
+
 static struct platform_driver sa1100_rtc_driver = {
        .probe          = sa1100_rtc_probe,
        .remove         = sa1100_rtc_remove,
+       .suspend        = sa1100_rtc_suspend,
+       .resume         = sa1100_rtc_resume,
        .driver         = {
                .name           = "sa1100-rtc",
        },