|
@@ -46,6 +46,7 @@ static struct clk *rtc_clk;
|
|
|
static void __iomem *s3c_rtc_base;
|
|
|
static int s3c_rtc_alarmno = NO_IRQ;
|
|
|
static int s3c_rtc_tickno = NO_IRQ;
|
|
|
+static bool wake_en;
|
|
|
static enum s3c_cpu_type s3c_rtc_cpu_type;
|
|
|
|
|
|
static DEFINE_SPINLOCK(s3c_rtc_pie_lock);
|
|
@@ -562,8 +563,12 @@ static int s3c_rtc_suspend(struct platform_device *pdev, pm_message_t state)
|
|
|
}
|
|
|
s3c_rtc_enable(pdev, 0);
|
|
|
|
|
|
- if (device_may_wakeup(&pdev->dev))
|
|
|
- enable_irq_wake(s3c_rtc_alarmno);
|
|
|
+ if (device_may_wakeup(&pdev->dev) && !wake_en) {
|
|
|
+ if (enable_irq_wake(s3c_rtc_alarmno) == 0)
|
|
|
+ wake_en = true;
|
|
|
+ else
|
|
|
+ dev_err(&pdev->dev, "enable_irq_wake failed\n");
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -579,8 +584,10 @@ static int s3c_rtc_resume(struct platform_device *pdev)
|
|
|
writew(tmp | ticnt_en_save, s3c_rtc_base + S3C2410_RTCCON);
|
|
|
}
|
|
|
|
|
|
- if (device_may_wakeup(&pdev->dev))
|
|
|
+ if (device_may_wakeup(&pdev->dev) && wake_en) {
|
|
|
disable_irq_wake(s3c_rtc_alarmno);
|
|
|
+ wake_en = false;
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|