hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/rtc/rtc-r9701.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Driver for Epson RTC-9701JE
34 *
....@@ -7,10 +8,6 @@
78 *
89 * Copyright (C) 2006 8D Technologies inc.
910 * Copyright (C) 2004 Compulab Ltd.
10
- *
11
- * This program is free software; you can redistribute it and/or modify
12
- * it under the terms of the GNU General Public License version 2 as
13
- * published by the Free Software Foundation.
1411 */
1512
1613 #include <linux/module.h>
....@@ -78,8 +75,6 @@
7875 if (ret)
7976 return ret;
8077
81
- memset(dt, 0, sizeof(*dt));
82
-
8378 dt->tm_sec = bcd2bin(buf[0]); /* RSECCNT */
8479 dt->tm_min = bcd2bin(buf[1]); /* RMINCNT */
8580 dt->tm_hour = bcd2bin(buf[2]); /* RHRCNT */
....@@ -88,20 +83,12 @@
8883 dt->tm_mon = bcd2bin(buf[4]) - 1; /* RMONCNT */
8984 dt->tm_year = bcd2bin(buf[5]) + 100; /* RYRCNT */
9085
91
- /* the rtc device may contain illegal values on power up
92
- * according to the data sheet. make sure they are valid.
93
- */
94
-
9586 return 0;
9687 }
9788
9889 static int r9701_set_datetime(struct device *dev, struct rtc_time *dt)
9990 {
100
- int ret, year;
101
-
102
- year = dt->tm_year + 1900;
103
- if (year >= 2100 || year < 2000)
104
- return -EINVAL;
91
+ int ret;
10592
10693 ret = write_reg(dev, RHRCNT, bin2bcd(dt->tm_hour));
10794 ret = ret ? ret : write_reg(dev, RMINCNT, bin2bcd(dt->tm_min));
....@@ -109,7 +96,6 @@
10996 ret = ret ? ret : write_reg(dev, RDAYCNT, bin2bcd(dt->tm_mday));
11097 ret = ret ? ret : write_reg(dev, RMONCNT, bin2bcd(dt->tm_mon + 1));
11198 ret = ret ? ret : write_reg(dev, RYRCNT, bin2bcd(dt->tm_year - 100));
112
- ret = ret ? ret : write_reg(dev, RWKCNT, 1 << dt->tm_wday);
11399
114100 return ret;
115101 }
....@@ -122,7 +108,6 @@
122108 static int r9701_probe(struct spi_device *spi)
123109 {
124110 struct rtc_device *rtc;
125
- struct rtc_time dt;
126111 unsigned char tmp;
127112 int res;
128113
....@@ -133,35 +118,16 @@
133118 return -ENODEV;
134119 }
135120
136
- /*
137
- * The device seems to be present. Now check if the registers
138
- * contain invalid values. If so, try to write a default date:
139
- * 2000/1/1 00:00:00
140
- */
141
- if (r9701_get_datetime(&spi->dev, &dt)) {
142
- dev_info(&spi->dev, "trying to repair invalid date/time\n");
143
- dt.tm_sec = 0;
144
- dt.tm_min = 0;
145
- dt.tm_hour = 0;
146
- dt.tm_mday = 1;
147
- dt.tm_mon = 0;
148
- dt.tm_year = 100;
149
-
150
- if (r9701_set_datetime(&spi->dev, &dt) ||
151
- r9701_get_datetime(&spi->dev, &dt)) {
152
- dev_err(&spi->dev, "cannot repair RTC register\n");
153
- return -ENODEV;
154
- }
155
- }
156
-
157
- rtc = devm_rtc_device_register(&spi->dev, "r9701",
158
- &r9701_rtc_ops, THIS_MODULE);
121
+ rtc = devm_rtc_allocate_device(&spi->dev);
159122 if (IS_ERR(rtc))
160123 return PTR_ERR(rtc);
161124
162125 spi_set_drvdata(spi, rtc);
126
+ rtc->ops = &r9701_rtc_ops;
127
+ rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
128
+ rtc->range_max = RTC_TIMESTAMP_END_2099;
163129
164
- return 0;
130
+ return rtc_register_device(rtc);
165131 }
166132
167133 static struct spi_driver r9701_driver = {