Source
258
258
err:
259
259
return ret;
260
260
}
261
261
262
262
static int abb5zes3_rtc_set_time(struct device *dev, struct rtc_time *tm)
263
263
{
264
264
struct abb5zes3_rtc_data *data = dev_get_drvdata(dev);
265
265
u8 regs[ABB5ZES3_REG_RTC_SC + ABB5ZES3_RTC_SEC_LEN];
266
266
int ret;
267
267
268
-
/*
269
-
* Year register is 8-bit wide and bcd-coded, i.e records values
270
-
* between 0 and 99. tm_year is an offset from 1900 and we are
271
-
* interested in the 2000-2099 range, so any value less than 100
272
-
* is invalid.
273
-
*/
274
-
if (tm->tm_year < 100)
275
-
return -EINVAL;
276
-
277
268
regs[ABB5ZES3_REG_RTC_SC] = bin2bcd(tm->tm_sec); /* MSB=0 clears OSC */
278
269
regs[ABB5ZES3_REG_RTC_MN] = bin2bcd(tm->tm_min);
279
270
regs[ABB5ZES3_REG_RTC_HR] = bin2bcd(tm->tm_hour); /* 24-hour format */
280
271
regs[ABB5ZES3_REG_RTC_DT] = bin2bcd(tm->tm_mday);
281
272
regs[ABB5ZES3_REG_RTC_DW] = bin2bcd(tm->tm_wday);
282
273
regs[ABB5ZES3_REG_RTC_MO] = bin2bcd(tm->tm_mon + 1);
283
274
regs[ABB5ZES3_REG_RTC_YR] = bin2bcd(tm->tm_year - 100);
284
275
285
276
mutex_lock(&data->lock);
286
277
ret = regmap_bulk_write(data->regmap, ABB5ZES3_REG_RTC_SC,
944
935
dev_dbg(dev, "%s: irq %d used by RTC\n", __func__,
945
936
client->irq);
946
937
} else {
947
938
dev_err(dev, "%s: irq %d unavailable (%d)\n",
948
939
__func__, client->irq, ret);
949
940
goto err;
950
941
}
951
942
}
952
943
953
944
data->rtc->ops = &rtc_ops;
945
+
data->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
946
+
data->rtc->range_max = RTC_TIMESTAMP_END_2099;
954
947
955
948
/* Enable battery low detection interrupt if battery not already low */
956
949
if (!data->battery_low && data->irq) {
957
950
ret = _abb5zes3_rtc_battery_low_irq_enable(regmap, true);
958
951
if (ret) {
959
952
dev_err(dev, "%s: enabling battery low interrupt "
960
953
"generation failed (%d)\n", __func__, ret);
961
954
goto err;
962
955
}
963
956
}