static int da9052_set_alarm(struct da9052 *da9052, struct rtc_time *rtc_tm) { int ret; uint8_t v[3]; rtc_tm->tm_year -= 100; rtc_tm->tm_mon += 1; ret = da9052_reg_update(da9052, DA9052_ALARM_MI_REG, DA9052_RTC_MIN, rtc_tm->tm_min); if (ret != 0) { rtc_err(da9052, "Failed to write ALRM MIN: %d\n", ret); return ret; } v[0] = rtc_tm->tm_hour; v[1] = rtc_tm->tm_mday; v[2] = rtc_tm->tm_mon; ret = da9052_group_write(da9052, DA9052_ALARM_H_REG, 3, v); if (ret < 0) return ret; ret = da9052_reg_update(da9052, DA9052_ALARM_Y_REG, DA9052_RTC_YEAR, rtc_tm->tm_year); if (ret != 0) rtc_err(da9052, "Failed to write ALRM YEAR: %d\n", ret); return ret; }
static int da9052_rtc_set_time(struct device *dev, struct rtc_time *tm) { struct da9052_rtc *rtc; uint8_t v[6]; rtc = dev_get_drvdata(dev); v[0] = tm->tm_sec; v[1] = tm->tm_min; v[2] = tm->tm_hour; v[3] = tm->tm_mday; v[4] = tm->tm_mon + 1; v[5] = tm->tm_year - 100; return da9052_group_write(rtc->da9052, DA9052_COUNT_S_REG, 6, v); }
static int da9052_set_alarm(struct da9052_rtc *rtc, struct rtc_time *rtc_tm) { struct da9052 *da9052 = rtc->da9052; unsigned long alm_time; int ret; uint8_t v[3]; ret = rtc_tm_to_time(rtc_tm, &alm_time); if (ret != 0) return ret; if (rtc_tm->tm_sec > 0) { alm_time += 60 - rtc_tm->tm_sec; rtc_time_to_tm(alm_time, rtc_tm); } BUG_ON(rtc_tm->tm_sec); /* it will cause repeated irqs if not zero */ rtc_tm->tm_year -= 100; rtc_tm->tm_mon += 1; ret = da9052_reg_update(da9052, DA9052_ALARM_MI_REG, DA9052_RTC_MIN, rtc_tm->tm_min); if (ret != 0) { rtc_err(rtc, "Failed to write ALRM MIN: %d\n", ret); return ret; } v[0] = rtc_tm->tm_hour; v[1] = rtc_tm->tm_mday; v[2] = rtc_tm->tm_mon; ret = da9052_group_write(da9052, DA9052_ALARM_H_REG, 3, v); if (ret < 0) return ret; ret = da9052_reg_update(da9052, DA9052_ALARM_Y_REG, DA9052_RTC_YEAR, rtc_tm->tm_year); if (ret != 0) rtc_err(rtc, "Failed to write ALRM YEAR: %d\n", ret); return ret; }
static int da9052_rtc_set_time(struct device *dev, struct rtc_time *tm) { struct da9052_rtc *rtc; uint8_t v[6]; int ret; rtc = dev_get_drvdata(dev); v[0] = tm->tm_sec; v[1] = tm->tm_min; v[2] = tm->tm_hour; v[3] = tm->tm_mday; v[4] = tm->tm_mon + 1; v[5] = tm->tm_year - 100; ret = da9052_group_write(rtc->da9052, DA9052_COUNT_S_REG, 6, v); if (ret < 0) rtc_err(rtc, "failed to set RTC time: %d\n", ret); return ret; }