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 --- |