static int tps80031_rtc_set_time(struct device *dev, struct rtc_time *tm) { u8 buff[7]; int ret; buff[0] = bin2bcd(tm->tm_sec); buff[1] = bin2bcd(tm->tm_min); buff[2] = bin2bcd(tm->tm_hour); buff[3] = bin2bcd(tm->tm_mday); buff[4] = bin2bcd(tm->tm_mon + 1); buff[5] = bin2bcd(tm->tm_year % RTC_YEAR_OFFSET); buff[6] = bin2bcd(tm->tm_wday); /* Stop RTC while updating the RTC time registers */ ret = tps80031_clr_bits(dev->parent, TPS80031_SLAVE_ID1, TPS80031_RTC_CTRL_REG, STOP_RTC); if (ret < 0) { dev_err(dev->parent, "Stop RTC failed, err = %d\n", ret); return ret; } ret = tps80031_writes(dev->parent, TPS80031_SLAVE_ID1, TPS80031_SECONDS_REG, TPS80031_RTC_TIME_NUM_REGS, buff); if (ret < 0) { dev_err(dev, "writing RTC_SECONDS_REG failed, err %d\n", ret); return ret; } ret = tps80031_set_bits(dev->parent, TPS80031_SLAVE_ID1, TPS80031_RTC_CTRL_REG, STOP_RTC); if (ret < 0) dev_err(dev->parent, "Start RTC failed, err = %d\n", ret); return ret; }
static int tps80031_write_regs(struct device *dev, int reg, int len, uint8_t *val) { int ret; ret = tps80031_writes(dev->parent, 1, reg, len, val); if (ret < 0) { dev_err(dev->parent, "failed writing reg: %d\n", reg); WARN_ON(1); return ret; } return 0; }
static int tps80031_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) { u8 buff[TPS80031_RTC_ALARM_NUM_REGS]; int ret; buff[0] = bin2bcd(alrm->time.tm_sec); buff[1] = bin2bcd(alrm->time.tm_min); buff[2] = bin2bcd(alrm->time.tm_hour); buff[3] = bin2bcd(alrm->time.tm_mday); buff[4] = bin2bcd(alrm->time.tm_mon + 1); buff[5] = bin2bcd(alrm->time.tm_year % RTC_YEAR_OFFSET); ret = tps80031_writes(dev->parent, TPS80031_SLAVE_ID1, TPS80031_ALARM_SECONDS_REG, TPS80031_RTC_ALARM_NUM_REGS, buff); if (ret < 0) { dev_err(dev, "Writing RTC_ALARM failed, err %d\n", ret); return ret; } return tps80031_rtc_alarm_irq_enable(dev, alrm->enabled); }