Lines Matching full:alarm
3 * I2C RTC / Alarm chip
38 #define ABB5ZES3_REG_CTRL1_AIE BIT(1) /* Alarm interrupt enable */
49 #define ABB5ZES3_REG_CTRL2_AF BIT(3) /* Alarm interrupt status */
79 /* Alarm section (enable bits are all active low) */
80 #define ABB5ZES3_REG_ALRM_MN 0x0A /* Alarm - minute register */
82 #define ABB5ZES3_REG_ALRM_HR 0x0B /* Alarm - hours register */
84 #define ABB5ZES3_REG_ALRM_DT 0x0C /* Alarm - date register */
86 #define ABB5ZES3_REG_ALRM_DW 0x0D /* Alarm - day of the week reg. */
136 bool timer_alarm; /* current alarm is via timer A */
166 /* Clear alarm status bit. */
175 dev_err(dev, "%s: clearing alarm failed (%d)\n", __func__, ret); in _abb5zes3_rtc_clear_alarm()
180 /* Enable or disable alarm (i.e. alarm interrupt generation) */
190 dev_err(dev, "%s: writing alarm INT failed (%d)\n", in _abb5zes3_rtc_update_alarm()
311 * Read alarm currently configured via a watchdog timer using timer A. This
315 struct rtc_wkalrm *alarm) in _abb5zes3_rtc_read_timer() argument
318 struct rtc_time rtc_tm, *alarm_tm = &alarm->time; in _abb5zes3_rtc_read_timer()
363 alarm->enabled = !!(reg & ABB5ZES3_REG_CTRL2_WTAIE); in _abb5zes3_rtc_read_timer()
369 /* Read alarm currently configured via a RTC alarm registers. */
371 struct rtc_wkalrm *alarm) in _abb5zes3_rtc_read_alarm() argument
374 struct rtc_time rtc_tm, *alarm_tm = &alarm->time; in _abb5zes3_rtc_read_alarm()
383 dev_err(dev, "%s: reading alarm section failed (%d)\n", in _abb5zes3_rtc_read_alarm()
395 * The alarm section does not store year/month. We use the ones in rtc in _abb5zes3_rtc_read_alarm()
397 * alarm after current time. in _abb5zes3_rtc_read_alarm()
430 alarm->enabled = !!(reg & ABB5ZES3_REG_CTRL1_AIE); in _abb5zes3_rtc_read_alarm()
437 * As the Alarm mechanism supported by the chip is only accurate to the
439 * (up to 256 seconds w/ a second accuracy) for low alarm values (below
440 * 4 minutes). Otherwise, we use the common alarm mechanism provided
445 static int abb5zes3_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) in abb5zes3_rtc_read_alarm() argument
452 ret = _abb5zes3_rtc_read_timer(dev, alarm); in abb5zes3_rtc_read_alarm()
454 ret = _abb5zes3_rtc_read_alarm(dev, alarm); in abb5zes3_rtc_read_alarm()
461 * Set alarm using chip alarm mechanism. It is only accurate to the
462 * minute (not the second). The function expects alarm interrupt to
465 static int _abb5zes3_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) in _abb5zes3_rtc_set_alarm() argument
468 struct rtc_time *alarm_tm = &alarm->time; in _abb5zes3_rtc_set_alarm()
486 /* If alarm time is before current time, disable the alarm */ in _abb5zes3_rtc_set_alarm()
487 if (!alarm->enabled || alarm_secs <= rtc_secs) { in _abb5zes3_rtc_set_alarm()
494 * and checking alarm value is still below. in _abb5zes3_rtc_set_alarm()
508 dev_err(dev, "%s: alarm maximum is one month in the " in _abb5zes3_rtc_set_alarm()
516 * Program all alarm registers but DW one. For each register, setting in _abb5zes3_rtc_set_alarm()
517 * MSB to 0 enables associated alarm. in _abb5zes3_rtc_set_alarm()
527 dev_err(dev, "%s: writing ALARM section failed (%d)\n", in _abb5zes3_rtc_set_alarm()
532 /* Record currently configured alarm is not a timer */ in _abb5zes3_rtc_set_alarm()
535 /* Enable or disable alarm interrupt generation */ in _abb5zes3_rtc_set_alarm()
543 * Set alarm using timer watchdog (via timer A) mechanism. The function expects
546 static int _abb5zes3_rtc_set_timer(struct device *dev, struct rtc_wkalrm *alarm, in _abb5zes3_rtc_set_timer() argument
569 /* Record currently configured alarm is a timer */ in _abb5zes3_rtc_set_timer()
573 ret = _abb5zes3_rtc_update_timer(dev, alarm->enabled); in _abb5zes3_rtc_set_timer()
580 * The chip has an alarm which is only accurate to the minute. In order to
585 static int abb5zes3_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) in abb5zes3_rtc_set_alarm() argument
588 struct rtc_time *alarm_tm = &alarm->time; in abb5zes3_rtc_set_alarm()
606 /* Let's first disable both the alarm and the timer interrupts */ in abb5zes3_rtc_set_alarm()
609 dev_err(dev, "%s: unable to disable alarm (%d)\n", __func__, in abb5zes3_rtc_set_alarm()
623 * Let's now configure the alarm; if we are expected to ring in in abb5zes3_rtc_set_alarm()
624 * more than 240s, then we setup an alarm. Otherwise, a timer. in abb5zes3_rtc_set_alarm()
627 ret = _abb5zes3_rtc_set_timer(dev, alarm, in abb5zes3_rtc_set_alarm()
630 ret = _abb5zes3_rtc_set_alarm(dev, alarm); in abb5zes3_rtc_set_alarm()
636 dev_err(dev, "%s: unable to configure alarm (%d)\n", __func__, in abb5zes3_rtc_set_alarm()
667 * uselessly triggering the IRQ handler we install for alarm and battery in abb5zes3_rtc_check_setup()
687 * Each component of the alarm (MN, HR, DT, DW) can be enabled/disabled in abb5zes3_rtc_check_setup()
689 * we set all alarm enable bits to disable current alarm setting. in abb5zes3_rtc_check_setup()
695 dev_err(dev, "%s: unable to disable alarm setting (%d)\n", in abb5zes3_rtc_check_setup()
712 * Set Control 2 register (timer int. disabled, alarm status cleared). in abb5zes3_rtc_check_setup()
832 /* Check alarm flag */ in _abb5zes3_rtc_interrupt()
834 dev_dbg(dev, "RTC alarm!\n"); in _abb5zes3_rtc_interrupt()
838 /* Acknowledge and disable the alarm */ in _abb5zes3_rtc_interrupt()
852 * Acknowledge and disable the alarm. Note: WTAF in _abb5zes3_rtc_interrupt()
1028 MODULE_DESCRIPTION("Abracon AB-RTCMC-32.768kHz-B5ZE-S3 RTC/Alarm driver");