rtc-rv3028.c (b470ebc9e0e57f53d1db9c49b8a3de4086babd05) rtc-rv3028.c (6e00b6d0083ea5f529b057e87c0236747871b6a8)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * RTC driver for the Micro Crystal RV3028
4 *
5 * Copyright (C) 2019 Micro Crystal SA
6 *
7 * Alexandre Belloni <alexandre.belloni@bootlin.com>
8 *

--- 306 unchanged lines hidden (view full) ---

315
316 ret = regmap_bulk_read(rv3028->regmap, RV3028_SEC, date, sizeof(date));
317 if (ret)
318 return ret;
319
320 tm->tm_sec = bcd2bin(date[RV3028_SEC] & 0x7f);
321 tm->tm_min = bcd2bin(date[RV3028_MIN] & 0x7f);
322 tm->tm_hour = bcd2bin(date[RV3028_HOUR] & 0x3f);
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * RTC driver for the Micro Crystal RV3028
4 *
5 * Copyright (C) 2019 Micro Crystal SA
6 *
7 * Alexandre Belloni <alexandre.belloni@bootlin.com>
8 *

--- 306 unchanged lines hidden (view full) ---

315
316 ret = regmap_bulk_read(rv3028->regmap, RV3028_SEC, date, sizeof(date));
317 if (ret)
318 return ret;
319
320 tm->tm_sec = bcd2bin(date[RV3028_SEC] & 0x7f);
321 tm->tm_min = bcd2bin(date[RV3028_MIN] & 0x7f);
322 tm->tm_hour = bcd2bin(date[RV3028_HOUR] & 0x3f);
323 tm->tm_wday = ilog2(date[RV3028_WDAY] & 0x7f);
323 tm->tm_wday = date[RV3028_WDAY] & 0x7f;
324 tm->tm_mday = bcd2bin(date[RV3028_DAY] & 0x3f);
325 tm->tm_mon = bcd2bin(date[RV3028_MONTH] & 0x1f) - 1;
326 tm->tm_year = bcd2bin(date[RV3028_YEAR]) + 100;
327
328 return 0;
329}
330
331static int rv3028_set_time(struct device *dev, struct rtc_time *tm)
332{
333 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
334 u8 date[7];
335 int ret;
336
337 date[RV3028_SEC] = bin2bcd(tm->tm_sec);
338 date[RV3028_MIN] = bin2bcd(tm->tm_min);
339 date[RV3028_HOUR] = bin2bcd(tm->tm_hour);
324 tm->tm_mday = bcd2bin(date[RV3028_DAY] & 0x3f);
325 tm->tm_mon = bcd2bin(date[RV3028_MONTH] & 0x1f) - 1;
326 tm->tm_year = bcd2bin(date[RV3028_YEAR]) + 100;
327
328 return 0;
329}
330
331static int rv3028_set_time(struct device *dev, struct rtc_time *tm)
332{
333 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
334 u8 date[7];
335 int ret;
336
337 date[RV3028_SEC] = bin2bcd(tm->tm_sec);
338 date[RV3028_MIN] = bin2bcd(tm->tm_min);
339 date[RV3028_HOUR] = bin2bcd(tm->tm_hour);
340 date[RV3028_WDAY] = 1 << (tm->tm_wday);
340 date[RV3028_WDAY] = tm->tm_wday;
341 date[RV3028_DAY] = bin2bcd(tm->tm_mday);
342 date[RV3028_MONTH] = bin2bcd(tm->tm_mon + 1);
343 date[RV3028_YEAR] = bin2bcd(tm->tm_year - 100);
344
345 /*
346 * Writing to the Seconds register has the same effect as setting RESET
347 * bit to 1
348 */

--- 570 unchanged lines hidden ---
341 date[RV3028_DAY] = bin2bcd(tm->tm_mday);
342 date[RV3028_MONTH] = bin2bcd(tm->tm_mon + 1);
343 date[RV3028_YEAR] = bin2bcd(tm->tm_year - 100);
344
345 /*
346 * Writing to the Seconds register has the same effect as setting RESET
347 * bit to 1
348 */

--- 570 unchanged lines hidden ---