|
@@ -94,8 +94,11 @@ static int at32_rtc_readalarm(struct device *dev, struct rtc_wkalrm *alrm)
|
|
|
{
|
|
|
struct rtc_at32ap700x *rtc = dev_get_drvdata(dev);
|
|
|
|
|
|
+ spin_lock_irq(&rtc->lock);
|
|
|
rtc_time_to_tm(rtc->alarm_time, &alrm->time);
|
|
|
- alrm->pending = rtc_readl(rtc, IMR) & RTC_BIT(IMR_TOPI) ? 1 : 0;
|
|
|
+ alrm->enabled = rtc_readl(rtc, IMR) & RTC_BIT(IMR_TOPI) ? 1 : 0;
|
|
|
+ alrm->pending = rtc_readl(rtc, ISR) & RTC_BIT(ISR_TOPI) ? 1 : 0;
|
|
|
+ spin_unlock_irq(&rtc->lock);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -119,7 +122,7 @@ static int at32_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
|
|
|
spin_lock_irq(&rtc->lock);
|
|
|
rtc->alarm_time = alarm_unix_time;
|
|
|
rtc_writel(rtc, TOP, rtc->alarm_time);
|
|
|
- if (alrm->pending)
|
|
|
+ if (alrm->enabled)
|
|
|
rtc_writel(rtc, CTRL, rtc_readl(rtc, CTRL)
|
|
|
| RTC_BIT(CTRL_TOPEN));
|
|
|
else
|