/* * program the rtc registers for alarm to go off at the specified time */ static void todm5819_set_power_alarm(timestruc_t ts) { todinfo_t tod; uint8_t regb; struct rtc_t rtc; ASSERT(MUTEX_HELD(&tod_lock)); tod = utc_to_tod(ts.tv_sec); /* * disable alarms */ regb = RTC_GET8(RTC_B); RTC_PUT8(RTC_B, (regb & ~RTC_AIE)); rtc.rtc_asec = (uint8_t)tod.tod_sec; rtc.rtc_amin = (uint8_t)tod.tod_min; rtc.rtc_ahrs = (uint8_t)tod.tod_hour; rtc.rtc_adom = (uint8_t)tod.tod_day; write_rtc_alarm(&rtc); /* * Enable alarm. */ RTC_PUT8(RTC_B, (regb | RTC_AIE)); }
/* * program the rtc registers for alarm to go off at the specified time */ static void todbq4802_set_power_alarm(timestruc_t ts) { todinfo_t tod; uint8_t regc; struct rtc_t rtc; ASSERT(MUTEX_HELD(&tod_lock)); tod = utc_to_tod(ts.tv_sec); /* * disable alarms and clear AF flag by reading reg Flags (D) */ regc = BQ4802_DATA_REG(RTC_ENABLES); BQ4802_DATA_REG(RTC_ENABLES) = regc & ~(RTC_AIE | RTC_ABE); (void) BQ4802_DATA_REG(RTC_FLAGS); rtc.rtc_asec = (uint8_t)tod.tod_sec; rtc.rtc_amin = (uint8_t)tod.tod_min; rtc.rtc_ahrs = (uint8_t)tod.tod_hour; rtc.rtc_adom = (uint8_t)tod.tod_day; DPRINTF("todbq4802_set_alarm: dom=%d hrs=%d min=%d sec=%d\n", rtc.rtc_adom, rtc.rtc_ahrs, rtc.rtc_amin, rtc.rtc_asec); /* * Write alarm values and enable alarm */ write_rtc_alarm(&rtc); BQ4802_DATA_REG(RTC_ENABLES) = regc | RTC_AIE | RTC_ABE; }
/* * program the rtc registers for alarm to go off at the specified time */ static void todds_set_power_alarm(timestruc_t ts) { todinfo_t tod; uint8_t apcr2; struct rtc_t rtc; ASSERT(MUTEX_HELD(&tod_lock)); tod = utc_to_tod(ts.tv_sec); mutex_enter(&ds1287_reg_mutex); /* Clear Time Match Detect */ select_bank(2); DS1287_ADDR_REG = APC_APSR; apcr2 = DS1287_DATA_REG; /* Disable Time Match Enable */ DS1287_ADDR_REG = APC_APCR2; apcr2 = DS1287_DATA_REG; DS1287_DATA_REG = (apcr2 & (~APC_TME)); mutex_exit(&ds1287_reg_mutex); rtc.rtc_asec = (uint8_t)tod.tod_sec; rtc.rtc_amin = (uint8_t)tod.tod_min; rtc.rtc_ahrs = (uint8_t)tod.tod_hour; rtc.rtc_adom = (uint8_t)tod.tod_day; rtc.rtc_amon = (uint8_t)tod.tod_month; rtc.apc_wdwr = (uint8_t)tod.tod_dow; rtc.apc_wdmr = (uint8_t)tod.tod_day; rtc.apc_wmr = (uint8_t)tod.tod_month; rtc.apc_wyr = tod.tod_year % 100; rtc.apc_wcr = (tod.tod_year / 100) + 19; write_rtc_alarm(&rtc); mutex_enter(&ds1287_reg_mutex); /* Enable Time Match enable */ select_bank(2); DS1287_ADDR_REG = APC_APCR2; DS1287_DATA_REG = (apcr2 | APC_TME); mutex_exit(&ds1287_reg_mutex); }