static int max77686_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) { struct max77686_rtc_info *info = dev_get_drvdata(dev); u8 data[RTC_NR_TIME]; int ret; ret = max77686_rtc_tm_to_data(&alrm->time, data); if (ret < 0) return ret; mutex_lock(&info->lock); ret = max77686_rtc_stop_alarm(info); if (ret < 0) goto out; ret = regmap_bulk_write(info->max77686->rtc_regmap, MAX77686_ALARM1_SEC, data, RTC_NR_TIME); if (ret < 0) { dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", __func__, ret); goto out; } ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); if (ret < 0) goto out; if (alrm->enabled) ret = max77686_rtc_start_alarm(info); out: mutex_unlock(&info->lock); return ret; }
static int max77686_rtc_set_time(struct device *dev, struct rtc_time *tm) { struct max77686_rtc_info *info = dev_get_drvdata(dev); u8 data[NR_RTC_CNT_REGS]; int ret; ret = max77686_rtc_tm_to_data(tm, data); if (ret < 0) return ret; dev_dbg(info->dev, "%s: %d-%02d-%02d %02d:%02d:%02d(0x%02x)\n", __func__, data[RTC_YEAR] + 2000, data[RTC_MONTH], data[RTC_DATE], data[RTC_HOUR], data[RTC_MIN], data[RTC_SEC], data[RTC_WEEKDAY]); mutex_lock(&info->lock); ret = max77686_bulk_write(info->rtc, MAX77686_RTC_SEC, NR_RTC_CNT_REGS, data); if (ret < 0) { dev_err(info->dev, "%s: fail to write time reg(%d)\n", __func__, ret); goto out; } ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); out: mutex_unlock(&info->lock); return ret; }
static int max77686_rtc_set_time(struct device *dev, struct rtc_time *tm) { struct max77686_rtc_info *info = dev_get_drvdata(dev); u8 data[RTC_NR_TIME]; int ret; ret = max77686_rtc_tm_to_data(tm, data); if (ret < 0) return ret; mutex_lock(&info->lock); ret = regmap_bulk_write(info->max77686->rtc_regmap, MAX77686_RTC_SEC, data, RTC_NR_TIME); if (ret < 0) { dev_err(info->dev, "%s: fail to write time reg(%d)\n", __func__, ret); goto out; } ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); out: mutex_unlock(&info->lock); return ret; }
static int max77686_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) { struct max77686_rtc_info *info = dev_get_drvdata(dev); u8 data[NR_RTC_CNT_REGS]; int ret, i; mutex_lock(&info->lock); ret = max77686_rtc_tm_to_data(&alrm->time, data); if (ret < 0) goto out; dev_dbg(info->dev, "%s: %d-%02d-%02d %02d:%02d:%02d(0x%02x)\n", __func__, data[RTC_YEAR] + 2000, data[RTC_MONTH], data[RTC_DATE], data[RTC_HOUR], data[RTC_MIN], data[RTC_SEC], data[RTC_WEEKDAY]); for (i = 0; i < NR_RTC_CNT_REGS; i++) data[i] |= ALARM_ENABLE_MASK; ret = max77686_bulk_write(info->rtc, MAX77686_ALARM1_SEC, NR_RTC_CNT_REGS, data); if (ret < 0) { dev_err(info->dev, "%s: fail to write alarm reg(%d)\n", __func__, ret); goto out; } ret = max77686_rtc_update(info, MAX77686_RTC_WRITE); if (ret < 0) goto out; ret = max77686_rtc_set_alarm_enable(info, alrm->enabled); out: mutex_unlock(&info->lock); return ret; }