void hal_rtc_get_alarm(struct rtc_time *tm, struct rtc_wkalrm *alm) { u16 irqen, pdn2; irqen = rtc_read(RTC_IRQ_EN); hal_rtc_get_alarm_time(tm); pdn2 = rtc_read(RTC_PDN2); alm->enabled = !!(irqen & RTC_IRQ_EN_AL); alm->pending = !!(pdn2 & RTC_PDN2_PWRON_ALARM); /* return Power-On Alarm bit */ }
void hal_rtc_get_pwron_alarm(struct rtc_time *tm, struct rtc_wkalrm *alm) { u16 pdn1, pdn2; pdn1 = rtc_read(RTC_PDN1); pdn2 = rtc_read(RTC_PDN2); alm->enabled = (pdn1 & RTC_PDN1_PWRON_TIME ? (pdn2 & RTC_PDN2_PWRON_LOGO ? 3 : 2) : 0); alm->pending = !!(pdn2 & RTC_PDN2_PWRON_ALARM); /* return Power-On Alarm bit */ hal_rtc_get_alarm_time(tm); }
static int rtc_ops_read_alarm(struct device *dev, struct rtc_wkalrm *alm) { unsigned long flags; struct rtc_time *tm = &alm->time; spin_lock_irqsave(&rtc_lock, flags); hal_rtc_get_alarm_time(tm, alm); spin_unlock_irqrestore(&rtc_lock, flags); tm->tm_year += RTC_MIN_YEAR_OFFSET; tm->tm_mon--; rtc_xinfo("read al time = %04d/%02d/%02d %02d:%02d:%02d (%d)\n", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, alm->enabled); return 0; }