mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-20 16:46:23 +08:00
rtc-at32ap700x: fix bug in at32_rtc_readalarm()
alarm->pending indicates whether there's an alarm that has actually been triggered, not whether we're waiting for it. alarm->enabled indicates that. Also add missing locking around reading the RTC registers. Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> Signed-off-by: Alessandro Zummo <a.zummo@towertech.it> Cc: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com> Cc: David Brownell <david-b@pacbell.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
6c38d85785
commit
529a4f4ec9
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user