aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/ABI/testing/sysfs-class-rtc16
-rw-r--r--Documentation/devicetree/bindings/rtc/isil,isl12026.txt28
-rw-r--r--MAINTAINERS2
-rw-r--r--arch/parisc/kernel/time.c2
-rw-r--r--drivers/char/rtc.c83
-rw-r--r--drivers/rtc/Kconfig13
-rw-r--r--drivers/rtc/Makefile1
-rw-r--r--drivers/rtc/class.c77
-rw-r--r--drivers/rtc/hctosys.c5
-rw-r--r--drivers/rtc/interface.c107
-rw-r--r--drivers/rtc/nvmem.c29
-rw-r--r--drivers/rtc/rtc-88pm80x.c4
-rw-r--r--drivers/rtc/rtc-88pm860x.c4
-rw-r--r--drivers/rtc/rtc-ab-b5ze-s3.c4
-rw-r--r--drivers/rtc/rtc-ab3100.c2
-rw-r--r--drivers/rtc/rtc-ab8500.c57
-rw-r--r--drivers/rtc/rtc-abx80x.c6
-rw-r--r--drivers/rtc/rtc-ac100.c26
-rw-r--r--drivers/rtc/rtc-at91sam9.c1
-rw-r--r--drivers/rtc/rtc-au1xxx.c2
-rw-r--r--drivers/rtc/rtc-bq32k.c8
-rw-r--r--drivers/rtc/rtc-brcmstb-waketimer.c3
-rw-r--r--drivers/rtc/rtc-cmos.c87
-rw-r--r--drivers/rtc/rtc-coh901331.c2
-rw-r--r--drivers/rtc/rtc-core.h8
-rw-r--r--drivers/rtc/rtc-cpcap.c2
-rw-r--r--drivers/rtc/rtc-cros-ec.c8
-rw-r--r--drivers/rtc/rtc-da9052.c3
-rw-r--r--drivers/rtc/rtc-da9055.c2
-rw-r--r--drivers/rtc/rtc-da9063.c2
-rw-r--r--drivers/rtc/rtc-ds1216.c2
-rw-r--r--drivers/rtc/rtc-ds1286.c2
-rw-r--r--drivers/rtc/rtc-ds1302.c7
-rw-r--r--drivers/rtc/rtc-ds1305.c24
-rw-r--r--drivers/rtc/rtc-ds1307.c32
-rw-r--r--drivers/rtc/rtc-ds1343.c185
-rw-r--r--drivers/rtc/rtc-ds1347.c2
-rw-r--r--drivers/rtc/rtc-ds1390.c2
-rw-r--r--drivers/rtc/rtc-ds1511.c26
-rw-r--r--drivers/rtc/rtc-ds1553.c78
-rw-r--r--drivers/rtc/rtc-ds1685.c2
-rw-r--r--drivers/rtc/rtc-ds1742.c75
-rw-r--r--drivers/rtc/rtc-ds2404.c2
-rw-r--r--drivers/rtc/rtc-ds3232.c2
-rw-r--r--drivers/rtc/rtc-efi.c2
-rw-r--r--drivers/rtc/rtc-fm3130.c3
-rw-r--r--drivers/rtc/rtc-goldfish.c2
-rw-r--r--drivers/rtc/rtc-isl12022.c20
-rw-r--r--drivers/rtc/rtc-isl12026.c501
-rw-r--r--drivers/rtc/rtc-isl1208.c47
-rw-r--r--drivers/rtc/rtc-jz4740.c2
-rw-r--r--drivers/rtc/rtc-lib.c8
-rw-r--r--drivers/rtc/rtc-lpc24xx.c2
-rw-r--r--drivers/rtc/rtc-lpc32xx.c2
-rw-r--r--drivers/rtc/rtc-ls1x.c2
-rw-r--r--drivers/rtc/rtc-m41t80.c42
-rw-r--r--drivers/rtc/rtc-m41t93.c2
-rw-r--r--drivers/rtc/rtc-m41t94.c3
-rw-r--r--drivers/rtc/rtc-m48t35.c2
-rw-r--r--drivers/rtc/rtc-m48t59.c61
-rw-r--r--drivers/rtc/rtc-m48t86.c25
-rw-r--r--drivers/rtc/rtc-max6900.c19
-rw-r--r--drivers/rtc/rtc-max6902.c2
-rw-r--r--drivers/rtc/rtc-max6916.c2
-rw-r--r--drivers/rtc/rtc-max77686.c4
-rw-r--r--drivers/rtc/rtc-max8997.c2
-rw-r--r--drivers/rtc/rtc-max8998.c2
-rw-r--r--drivers/rtc/rtc-mc13xxx.c2
-rw-r--r--drivers/rtc/rtc-mcp795.c4
-rw-r--r--drivers/rtc/rtc-mpc5121.c2
-rw-r--r--drivers/rtc/rtc-mrst.c4
-rw-r--r--drivers/rtc/rtc-msm6242.c2
-rw-r--r--drivers/rtc/rtc-mt7622.c3
-rw-r--r--drivers/rtc/rtc-mv.c14
-rw-r--r--drivers/rtc/rtc-mxc_v2.c2
-rw-r--r--drivers/rtc/rtc-nuc900.c14
-rw-r--r--drivers/rtc/rtc-omap.c6
-rw-r--r--drivers/rtc/rtc-pcap.c2
-rw-r--r--drivers/rtc/rtc-pcf2123.c2
-rw-r--r--drivers/rtc/rtc-pcf2127.c2
-rw-r--r--drivers/rtc/rtc-pcf50633.c2
-rw-r--r--drivers/rtc/rtc-pcf85063.c20
-rw-r--r--drivers/rtc/rtc-pcf8523.c2
-rw-r--r--drivers/rtc/rtc-pcf85363.c205
-rw-r--r--drivers/rtc/rtc-pic32.c2
-rw-r--r--drivers/rtc/rtc-pm8xxx.c55
-rw-r--r--drivers/rtc/rtc-ps3.c2
-rw-r--r--drivers/rtc/rtc-r7301.c2
-rw-r--r--drivers/rtc/rtc-r9701.c2
-rw-r--r--drivers/rtc/rtc-rk808.c25
-rw-r--r--drivers/rtc/rtc-rp5c01.c67
-rw-r--r--drivers/rtc/rtc-rs5c348.c5
-rw-r--r--drivers/rtc/rtc-rs5c372.c24
-rw-r--r--drivers/rtc/rtc-rv8803.c33
-rw-r--r--drivers/rtc/rtc-rx4581.c6
-rw-r--r--drivers/rtc/rtc-rx6110.c2
-rw-r--r--drivers/rtc/rtc-rx8010.c2
-rw-r--r--drivers/rtc/rtc-rx8025.c2
-rw-r--r--drivers/rtc/rtc-rx8581.c6
-rw-r--r--drivers/rtc/rtc-s35390a.c38
-rw-r--r--drivers/rtc/rtc-s3c.c2
-rw-r--r--drivers/rtc/rtc-s5m.c27
-rw-r--r--drivers/rtc/rtc-sc27xx.c2
-rw-r--r--drivers/rtc/rtc-sh.c2
-rw-r--r--drivers/rtc/rtc-sirfsoc.c18
-rw-r--r--drivers/rtc/rtc-snvs.c15
-rw-r--r--drivers/rtc/rtc-spear.c12
-rw-r--r--drivers/rtc/rtc-st-lpc.c16
-rw-r--r--drivers/rtc/rtc-starfire.c2
-rw-r--r--drivers/rtc/rtc-stk17ta8.c74
-rw-r--r--drivers/rtc/rtc-sun6i.c2
-rw-r--r--drivers/rtc/rtc-sunxi.c2
-rw-r--r--drivers/rtc/rtc-sysfs.c12
-rw-r--r--drivers/rtc/rtc-tegra.c4
-rw-r--r--drivers/rtc/rtc-tps6586x.c2
-rw-r--r--drivers/rtc/rtc-tx4939.c95
-rw-r--r--drivers/rtc/rtc-wm831x.c2
-rw-r--r--drivers/rtc/rtc-xgene.c2
-rw-r--r--drivers/rtc/rtc-zynqmp.c2
-rw-r--r--drivers/rtc/systohc.c2
-rw-r--r--include/linux/mfd/samsung/rtc.h11
-rw-r--r--include/linux/rtc.h29
-rw-r--r--include/trace/events/rtc.h206
123 files changed, 1810 insertions, 1084 deletions
diff --git a/Documentation/ABI/testing/sysfs-class-rtc b/Documentation/ABI/testing/sysfs-class-rtc
index cf60412882f0..95984289a4ee 100644
--- a/Documentation/ABI/testing/sysfs-class-rtc
+++ b/Documentation/ABI/testing/sysfs-class-rtc
@@ -43,6 +43,14 @@ Contact: linux-rtc@vger.kernel.org
43Description: 43Description:
44 (RO) The name of the RTC corresponding to this sysfs directory 44 (RO) The name of the RTC corresponding to this sysfs directory
45 45
46What: /sys/class/rtc/rtcX/range
47Date: January 2018
48KernelVersion: 4.16
49Contact: linux-rtc@vger.kernel.org
50Description:
51 Valid time range for the RTC, as seconds from epoch, formatted
52 as [min, max]
53
46What: /sys/class/rtc/rtcX/since_epoch 54What: /sys/class/rtc/rtcX/since_epoch
47Date: March 2006 55Date: March 2006
48KernelVersion: 2.6.17 56KernelVersion: 2.6.17
@@ -57,14 +65,6 @@ Contact: linux-rtc@vger.kernel.org
57Description: 65Description:
58 (RO) RTC-provided time in 24-hour notation (hh:mm:ss) 66 (RO) RTC-provided time in 24-hour notation (hh:mm:ss)
59 67
60What: /sys/class/rtc/rtcX/*/nvmem
61Date: February 2016
62KernelVersion: 4.6
63Contact: linux-rtc@vger.kernel.org
64Description:
65 (RW) The non volatile storage exported as a raw file, as
66 described in Documentation/nvmem/nvmem.txt
67
68What: /sys/class/rtc/rtcX/offset 68What: /sys/class/rtc/rtcX/offset
69Date: February 2016 69Date: February 2016
70KernelVersion: 4.6 70KernelVersion: 4.6
diff --git a/Documentation/devicetree/bindings/rtc/isil,isl12026.txt b/Documentation/devicetree/bindings/rtc/isil,isl12026.txt
new file mode 100644
index 000000000000..2e0be45193bb
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/isil,isl12026.txt
@@ -0,0 +1,28 @@
1ISL12026 I2C RTC/EEPROM
2
3ISL12026 is an I2C RTC/EEPROM combination device. The RTC and control
4registers respond at bus address 0x6f, and the EEPROM array responds
5at bus address 0x57. The canonical "reg" value will be for the RTC portion.
6
7Required properties supported by the device:
8
9 - "compatible": must be "isil,isl12026"
10 - "reg": I2C bus address of the device (always 0x6f)
11
12Optional properties:
13
14 - "isil,pwr-bsw": If present PWR.BSW bit must be set to the specified
15 value for proper operation.
16
17 - "isil,pwr-sbib": If present PWR.SBIB bit must be set to the specified
18 value for proper operation.
19
20
21Example:
22
23 rtc@6f {
24 compatible = "isil,isl12026";
25 reg = <0x6f>;
26 isil,pwr-bsw = <0>;
27 isil,pwr-sbib = <1>;
28 }
diff --git a/MAINTAINERS b/MAINTAINERS
index 6d296bdce328..dd7ce9171ac0 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11810,7 +11810,7 @@ X: kernel/torture.c
11810 11810
11811REAL TIME CLOCK (RTC) SUBSYSTEM 11811REAL TIME CLOCK (RTC) SUBSYSTEM
11812M: Alessandro Zummo <a.zummo@towertech.it> 11812M: Alessandro Zummo <a.zummo@towertech.it>
11813M: Alexandre Belloni <alexandre.belloni@free-electrons.com> 11813M: Alexandre Belloni <alexandre.belloni@bootlin.com>
11814L: linux-rtc@vger.kernel.org 11814L: linux-rtc@vger.kernel.org
11815Q: http://patchwork.ozlabs.org/project/rtc-linux/list/ 11815Q: http://patchwork.ozlabs.org/project/rtc-linux/list/
11816T: git git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git 11816T: git git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c
index f7e684560186..c3830400ca28 100644
--- a/arch/parisc/kernel/time.c
+++ b/arch/parisc/kernel/time.c
@@ -174,7 +174,7 @@ static int rtc_generic_get_time(struct device *dev, struct rtc_time *tm)
174 174
175 /* we treat tod_sec as unsigned, so this can work until year 2106 */ 175 /* we treat tod_sec as unsigned, so this can work until year 2106 */
176 rtc_time64_to_tm(tod_data.tod_sec, tm); 176 rtc_time64_to_tm(tod_data.tod_sec, tm);
177 return rtc_valid_tm(tm); 177 return 0;
178} 178}
179 179
180static int rtc_generic_set_time(struct device *dev, struct rtc_time *tm) 180static int rtc_generic_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c
index 0c858d027bf3..57dc546628b5 100644
--- a/drivers/char/rtc.c
+++ b/drivers/char/rtc.c
@@ -809,89 +809,6 @@ static __poll_t rtc_poll(struct file *file, poll_table *wait)
809} 809}
810#endif 810#endif
811 811
812int rtc_register(rtc_task_t *task)
813{
814#ifndef RTC_IRQ
815 return -EIO;
816#else
817 if (task == NULL || task->func == NULL)
818 return -EINVAL;
819 spin_lock_irq(&rtc_lock);
820 if (rtc_status & RTC_IS_OPEN) {
821 spin_unlock_irq(&rtc_lock);
822 return -EBUSY;
823 }
824 spin_lock(&rtc_task_lock);
825 if (rtc_callback) {
826 spin_unlock(&rtc_task_lock);
827 spin_unlock_irq(&rtc_lock);
828 return -EBUSY;
829 }
830 rtc_status |= RTC_IS_OPEN;
831 rtc_callback = task;
832 spin_unlock(&rtc_task_lock);
833 spin_unlock_irq(&rtc_lock);
834 return 0;
835#endif
836}
837EXPORT_SYMBOL(rtc_register);
838
839int rtc_unregister(rtc_task_t *task)
840{
841#ifndef RTC_IRQ
842 return -EIO;
843#else
844 unsigned char tmp;
845
846 spin_lock_irq(&rtc_lock);
847 spin_lock(&rtc_task_lock);
848 if (rtc_callback != task) {
849 spin_unlock(&rtc_task_lock);
850 spin_unlock_irq(&rtc_lock);
851 return -ENXIO;
852 }
853 rtc_callback = NULL;
854
855 /* disable controls */
856 if (!hpet_mask_rtc_irq_bit(RTC_PIE | RTC_AIE | RTC_UIE)) {
857 tmp = CMOS_READ(RTC_CONTROL);
858 tmp &= ~RTC_PIE;
859 tmp &= ~RTC_AIE;
860 tmp &= ~RTC_UIE;
861 CMOS_WRITE(tmp, RTC_CONTROL);
862 CMOS_READ(RTC_INTR_FLAGS);
863 }
864 if (rtc_status & RTC_TIMER_ON) {
865 rtc_status &= ~RTC_TIMER_ON;
866 del_timer(&rtc_irq_timer);
867 }
868 rtc_status &= ~RTC_IS_OPEN;
869 spin_unlock(&rtc_task_lock);
870 spin_unlock_irq(&rtc_lock);
871 return 0;
872#endif
873}
874EXPORT_SYMBOL(rtc_unregister);
875
876int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg)
877{
878#ifndef RTC_IRQ
879 return -EIO;
880#else
881 unsigned long flags;
882 if (cmd != RTC_PIE_ON && cmd != RTC_PIE_OFF && cmd != RTC_IRQP_SET)
883 return -EINVAL;
884 spin_lock_irqsave(&rtc_task_lock, flags);
885 if (rtc_callback != task) {
886 spin_unlock_irqrestore(&rtc_task_lock, flags);
887 return -ENXIO;
888 }
889 spin_unlock_irqrestore(&rtc_task_lock, flags);
890 return rtc_do_ioctl(cmd, arg, 1);
891#endif
892}
893EXPORT_SYMBOL(rtc_control);
894
895/* 812/*
896 * The various file operations we support. 813 * The various file operations we support.
897 */ 814 */
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 319e3c8976d5..59e6dede3db3 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -407,6 +407,16 @@ config RTC_DRV_ISL12022
407 This driver can also be built as a module. If so, the module 407 This driver can also be built as a module. If so, the module
408 will be called rtc-isl12022. 408 will be called rtc-isl12022.
409 409
410config RTC_DRV_ISL12026
411 tristate "Intersil ISL12026"
412 depends on OF || COMPILE_TEST
413 help
414 If you say yes here you get support for the
415 Intersil ISL12026 RTC chip.
416
417 This driver can also be built as a module. If so, the module
418 will be called rtc-isl12026.
419
410config RTC_DRV_X1205 420config RTC_DRV_X1205
411 tristate "Xicor/Intersil X1205" 421 tristate "Xicor/Intersil X1205"
412 help 422 help
@@ -1413,6 +1423,7 @@ config RTC_DRV_AT91RM9200
1413config RTC_DRV_AT91SAM9 1423config RTC_DRV_AT91SAM9
1414 tristate "AT91SAM9 RTT as RTC" 1424 tristate "AT91SAM9 RTT as RTC"
1415 depends on ARCH_AT91 || COMPILE_TEST 1425 depends on ARCH_AT91 || COMPILE_TEST
1426 depends on HAS_IOMEM
1416 select MFD_SYSCON 1427 select MFD_SYSCON
1417 help 1428 help
1418 Some AT91SAM9 SoCs provide an RTT (Real Time Timer) block which 1429 Some AT91SAM9 SoCs provide an RTT (Real Time Timer) block which
@@ -1502,7 +1513,7 @@ config RTC_DRV_STARFIRE
1502 1513
1503config RTC_DRV_TX4939 1514config RTC_DRV_TX4939
1504 tristate "TX4939 SoC" 1515 tristate "TX4939 SoC"
1505 depends on SOC_TX4939 1516 depends on SOC_TX4939 || COMPILE_TEST
1506 help 1517 help
1507 Driver for the internal RTC (Realtime Clock) module found on 1518 Driver for the internal RTC (Realtime Clock) module found on
1508 Toshiba TX4939 SoC. 1519 Toshiba TX4939 SoC.
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index ee0206becd9f..5ff2fc0c361a 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -75,6 +75,7 @@ obj-$(CONFIG_RTC_DRV_HID_SENSOR_TIME) += rtc-hid-sensor-time.o
75obj-$(CONFIG_RTC_DRV_HYM8563) += rtc-hym8563.o 75obj-$(CONFIG_RTC_DRV_HYM8563) += rtc-hym8563.o
76obj-$(CONFIG_RTC_DRV_IMXDI) += rtc-imxdi.o 76obj-$(CONFIG_RTC_DRV_IMXDI) += rtc-imxdi.o
77obj-$(CONFIG_RTC_DRV_ISL12022) += rtc-isl12022.o 77obj-$(CONFIG_RTC_DRV_ISL12022) += rtc-isl12022.o
78obj-$(CONFIG_RTC_DRV_ISL12026) += rtc-isl12026.o
78obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o 79obj-$(CONFIG_RTC_DRV_ISL1208) += rtc-isl1208.o
79obj-$(CONFIG_RTC_DRV_JZ4740) += rtc-jz4740.o 80obj-$(CONFIG_RTC_DRV_JZ4740) += rtc-jz4740.o
80obj-$(CONFIG_RTC_DRV_LP8788) += rtc-lp8788.o 81obj-$(CONFIG_RTC_DRV_LP8788) += rtc-lp8788.o
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
index 722d683e0b0f..d37588f08055 100644
--- a/drivers/rtc/class.c
+++ b/drivers/rtc/class.c
@@ -211,6 +211,73 @@ static int rtc_device_get_id(struct device *dev)
211 return id; 211 return id;
212} 212}
213 213
214static void rtc_device_get_offset(struct rtc_device *rtc)
215{
216 time64_t range_secs;
217 u32 start_year;
218 int ret;
219
220 /*
221 * If RTC driver did not implement the range of RTC hardware device,
222 * then we can not expand the RTC range by adding or subtracting one
223 * offset.
224 */
225 if (rtc->range_min == rtc->range_max)
226 return;
227
228 ret = device_property_read_u32(rtc->dev.parent, "start-year",
229 &start_year);
230 if (!ret) {
231 rtc->start_secs = mktime64(start_year, 1, 1, 0, 0, 0);
232 rtc->set_start_time = true;
233 }
234
235 /*
236 * If user did not implement the start time for RTC driver, then no
237 * need to expand the RTC range.
238 */
239 if (!rtc->set_start_time)
240 return;
241
242 range_secs = rtc->range_max - rtc->range_min + 1;
243
244 /*
245 * If the start_secs is larger than the maximum seconds (rtc->range_max)
246 * supported by RTC hardware or the maximum seconds of new expanded
247 * range (start_secs + rtc->range_max - rtc->range_min) is less than
248 * rtc->range_min, which means the minimum seconds (rtc->range_min) of
249 * RTC hardware will be mapped to start_secs by adding one offset, so
250 * the offset seconds calculation formula should be:
251 * rtc->offset_secs = rtc->start_secs - rtc->range_min;
252 *
253 * If the start_secs is larger than the minimum seconds (rtc->range_min)
254 * supported by RTC hardware, then there is one region is overlapped
255 * between the original RTC hardware range and the new expanded range,
256 * and this overlapped region do not need to be mapped into the new
257 * expanded range due to it is valid for RTC device. So the minimum
258 * seconds of RTC hardware (rtc->range_min) should be mapped to
259 * rtc->range_max + 1, then the offset seconds formula should be:
260 * rtc->offset_secs = rtc->range_max - rtc->range_min + 1;
261 *
262 * If the start_secs is less than the minimum seconds (rtc->range_min),
263 * which is similar to case 2. So the start_secs should be mapped to
264 * start_secs + rtc->range_max - rtc->range_min + 1, then the
265 * offset seconds formula should be:
266 * rtc->offset_secs = -(rtc->range_max - rtc->range_min + 1);
267 *
268 * Otherwise the offset seconds should be 0.
269 */
270 if (rtc->start_secs > rtc->range_max ||
271 rtc->start_secs + range_secs - 1 < rtc->range_min)
272 rtc->offset_secs = rtc->start_secs - rtc->range_min;
273 else if (rtc->start_secs > rtc->range_min)
274 rtc->offset_secs = range_secs;
275 else if (rtc->start_secs < rtc->range_min)
276 rtc->offset_secs = -range_secs;
277 else
278 rtc->offset_secs = 0;
279}
280
214/** 281/**
215 * rtc_device_register - register w/ RTC class 282 * rtc_device_register - register w/ RTC class
216 * @dev: the device to register 283 * @dev: the device to register
@@ -247,6 +314,8 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
247 314
248 dev_set_name(&rtc->dev, "rtc%d", id); 315 dev_set_name(&rtc->dev, "rtc%d", id);
249 316
317 rtc_device_get_offset(rtc);
318
250 /* Check to see if there is an ALARM already set in hw */ 319 /* Check to see if there is an ALARM already set in hw */
251 err = __rtc_read_alarm(rtc, &alrm); 320 err = __rtc_read_alarm(rtc, &alrm);
252 321
@@ -293,8 +362,6 @@ EXPORT_SYMBOL_GPL(rtc_device_register);
293 */ 362 */
294void rtc_device_unregister(struct rtc_device *rtc) 363void rtc_device_unregister(struct rtc_device *rtc)
295{ 364{
296 rtc_nvmem_unregister(rtc);
297
298 mutex_lock(&rtc->ops_lock); 365 mutex_lock(&rtc->ops_lock);
299 /* 366 /*
300 * Remove innards of this RTC, then disable it, before 367 * Remove innards of this RTC, then disable it, before
@@ -312,6 +379,7 @@ static void devm_rtc_device_release(struct device *dev, void *res)
312{ 379{
313 struct rtc_device *rtc = *(struct rtc_device **)res; 380 struct rtc_device *rtc = *(struct rtc_device **)res;
314 381
382 rtc_nvmem_unregister(rtc);
315 rtc_device_unregister(rtc); 383 rtc_device_unregister(rtc);
316} 384}
317 385
@@ -382,6 +450,8 @@ static void devm_rtc_release_device(struct device *dev, void *res)
382{ 450{
383 struct rtc_device *rtc = *(struct rtc_device **)res; 451 struct rtc_device *rtc = *(struct rtc_device **)res;
384 452
453 rtc_nvmem_unregister(rtc);
454
385 if (rtc->registered) 455 if (rtc->registered)
386 rtc_device_unregister(rtc); 456 rtc_device_unregister(rtc);
387 else 457 else
@@ -435,6 +505,7 @@ int __rtc_register_device(struct module *owner, struct rtc_device *rtc)
435 return -EINVAL; 505 return -EINVAL;
436 506
437 rtc->owner = owner; 507 rtc->owner = owner;
508 rtc_device_get_offset(rtc);
438 509
439 /* Check to see if there is an ALARM already set in hw */ 510 /* Check to see if there is an ALARM already set in hw */
440 err = __rtc_read_alarm(rtc, &alrm); 511 err = __rtc_read_alarm(rtc, &alrm);
@@ -453,8 +524,6 @@ int __rtc_register_device(struct module *owner, struct rtc_device *rtc)
453 524
454 rtc_proc_add_device(rtc); 525 rtc_proc_add_device(rtc);
455 526
456 rtc_nvmem_register(rtc);
457
458 rtc->registered = true; 527 rtc->registered = true;
459 dev_info(rtc->dev.parent, "registered as %s\n", 528 dev_info(rtc->dev.parent, "registered as %s\n",
460 dev_name(&rtc->dev)); 529 dev_name(&rtc->dev));
diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c
index e1cfa06810ef..e79f2a181ad2 100644
--- a/drivers/rtc/hctosys.c
+++ b/drivers/rtc/hctosys.c
@@ -49,6 +49,11 @@ static int __init rtc_hctosys(void)
49 49
50 tv64.tv_sec = rtc_tm_to_time64(&tm); 50 tv64.tv_sec = rtc_tm_to_time64(&tm);
51 51
52#if BITS_PER_LONG == 32
53 if (tv64.tv_sec > INT_MAX)
54 goto err_read;
55#endif
56
52 err = do_settimeofday64(&tv64); 57 err = do_settimeofday64(&tv64);
53 58
54 dev_info(rtc->dev.parent, 59 dev_info(rtc->dev.parent,
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index 672b192f8153..7cbdc9228dd5 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -17,9 +17,73 @@
17#include <linux/log2.h> 17#include <linux/log2.h>
18#include <linux/workqueue.h> 18#include <linux/workqueue.h>
19 19
20#define CREATE_TRACE_POINTS
21#include <trace/events/rtc.h>
22
20static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer); 23static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer);
21static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer); 24static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer);
22 25
26static void rtc_add_offset(struct rtc_device *rtc, struct rtc_time *tm)
27{
28 time64_t secs;
29
30 if (!rtc->offset_secs)
31 return;
32
33 secs = rtc_tm_to_time64(tm);
34
35 /*
36 * Since the reading time values from RTC device are always in the RTC
37 * original valid range, but we need to skip the overlapped region
38 * between expanded range and original range, which is no need to add
39 * the offset.
40 */
41 if ((rtc->start_secs > rtc->range_min && secs >= rtc->start_secs) ||
42 (rtc->start_secs < rtc->range_min &&
43 secs <= (rtc->start_secs + rtc->range_max - rtc->range_min)))
44 return;
45
46 rtc_time64_to_tm(secs + rtc->offset_secs, tm);
47}
48
49static void rtc_subtract_offset(struct rtc_device *rtc, struct rtc_time *tm)
50{
51 time64_t secs;
52
53 if (!rtc->offset_secs)
54 return;
55
56 secs = rtc_tm_to_time64(tm);
57
58 /*
59 * If the setting time values are in the valid range of RTC hardware
60 * device, then no need to subtract the offset when setting time to RTC
61 * device. Otherwise we need to subtract the offset to make the time
62 * values are valid for RTC hardware device.
63 */
64 if (secs >= rtc->range_min && secs <= rtc->range_max)
65 return;
66
67 rtc_time64_to_tm(secs - rtc->offset_secs, tm);
68}
69
70static int rtc_valid_range(struct rtc_device *rtc, struct rtc_time *tm)
71{
72 if (rtc->range_min != rtc->range_max) {
73 time64_t time = rtc_tm_to_time64(tm);
74 time64_t range_min = rtc->set_start_time ? rtc->start_secs :
75 rtc->range_min;
76 time64_t range_max = rtc->set_start_time ?
77 (rtc->start_secs + rtc->range_max - rtc->range_min) :
78 rtc->range_max;
79
80 if (time < range_min || time > range_max)
81 return -ERANGE;
82 }
83
84 return 0;
85}
86
23static int __rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm) 87static int __rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm)
24{ 88{
25 int err; 89 int err;
@@ -36,6 +100,8 @@ static int __rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm)
36 return err; 100 return err;
37 } 101 }
38 102
103 rtc_add_offset(rtc, tm);
104
39 err = rtc_valid_tm(tm); 105 err = rtc_valid_tm(tm);
40 if (err < 0) 106 if (err < 0)
41 dev_dbg(&rtc->dev, "read_time: rtc_time isn't valid\n"); 107 dev_dbg(&rtc->dev, "read_time: rtc_time isn't valid\n");
@@ -53,6 +119,8 @@ int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm)
53 119
54 err = __rtc_read_time(rtc, tm); 120 err = __rtc_read_time(rtc, tm);
55 mutex_unlock(&rtc->ops_lock); 121 mutex_unlock(&rtc->ops_lock);
122
123 trace_rtc_read_time(rtc_tm_to_time64(tm), err);
56 return err; 124 return err;
57} 125}
58EXPORT_SYMBOL_GPL(rtc_read_time); 126EXPORT_SYMBOL_GPL(rtc_read_time);
@@ -65,6 +133,12 @@ int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm)
65 if (err != 0) 133 if (err != 0)
66 return err; 134 return err;
67 135
136 err = rtc_valid_range(rtc, tm);
137 if (err)
138 return err;
139
140 rtc_subtract_offset(rtc, tm);
141
68 err = mutex_lock_interruptible(&rtc->ops_lock); 142 err = mutex_lock_interruptible(&rtc->ops_lock);
69 if (err) 143 if (err)
70 return err; 144 return err;
@@ -87,6 +161,8 @@ int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm)
87 mutex_unlock(&rtc->ops_lock); 161 mutex_unlock(&rtc->ops_lock);
88 /* A timer might have just expired */ 162 /* A timer might have just expired */
89 schedule_work(&rtc->irqwork); 163 schedule_work(&rtc->irqwork);
164
165 trace_rtc_set_time(rtc_tm_to_time64(tm), err);
90 return err; 166 return err;
91} 167}
92EXPORT_SYMBOL_GPL(rtc_set_time); 168EXPORT_SYMBOL_GPL(rtc_set_time);
@@ -119,6 +195,8 @@ static int rtc_read_alarm_internal(struct rtc_device *rtc, struct rtc_wkalrm *al
119 } 195 }
120 196
121 mutex_unlock(&rtc->ops_lock); 197 mutex_unlock(&rtc->ops_lock);
198
199 trace_rtc_read_alarm(rtc_tm_to_time64(&alarm->time), err);
122 return err; 200 return err;
123} 201}
124 202
@@ -316,6 +394,7 @@ int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
316 } 394 }
317 mutex_unlock(&rtc->ops_lock); 395 mutex_unlock(&rtc->ops_lock);
318 396
397 trace_rtc_read_alarm(rtc_tm_to_time64(&alarm->time), err);
319 return err; 398 return err;
320} 399}
321EXPORT_SYMBOL_GPL(rtc_read_alarm); 400EXPORT_SYMBOL_GPL(rtc_read_alarm);
@@ -329,6 +408,8 @@ static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
329 err = rtc_valid_tm(&alarm->time); 408 err = rtc_valid_tm(&alarm->time);
330 if (err) 409 if (err)
331 return err; 410 return err;
411
412 rtc_subtract_offset(rtc, &alarm->time);
332 scheduled = rtc_tm_to_time64(&alarm->time); 413 scheduled = rtc_tm_to_time64(&alarm->time);
333 414
334 /* Make sure we're not setting alarms in the past */ 415 /* Make sure we're not setting alarms in the past */
@@ -352,6 +433,7 @@ static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
352 else 433 else
353 err = rtc->ops->set_alarm(rtc->dev.parent, alarm); 434 err = rtc->ops->set_alarm(rtc->dev.parent, alarm);
354 435
436 trace_rtc_set_alarm(rtc_tm_to_time64(&alarm->time), err);
355 return err; 437 return err;
356} 438}
357 439
@@ -363,6 +445,10 @@ int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
363 if (err != 0) 445 if (err != 0)
364 return err; 446 return err;
365 447
448 err = rtc_valid_range(rtc, &alarm->time);
449 if (err)
450 return err;
451
366 err = mutex_lock_interruptible(&rtc->ops_lock); 452 err = mutex_lock_interruptible(&rtc->ops_lock);
367 if (err) 453 if (err)
368 return err; 454 return err;
@@ -375,6 +461,8 @@ int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
375 err = rtc_timer_enqueue(rtc, &rtc->aie_timer); 461 err = rtc_timer_enqueue(rtc, &rtc->aie_timer);
376 462
377 mutex_unlock(&rtc->ops_lock); 463 mutex_unlock(&rtc->ops_lock);
464
465 rtc_add_offset(rtc, &alarm->time);
378 return err; 466 return err;
379} 467}
380EXPORT_SYMBOL_GPL(rtc_set_alarm); 468EXPORT_SYMBOL_GPL(rtc_set_alarm);
@@ -406,6 +494,7 @@ int rtc_initialize_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
406 494
407 rtc->aie_timer.enabled = 1; 495 rtc->aie_timer.enabled = 1;
408 timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node); 496 timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node);
497 trace_rtc_timer_enqueue(&rtc->aie_timer);
409 } 498 }
410 mutex_unlock(&rtc->ops_lock); 499 mutex_unlock(&rtc->ops_lock);
411 return err; 500 return err;
@@ -435,6 +524,8 @@ int rtc_alarm_irq_enable(struct rtc_device *rtc, unsigned int enabled)
435 err = rtc->ops->alarm_irq_enable(rtc->dev.parent, enabled); 524 err = rtc->ops->alarm_irq_enable(rtc->dev.parent, enabled);
436 525
437 mutex_unlock(&rtc->ops_lock); 526 mutex_unlock(&rtc->ops_lock);
527
528 trace_rtc_alarm_irq_enable(enabled, err);
438 return err; 529 return err;
439} 530}
440EXPORT_SYMBOL_GPL(rtc_alarm_irq_enable); 531EXPORT_SYMBOL_GPL(rtc_alarm_irq_enable);
@@ -709,6 +800,8 @@ retry:
709 rtc->pie_enabled = enabled; 800 rtc->pie_enabled = enabled;
710 } 801 }
711 spin_unlock_irqrestore(&rtc->irq_task_lock, flags); 802 spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
803
804 trace_rtc_irq_set_state(enabled, err);
712 return err; 805 return err;
713} 806}
714EXPORT_SYMBOL_GPL(rtc_irq_set_state); 807EXPORT_SYMBOL_GPL(rtc_irq_set_state);
@@ -745,6 +838,8 @@ retry:
745 } 838 }
746 } 839 }
747 spin_unlock_irqrestore(&rtc->irq_task_lock, flags); 840 spin_unlock_irqrestore(&rtc->irq_task_lock, flags);
841
842 trace_rtc_irq_set_freq(freq, err);
748 return err; 843 return err;
749} 844}
750EXPORT_SYMBOL_GPL(rtc_irq_set_freq); 845EXPORT_SYMBOL_GPL(rtc_irq_set_freq);
@@ -779,6 +874,7 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
779 } 874 }
780 875
781 timerqueue_add(&rtc->timerqueue, &timer->node); 876 timerqueue_add(&rtc->timerqueue, &timer->node);
877 trace_rtc_timer_enqueue(timer);
782 if (!next || ktime_before(timer->node.expires, next->expires)) { 878 if (!next || ktime_before(timer->node.expires, next->expires)) {
783 struct rtc_wkalrm alarm; 879 struct rtc_wkalrm alarm;
784 int err; 880 int err;
@@ -790,6 +886,7 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
790 schedule_work(&rtc->irqwork); 886 schedule_work(&rtc->irqwork);
791 } else if (err) { 887 } else if (err) {
792 timerqueue_del(&rtc->timerqueue, &timer->node); 888 timerqueue_del(&rtc->timerqueue, &timer->node);
889 trace_rtc_timer_dequeue(timer);
793 timer->enabled = 0; 890 timer->enabled = 0;
794 return err; 891 return err;
795 } 892 }
@@ -803,6 +900,7 @@ static void rtc_alarm_disable(struct rtc_device *rtc)
803 return; 900 return;
804 901
805 rtc->ops->alarm_irq_enable(rtc->dev.parent, false); 902 rtc->ops->alarm_irq_enable(rtc->dev.parent, false);
903 trace_rtc_alarm_irq_enable(0, 0);
806} 904}
807 905
808/** 906/**
@@ -821,6 +919,7 @@ static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer)
821{ 919{
822 struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue); 920 struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue);
823 timerqueue_del(&rtc->timerqueue, &timer->node); 921 timerqueue_del(&rtc->timerqueue, &timer->node);
922 trace_rtc_timer_dequeue(timer);
824 timer->enabled = 0; 923 timer->enabled = 0;
825 if (next == &timer->node) { 924 if (next == &timer->node) {
826 struct rtc_wkalrm alarm; 925 struct rtc_wkalrm alarm;
@@ -871,16 +970,19 @@ again:
871 /* expire timer */ 970 /* expire timer */
872 timer = container_of(next, struct rtc_timer, node); 971 timer = container_of(next, struct rtc_timer, node);
873 timerqueue_del(&rtc->timerqueue, &timer->node); 972 timerqueue_del(&rtc->timerqueue, &timer->node);
973 trace_rtc_timer_dequeue(timer);
874 timer->enabled = 0; 974 timer->enabled = 0;
875 if (timer->task.func) 975 if (timer->task.func)
876 timer->task.func(timer->task.private_data); 976 timer->task.func(timer->task.private_data);
877 977
978 trace_rtc_timer_fired(timer);
878 /* Re-add/fwd periodic timers */ 979 /* Re-add/fwd periodic timers */
879 if (ktime_to_ns(timer->period)) { 980 if (ktime_to_ns(timer->period)) {
880 timer->node.expires = ktime_add(timer->node.expires, 981 timer->node.expires = ktime_add(timer->node.expires,
881 timer->period); 982 timer->period);
882 timer->enabled = 1; 983 timer->enabled = 1;
883 timerqueue_add(&rtc->timerqueue, &timer->node); 984 timerqueue_add(&rtc->timerqueue, &timer->node);
985 trace_rtc_timer_enqueue(timer);
884 } 986 }
885 } 987 }
886 988
@@ -902,6 +1004,7 @@ reprogram:
902 1004
903 timer = container_of(next, struct rtc_timer, node); 1005 timer = container_of(next, struct rtc_timer, node);
904 timerqueue_del(&rtc->timerqueue, &timer->node); 1006 timerqueue_del(&rtc->timerqueue, &timer->node);
1007 trace_rtc_timer_dequeue(timer);
905 timer->enabled = 0; 1008 timer->enabled = 0;
906 dev_err(&rtc->dev, "__rtc_set_alarm: err=%d\n", err); 1009 dev_err(&rtc->dev, "__rtc_set_alarm: err=%d\n", err);
907 goto again; 1010 goto again;
@@ -992,6 +1095,8 @@ int rtc_read_offset(struct rtc_device *rtc, long *offset)
992 mutex_lock(&rtc->ops_lock); 1095 mutex_lock(&rtc->ops_lock);
993 ret = rtc->ops->read_offset(rtc->dev.parent, offset); 1096 ret = rtc->ops->read_offset(rtc->dev.parent, offset);
994 mutex_unlock(&rtc->ops_lock); 1097 mutex_unlock(&rtc->ops_lock);
1098
1099 trace_rtc_read_offset(*offset, ret);
995 return ret; 1100 return ret;
996} 1101}
997 1102
@@ -1025,5 +1130,7 @@ int rtc_set_offset(struct rtc_device *rtc, long offset)
1025 mutex_lock(&rtc->ops_lock); 1130 mutex_lock(&rtc->ops_lock);
1026 ret = rtc->ops->set_offset(rtc->dev.parent, offset); 1131 ret = rtc->ops->set_offset(rtc->dev.parent, offset);
1027 mutex_unlock(&rtc->ops_lock); 1132 mutex_unlock(&rtc->ops_lock);
1133
1134 trace_rtc_set_offset(offset, ret);
1028 return ret; 1135 return ret;
1029} 1136}
diff --git a/drivers/rtc/nvmem.c b/drivers/rtc/nvmem.c
index 8567b4ed9ac6..17ec4c8d0fad 100644
--- a/drivers/rtc/nvmem.c
+++ b/drivers/rtc/nvmem.c
@@ -14,8 +14,6 @@
14#include <linux/rtc.h> 14#include <linux/rtc.h>
15#include <linux/sysfs.h> 15#include <linux/sysfs.h>
16 16
17#include "rtc-core.h"
18
19/* 17/*
20 * Deprecated ABI compatibility, this should be removed at some point 18 * Deprecated ABI compatibility, this should be removed at some point
21 */ 19 */
@@ -46,7 +44,7 @@ rtc_nvram_write(struct file *filp, struct kobject *kobj,
46 return nvmem_device_write(rtc->nvmem, off, count, buf); 44 return nvmem_device_write(rtc->nvmem, off, count, buf);
47} 45}
48 46
49static int rtc_nvram_register(struct rtc_device *rtc) 47static int rtc_nvram_register(struct rtc_device *rtc, size_t size)
50{ 48{
51 int err; 49 int err;
52 50
@@ -64,7 +62,7 @@ static int rtc_nvram_register(struct rtc_device *rtc)
64 62
65 rtc->nvram->read = rtc_nvram_read; 63 rtc->nvram->read = rtc_nvram_read;
66 rtc->nvram->write = rtc_nvram_write; 64 rtc->nvram->write = rtc_nvram_write;
67 rtc->nvram->size = rtc->nvmem_config->size; 65 rtc->nvram->size = size;
68 66
69 err = sysfs_create_bin_file(&rtc->dev.parent->kobj, 67 err = sysfs_create_bin_file(&rtc->dev.parent->kobj,
70 rtc->nvram); 68 rtc->nvram);
@@ -84,21 +82,28 @@ static void rtc_nvram_unregister(struct rtc_device *rtc)
84/* 82/*
85 * New ABI, uses nvmem 83 * New ABI, uses nvmem
86 */ 84 */
87void rtc_nvmem_register(struct rtc_device *rtc) 85int rtc_nvmem_register(struct rtc_device *rtc,
86 struct nvmem_config *nvmem_config)
88{ 87{
89 if (!rtc->nvmem_config) 88 if (!IS_ERR_OR_NULL(rtc->nvmem))
90 return; 89 return -EBUSY;
90
91 if (!nvmem_config)
92 return -ENODEV;
91 93
92 rtc->nvmem_config->dev = &rtc->dev; 94 nvmem_config->dev = rtc->dev.parent;
93 rtc->nvmem_config->owner = rtc->owner; 95 nvmem_config->owner = rtc->owner;
94 rtc->nvmem = nvmem_register(rtc->nvmem_config); 96 rtc->nvmem = nvmem_register(nvmem_config);
95 if (IS_ERR_OR_NULL(rtc->nvmem)) 97 if (IS_ERR_OR_NULL(rtc->nvmem))
96 return; 98 return PTR_ERR(rtc->nvmem);
97 99
98 /* Register the old ABI */ 100 /* Register the old ABI */
99 if (rtc->nvram_old_abi) 101 if (rtc->nvram_old_abi)
100 rtc_nvram_register(rtc); 102 rtc_nvram_register(rtc, nvmem_config->size);
103
104 return 0;
101} 105}
106EXPORT_SYMBOL_GPL(rtc_nvmem_register);
102 107
103void rtc_nvmem_unregister(struct rtc_device *rtc) 108void rtc_nvmem_unregister(struct rtc_device *rtc)
104{ 109{
diff --git a/drivers/rtc/rtc-88pm80x.c b/drivers/rtc/rtc-88pm80x.c
index 466bf7f9a285..6cbafefa80a2 100644
--- a/drivers/rtc/rtc-88pm80x.c
+++ b/drivers/rtc/rtc-88pm80x.c
@@ -134,9 +134,9 @@ static int pm80x_rtc_set_time(struct device *dev, struct rtc_time *tm)
134 struct pm80x_rtc_info *info = dev_get_drvdata(dev); 134 struct pm80x_rtc_info *info = dev_get_drvdata(dev);
135 unsigned char buf[4]; 135 unsigned char buf[4];
136 unsigned long ticks, base, data; 136 unsigned long ticks, base, data;
137 if ((tm->tm_year < 70) || (tm->tm_year > 138)) { 137 if (tm->tm_year > 206) {
138 dev_dbg(info->dev, 138 dev_dbg(info->dev,
139 "Set time %d out of range. Please set time between 1970 to 2038.\n", 139 "Set time %d out of range. Please set time between 1970 to 2106.\n",
140 1900 + tm->tm_year); 140 1900 + tm->tm_year);
141 return -EINVAL; 141 return -EINVAL;
142 } 142 }
diff --git a/drivers/rtc/rtc-88pm860x.c b/drivers/rtc/rtc-88pm860x.c
index 19e53b3b8e00..01ffc0ef8033 100644
--- a/drivers/rtc/rtc-88pm860x.c
+++ b/drivers/rtc/rtc-88pm860x.c
@@ -135,9 +135,9 @@ static int pm860x_rtc_set_time(struct device *dev, struct rtc_time *tm)
135 unsigned char buf[4]; 135 unsigned char buf[4];
136 unsigned long ticks, base, data; 136 unsigned long ticks, base, data;
137 137
138 if ((tm->tm_year < 70) || (tm->tm_year > 138)) { 138 if (tm->tm_year > 206) {
139 dev_dbg(info->dev, "Set time %d out of range. " 139 dev_dbg(info->dev, "Set time %d out of range. "
140 "Please set time between 1970 to 2038.\n", 140 "Please set time between 1970 to 2106.\n",
141 1900 + tm->tm_year); 141 1900 + tm->tm_year);
142 return -EINVAL; 142 return -EINVAL;
143 } 143 }
diff --git a/drivers/rtc/rtc-ab-b5ze-s3.c b/drivers/rtc/rtc-ab-b5ze-s3.c
index ef5c16dfabfa..8dc451932446 100644
--- a/drivers/rtc/rtc-ab-b5ze-s3.c
+++ b/drivers/rtc/rtc-ab-b5ze-s3.c
@@ -217,7 +217,7 @@ static int _abb5zes3_rtc_read_time(struct device *dev, struct rtc_time *tm)
217{ 217{
218 struct abb5zes3_rtc_data *data = dev_get_drvdata(dev); 218 struct abb5zes3_rtc_data *data = dev_get_drvdata(dev);
219 u8 regs[ABB5ZES3_REG_RTC_SC + ABB5ZES3_RTC_SEC_LEN]; 219 u8 regs[ABB5ZES3_REG_RTC_SC + ABB5ZES3_RTC_SEC_LEN];
220 int ret; 220 int ret = 0;
221 221
222 /* 222 /*
223 * As we need to read CTRL1 register anyway to access 24/12h 223 * As we need to read CTRL1 register anyway to access 24/12h
@@ -255,8 +255,6 @@ static int _abb5zes3_rtc_read_time(struct device *dev, struct rtc_time *tm)
255 tm->tm_mon = bcd2bin(regs[ABB5ZES3_REG_RTC_MO]) - 1; /* starts at 1 */ 255 tm->tm_mon = bcd2bin(regs[ABB5ZES3_REG_RTC_MO]) - 1; /* starts at 1 */
256 tm->tm_year = bcd2bin(regs[ABB5ZES3_REG_RTC_YR]) + 100; 256 tm->tm_year = bcd2bin(regs[ABB5ZES3_REG_RTC_YR]) + 100;
257 257
258 ret = rtc_valid_tm(tm);
259
260err: 258err:
261 return ret; 259 return ret;
262} 260}
diff --git a/drivers/rtc/rtc-ab3100.c b/drivers/rtc/rtc-ab3100.c
index 9b725c553058..821ff52a2222 100644
--- a/drivers/rtc/rtc-ab3100.c
+++ b/drivers/rtc/rtc-ab3100.c
@@ -106,7 +106,7 @@ static int ab3100_rtc_read_time(struct device *dev, struct rtc_time *tm)
106 106
107 rtc_time64_to_tm(time, tm); 107 rtc_time64_to_tm(time, tm);
108 108
109 return rtc_valid_tm(tm); 109 return 0;
110} 110}
111 111
112static int ab3100_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) 112static int ab3100_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm)
diff --git a/drivers/rtc/rtc-ab8500.c b/drivers/rtc/rtc-ab8500.c
index 24a0af650a1b..e28f4401fd35 100644
--- a/drivers/rtc/rtc-ab8500.c
+++ b/drivers/rtc/rtc-ab8500.c
@@ -36,10 +36,6 @@
36#define AB8500_RTC_FORCE_BKUP_REG 0x0D 36#define AB8500_RTC_FORCE_BKUP_REG 0x0D
37#define AB8500_RTC_CALIB_REG 0x0E 37#define AB8500_RTC_CALIB_REG 0x0E
38#define AB8500_RTC_SWITCH_STAT_REG 0x0F 38#define AB8500_RTC_SWITCH_STAT_REG 0x0F
39#define AB8540_RTC_ALRM_SEC 0x22
40#define AB8540_RTC_ALRM_MIN_LOW_REG 0x23
41#define AB8540_RTC_ALRM_MIN_MID_REG 0x24
42#define AB8540_RTC_ALRM_MIN_HI_REG 0x25
43 39
44/* RtcReadRequest bits */ 40/* RtcReadRequest bits */
45#define RTC_READ_REQUEST 0x01 41#define RTC_READ_REQUEST 0x01
@@ -63,11 +59,6 @@ static const u8 ab8500_rtc_alarm_regs[] = {
63 AB8500_RTC_ALRM_MIN_LOW_REG 59 AB8500_RTC_ALRM_MIN_LOW_REG
64}; 60};
65 61
66static const u8 ab8540_rtc_alarm_regs[] = {
67 AB8540_RTC_ALRM_MIN_HI_REG, AB8540_RTC_ALRM_MIN_MID_REG,
68 AB8540_RTC_ALRM_MIN_LOW_REG, AB8540_RTC_ALRM_SEC
69};
70
71/* Calculate the seconds from 1970 to 01-01-2000 00:00:00 */ 62/* Calculate the seconds from 1970 to 01-01-2000 00:00:00 */
72static unsigned long get_elapsed_seconds(int year) 63static unsigned long get_elapsed_seconds(int year)
73{ 64{
@@ -131,7 +122,7 @@ static int ab8500_rtc_read_time(struct device *dev, struct rtc_time *tm)
131 secs += get_elapsed_seconds(AB8500_RTC_EPOCH); 122 secs += get_elapsed_seconds(AB8500_RTC_EPOCH);
132 123
133 rtc_time_to_tm(secs, tm); 124 rtc_time_to_tm(secs, tm);
134 return rtc_valid_tm(tm); 125 return 0;
135} 126}
136 127
137static int ab8500_rtc_set_time(struct device *dev, struct rtc_time *tm) 128static int ab8500_rtc_set_time(struct device *dev, struct rtc_time *tm)
@@ -277,43 +268,6 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
277 return ab8500_rtc_irq_enable(dev, alarm->enabled); 268 return ab8500_rtc_irq_enable(dev, alarm->enabled);
278} 269}
279 270
280static int ab8540_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
281{
282 int retval, i;
283 unsigned char buf[ARRAY_SIZE(ab8540_rtc_alarm_regs)];
284 unsigned long mins, secs = 0;
285
286 if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) {
287 dev_dbg(dev, "year should be equal to or greater than %d\n",
288 AB8500_RTC_EPOCH);
289 return -EINVAL;
290 }
291
292 /* Get the number of seconds since 1970 */
293 rtc_tm_to_time(&alarm->time, &secs);
294
295 /*
296 * Convert it to the number of seconds since 01-01-2000 00:00:00
297 */
298 secs -= get_elapsed_seconds(AB8500_RTC_EPOCH);
299 mins = secs / 60;
300
301 buf[3] = secs % 60;
302 buf[2] = mins & 0xFF;
303 buf[1] = (mins >> 8) & 0xFF;
304 buf[0] = (mins >> 16) & 0xFF;
305
306 /* Set the alarm time */
307 for (i = 0; i < ARRAY_SIZE(ab8540_rtc_alarm_regs); i++) {
308 retval = abx500_set_register_interruptible(dev, AB8500_RTC,
309 ab8540_rtc_alarm_regs[i], buf[i]);
310 if (retval < 0)
311 return retval;
312 }
313
314 return ab8500_rtc_irq_enable(dev, alarm->enabled);
315}
316
317static int ab8500_rtc_set_calibration(struct device *dev, int calibration) 271static int ab8500_rtc_set_calibration(struct device *dev, int calibration)
318{ 272{
319 int retval; 273 int retval;
@@ -435,17 +389,8 @@ static const struct rtc_class_ops ab8500_rtc_ops = {
435 .alarm_irq_enable = ab8500_rtc_irq_enable, 389 .alarm_irq_enable = ab8500_rtc_irq_enable,
436}; 390};
437 391
438static const struct rtc_class_ops ab8540_rtc_ops = {
439 .read_time = ab8500_rtc_read_time,
440 .set_time = ab8500_rtc_set_time,
441 .read_alarm = ab8500_rtc_read_alarm,
442 .set_alarm = ab8540_rtc_set_alarm,
443 .alarm_irq_enable = ab8500_rtc_irq_enable,
444};
445
446static const struct platform_device_id ab85xx_rtc_ids[] = { 392static const struct platform_device_id ab85xx_rtc_ids[] = {
447 { "ab8500-rtc", (kernel_ulong_t)&ab8500_rtc_ops, }, 393 { "ab8500-rtc", (kernel_ulong_t)&ab8500_rtc_ops, },
448 { "ab8540-rtc", (kernel_ulong_t)&ab8540_rtc_ops, },
449 { /* sentinel */ } 394 { /* sentinel */ }
450}; 395};
451MODULE_DEVICE_TABLE(platform, ab85xx_rtc_ids); 396MODULE_DEVICE_TABLE(platform, ab85xx_rtc_ids);
diff --git a/drivers/rtc/rtc-abx80x.c b/drivers/rtc/rtc-abx80x.c
index b033bc556f5d..2cefa67a1132 100644
--- a/drivers/rtc/rtc-abx80x.c
+++ b/drivers/rtc/rtc-abx80x.c
@@ -172,11 +172,7 @@ static int abx80x_rtc_read_time(struct device *dev, struct rtc_time *tm)
172 tm->tm_mon = bcd2bin(buf[ABX8XX_REG_MO] & 0x1F) - 1; 172 tm->tm_mon = bcd2bin(buf[ABX8XX_REG_MO] & 0x1F) - 1;
173 tm->tm_year = bcd2bin(buf[ABX8XX_REG_YR]) + 100; 173 tm->tm_year = bcd2bin(buf[ABX8XX_REG_YR]) + 100;
174 174
175 err = rtc_valid_tm(tm); 175 return 0;
176 if (err < 0)
177 dev_err(&client->dev, "retrieved date/time is not valid.\n");
178
179 return err;
180} 176}
181 177
182static int abx80x_rtc_set_time(struct device *dev, struct rtc_time *tm) 178static int abx80x_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-ac100.c b/drivers/rtc/rtc-ac100.c
index 8ff9dc3fe5bf..3fe576fdd45e 100644
--- a/drivers/rtc/rtc-ac100.c
+++ b/drivers/rtc/rtc-ac100.c
@@ -183,7 +183,29 @@ static int ac100_clkout_determine_rate(struct clk_hw *hw,
183 183
184 for (i = 0; i < num_parents; i++) { 184 for (i = 0; i < num_parents; i++) {
185 struct clk_hw *parent = clk_hw_get_parent_by_index(hw, i); 185 struct clk_hw *parent = clk_hw_get_parent_by_index(hw, i);
186 unsigned long tmp, prate = clk_hw_get_rate(parent); 186 unsigned long tmp, prate;
187
188 /*
189 * The clock has two parents, one is a fixed clock which is
190 * internally registered by the ac100 driver. The other parent
191 * is a clock from the codec side of the chip, which we
192 * properly declare and reference in the devicetree and is
193 * not implemented in any driver right now.
194 * If the clock core looks for the parent of that second
195 * missing clock, it can't find one that is registered and
196 * returns NULL.
197 * So we end up in a situation where clk_hw_get_num_parents
198 * returns the amount of clocks we can be parented to, but
199 * clk_hw_get_parent_by_index will not return the orphan
200 * clocks.
201 * Thus we need to check if the parent exists before
202 * we get the parent rate, so we could use the RTC
203 * without waiting for the codec to be supported.
204 */
205 if (!parent)
206 continue;
207
208 prate = clk_hw_get_rate(parent);
187 209
188 tmp = ac100_clkout_round_rate(hw, req->rate, prate); 210 tmp = ac100_clkout_round_rate(hw, req->rate, prate);
189 211
@@ -387,7 +409,7 @@ static int ac100_rtc_get_time(struct device *dev, struct rtc_time *rtc_tm)
387 rtc_tm->tm_year = bcd2bin(reg[6] & AC100_RTC_YEA_MASK) + 409 rtc_tm->tm_year = bcd2bin(reg[6] & AC100_RTC_YEA_MASK) +
388 AC100_YEAR_OFF; 410 AC100_YEAR_OFF;
389 411
390 return rtc_valid_tm(rtc_tm); 412 return 0;
391} 413}
392 414
393static int ac100_rtc_set_time(struct device *dev, struct rtc_time *rtc_tm) 415static int ac100_rtc_set_time(struct device *dev, struct rtc_time *rtc_tm)
diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index 7418a763ce52..ee71e647fd43 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -349,6 +349,7 @@ static const struct rtc_class_ops at91_rtc_ops = {
349}; 349};
350 350
351static const struct regmap_config gpbr_regmap_config = { 351static const struct regmap_config gpbr_regmap_config = {
352 .name = "gpbr",
352 .reg_bits = 32, 353 .reg_bits = 32,
353 .val_bits = 32, 354 .val_bits = 32,
354 .reg_stride = 4, 355 .reg_stride = 4,
diff --git a/drivers/rtc/rtc-au1xxx.c b/drivers/rtc/rtc-au1xxx.c
index 2ba44ccb9c3a..7c5530c71285 100644
--- a/drivers/rtc/rtc-au1xxx.c
+++ b/drivers/rtc/rtc-au1xxx.c
@@ -36,7 +36,7 @@ static int au1xtoy_rtc_read_time(struct device *dev, struct rtc_time *tm)
36 36
37 rtc_time_to_tm(t, tm); 37 rtc_time_to_tm(t, tm);
38 38
39 return rtc_valid_tm(tm); 39 return 0;
40} 40}
41 41
42static int au1xtoy_rtc_set_time(struct device *dev, struct rtc_time *tm) 42static int au1xtoy_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-bq32k.c b/drivers/rtc/rtc-bq32k.c
index 98ac8d5c7901..ef52741000a8 100644
--- a/drivers/rtc/rtc-bq32k.c
+++ b/drivers/rtc/rtc-bq32k.c
@@ -36,6 +36,10 @@
36#define BQ32K_CFG2 0x09 /* Trickle charger control */ 36#define BQ32K_CFG2 0x09 /* Trickle charger control */
37#define BQ32K_TCFE BIT(6) /* Trickle charge FET bypass */ 37#define BQ32K_TCFE BIT(6) /* Trickle charge FET bypass */
38 38
39#define MAX_LEN 10 /* Maximum number of consecutive
40 * register for this particular RTC.
41 */
42
39struct bq32k_regs { 43struct bq32k_regs {
40 uint8_t seconds; 44 uint8_t seconds;
41 uint8_t minutes; 45 uint8_t minutes;
@@ -74,7 +78,7 @@ static int bq32k_read(struct device *dev, void *data, uint8_t off, uint8_t len)
74static int bq32k_write(struct device *dev, void *data, uint8_t off, uint8_t len) 78static int bq32k_write(struct device *dev, void *data, uint8_t off, uint8_t len)
75{ 79{
76 struct i2c_client *client = to_i2c_client(dev); 80 struct i2c_client *client = to_i2c_client(dev);
77 uint8_t buffer[len + 1]; 81 uint8_t buffer[MAX_LEN + 1];
78 82
79 buffer[0] = off; 83 buffer[0] = off;
80 memcpy(&buffer[1], data, len); 84 memcpy(&buffer[1], data, len);
@@ -110,7 +114,7 @@ static int bq32k_rtc_read_time(struct device *dev, struct rtc_time *tm)
110 tm->tm_year = bcd2bin(regs.years) + 114 tm->tm_year = bcd2bin(regs.years) +
111 ((regs.cent_hours & BQ32K_CENT) ? 100 : 0); 115 ((regs.cent_hours & BQ32K_CENT) ? 100 : 0);
112 116
113 return rtc_valid_tm(tm); 117 return 0;
114} 118}
115 119
116static int bq32k_rtc_set_time(struct device *dev, struct rtc_time *tm) 120static int bq32k_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-brcmstb-waketimer.c b/drivers/rtc/rtc-brcmstb-waketimer.c
index 6cee61201c30..bdd6674a1054 100644
--- a/drivers/rtc/rtc-brcmstb-waketimer.c
+++ b/drivers/rtc/rtc-brcmstb-waketimer.c
@@ -60,6 +60,9 @@ static void brcmstb_waketmr_set_alarm(struct brcmstb_waketmr *timer,
60{ 60{
61 brcmstb_waketmr_clear_alarm(timer); 61 brcmstb_waketmr_clear_alarm(timer);
62 62
63 /* Make sure we are actually counting in seconds */
64 writel_relaxed(timer->rate, timer->base + BRCMSTB_WKTMR_PRESCALER);
65
63 writel_relaxed(secs + 1, timer->base + BRCMSTB_WKTMR_ALARM); 66 writel_relaxed(secs + 1, timer->base + BRCMSTB_WKTMR_ALARM);
64} 67}
65 68
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
index f7c0f72abb56..1b3738a11702 100644
--- a/drivers/rtc/rtc-cmos.c
+++ b/drivers/rtc/rtc-cmos.c
@@ -541,11 +541,10 @@ static const struct rtc_class_ops cmos_rtc_ops = {
541 541
542#define NVRAM_OFFSET (RTC_REG_D + 1) 542#define NVRAM_OFFSET (RTC_REG_D + 1)
543 543
544static ssize_t 544static int cmos_nvram_read(void *priv, unsigned int off, void *val,
545cmos_nvram_read(struct file *filp, struct kobject *kobj, 545 size_t count)
546 struct bin_attribute *attr,
547 char *buf, loff_t off, size_t count)
548{ 546{
547 unsigned char *buf = val;
549 int retval; 548 int retval;
550 549
551 off += NVRAM_OFFSET; 550 off += NVRAM_OFFSET;
@@ -563,16 +562,13 @@ cmos_nvram_read(struct file *filp, struct kobject *kobj,
563 return retval; 562 return retval;
564} 563}
565 564
566static ssize_t 565static int cmos_nvram_write(void *priv, unsigned int off, void *val,
567cmos_nvram_write(struct file *filp, struct kobject *kobj, 566 size_t count)
568 struct bin_attribute *attr,
569 char *buf, loff_t off, size_t count)
570{ 567{
571 struct cmos_rtc *cmos; 568 struct cmos_rtc *cmos = priv;
569 unsigned char *buf = val;
572 int retval; 570 int retval;
573 571
574 cmos = dev_get_drvdata(container_of(kobj, struct device, kobj));
575
576 /* NOTE: on at least PCs and Ataris, the boot firmware uses a 572 /* NOTE: on at least PCs and Ataris, the boot firmware uses a
577 * checksum on part of the NVRAM data. That's currently ignored 573 * checksum on part of the NVRAM data. That's currently ignored
578 * here. If userspace is smart enough to know what fields of 574 * here. If userspace is smart enough to know what fields of
@@ -598,17 +594,6 @@ cmos_nvram_write(struct file *filp, struct kobject *kobj,
598 return retval; 594 return retval;
599} 595}
600 596
601static struct bin_attribute nvram = {
602 .attr = {
603 .name = "nvram",
604 .mode = S_IRUGO | S_IWUSR,
605 },
606
607 .read = cmos_nvram_read,
608 .write = cmos_nvram_write,
609 /* size gets set up later */
610};
611
612/*----------------------------------------------------------------*/ 597/*----------------------------------------------------------------*/
613 598
614static struct cmos_rtc cmos_rtc; 599static struct cmos_rtc cmos_rtc;
@@ -675,6 +660,14 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
675 unsigned char rtc_control; 660 unsigned char rtc_control;
676 unsigned address_space; 661 unsigned address_space;
677 u32 flags = 0; 662 u32 flags = 0;
663 struct nvmem_config nvmem_cfg = {
664 .name = "cmos_nvram",
665 .word_size = 1,
666 .stride = 1,
667 .reg_read = cmos_nvram_read,
668 .reg_write = cmos_nvram_write,
669 .priv = &cmos_rtc,
670 };
678 671
679 /* there can be only one ... */ 672 /* there can be only one ... */
680 if (cmos_rtc.dev) 673 if (cmos_rtc.dev)
@@ -751,8 +744,7 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
751 cmos_rtc.dev = dev; 744 cmos_rtc.dev = dev;
752 dev_set_drvdata(dev, &cmos_rtc); 745 dev_set_drvdata(dev, &cmos_rtc);
753 746
754 cmos_rtc.rtc = rtc_device_register(driver_name, dev, 747 cmos_rtc.rtc = devm_rtc_allocate_device(dev);
755 &cmos_rtc_ops, THIS_MODULE);
756 if (IS_ERR(cmos_rtc.rtc)) { 748 if (IS_ERR(cmos_rtc.rtc)) {
757 retval = PTR_ERR(cmos_rtc.rtc); 749 retval = PTR_ERR(cmos_rtc.rtc);
758 goto cleanup0; 750 goto cleanup0;
@@ -814,22 +806,25 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq)
814 } 806 }
815 } 807 }
816 808
817 /* export at least the first block of NVRAM */ 809 cmos_rtc.rtc->ops = &cmos_rtc_ops;
818 nvram.size = address_space - NVRAM_OFFSET; 810 cmos_rtc.rtc->nvram_old_abi = true;
819 retval = sysfs_create_bin_file(&dev->kobj, &nvram); 811 retval = rtc_register_device(cmos_rtc.rtc);
820 if (retval < 0) { 812 if (retval)
821 dev_dbg(dev, "can't create nvram file? %d\n", retval);
822 goto cleanup2; 813 goto cleanup2;
823 }
824 814
825 dev_info(dev, "%s%s, %zd bytes nvram%s\n", 815 /* export at least the first block of NVRAM */
826 !is_valid_irq(rtc_irq) ? "no alarms" : 816 nvmem_cfg.size = address_space - NVRAM_OFFSET;
827 cmos_rtc.mon_alrm ? "alarms up to one year" : 817 if (rtc_nvmem_register(cmos_rtc.rtc, &nvmem_cfg))
828 cmos_rtc.day_alrm ? "alarms up to one month" : 818 dev_err(dev, "nvmem registration failed\n");
829 "alarms up to one day", 819
830 cmos_rtc.century ? ", y3k" : "", 820 dev_info(dev, "%s%s, %d bytes nvram%s\n",
831 nvram.size, 821 !is_valid_irq(rtc_irq) ? "no alarms" :
832 is_hpet_enabled() ? ", hpet irqs" : ""); 822 cmos_rtc.mon_alrm ? "alarms up to one year" :
823 cmos_rtc.day_alrm ? "alarms up to one month" :
824 "alarms up to one day",
825 cmos_rtc.century ? ", y3k" : "",
826 nvmem_cfg.size,
827 is_hpet_enabled() ? ", hpet irqs" : "");
833 828
834 return 0; 829 return 0;
835 830
@@ -838,7 +833,6 @@ cleanup2:
838 free_irq(rtc_irq, cmos_rtc.rtc); 833 free_irq(rtc_irq, cmos_rtc.rtc);
839cleanup1: 834cleanup1:
840 cmos_rtc.dev = NULL; 835 cmos_rtc.dev = NULL;
841 rtc_device_unregister(cmos_rtc.rtc);
842cleanup0: 836cleanup0:
843 if (RTC_IOMAPPED) 837 if (RTC_IOMAPPED)
844 release_region(ports->start, resource_size(ports)); 838 release_region(ports->start, resource_size(ports));
@@ -862,14 +856,11 @@ static void cmos_do_remove(struct device *dev)
862 856
863 cmos_do_shutdown(cmos->irq); 857 cmos_do_shutdown(cmos->irq);
864 858
865 sysfs_remove_bin_file(&dev->kobj, &nvram);
866
867 if (is_valid_irq(cmos->irq)) { 859 if (is_valid_irq(cmos->irq)) {
868 free_irq(cmos->irq, cmos->rtc); 860 free_irq(cmos->irq, cmos->rtc);
869 hpet_unregister_irq_handler(cmos_interrupt); 861 hpet_unregister_irq_handler(cmos_interrupt);
870 } 862 }
871 863
872 rtc_device_unregister(cmos->rtc);
873 cmos->rtc = NULL; 864 cmos->rtc = NULL;
874 865
875 ports = cmos->iomem; 866 ports = cmos->iomem;
@@ -1271,8 +1262,6 @@ MODULE_DEVICE_TABLE(of, of_cmos_match);
1271static __init void cmos_of_init(struct platform_device *pdev) 1262static __init void cmos_of_init(struct platform_device *pdev)
1272{ 1263{
1273 struct device_node *node = pdev->dev.of_node; 1264 struct device_node *node = pdev->dev.of_node;
1274 struct rtc_time time;
1275 int ret;
1276 const __be32 *val; 1265 const __be32 *val;
1277 1266
1278 if (!node) 1267 if (!node)
@@ -1285,16 +1274,6 @@ static __init void cmos_of_init(struct platform_device *pdev)
1285 val = of_get_property(node, "freq-reg", NULL); 1274 val = of_get_property(node, "freq-reg", NULL);
1286 if (val) 1275 if (val)
1287 CMOS_WRITE(be32_to_cpup(val), RTC_FREQ_SELECT); 1276 CMOS_WRITE(be32_to_cpup(val), RTC_FREQ_SELECT);
1288
1289 cmos_read_time(&pdev->dev, &time);
1290 ret = rtc_valid_tm(&time);
1291 if (ret) {
1292 struct rtc_time def_time = {
1293 .tm_year = 1,
1294 .tm_mday = 1,
1295 };
1296 cmos_set_time(&pdev->dev, &def_time);
1297 }
1298} 1277}
1299#else 1278#else
1300static inline void cmos_of_init(struct platform_device *pdev) {} 1279static inline void cmos_of_init(struct platform_device *pdev) {}
diff --git a/drivers/rtc/rtc-coh901331.c b/drivers/rtc/rtc-coh901331.c
index cfc4141d99cd..2fc517498a5d 100644
--- a/drivers/rtc/rtc-coh901331.c
+++ b/drivers/rtc/rtc-coh901331.c
@@ -82,7 +82,7 @@ static int coh901331_read_time(struct device *dev, struct rtc_time *tm)
82 if (readl(rtap->virtbase + COH901331_VALID)) { 82 if (readl(rtap->virtbase + COH901331_VALID)) {
83 rtc_time_to_tm(readl(rtap->virtbase + COH901331_CUR_TIME), tm); 83 rtc_time_to_tm(readl(rtap->virtbase + COH901331_CUR_TIME), tm);
84 clk_disable(rtap->clk); 84 clk_disable(rtap->clk);
85 return rtc_valid_tm(tm); 85 return 0;
86 } 86 }
87 clk_disable(rtap->clk); 87 clk_disable(rtap->clk);
88 return -EINVAL; 88 return -EINVAL;
diff --git a/drivers/rtc/rtc-core.h b/drivers/rtc/rtc-core.h
index 513b9bedd2c8..0abf98983e13 100644
--- a/drivers/rtc/rtc-core.h
+++ b/drivers/rtc/rtc-core.h
@@ -46,11 +46,3 @@ static inline const struct attribute_group **rtc_get_dev_attribute_groups(void)
46 return NULL; 46 return NULL;
47} 47}
48#endif 48#endif
49
50#ifdef CONFIG_RTC_NVMEM
51void rtc_nvmem_register(struct rtc_device *rtc);
52void rtc_nvmem_unregister(struct rtc_device *rtc);
53#else
54static inline void rtc_nvmem_register(struct rtc_device *rtc) {}
55static inline void rtc_nvmem_unregister(struct rtc_device *rtc) {}
56#endif
diff --git a/drivers/rtc/rtc-cpcap.c b/drivers/rtc/rtc-cpcap.c
index 3a0333e1f21a..a8856f2b9bc2 100644
--- a/drivers/rtc/rtc-cpcap.c
+++ b/drivers/rtc/rtc-cpcap.c
@@ -119,7 +119,7 @@ static int cpcap_rtc_read_time(struct device *dev, struct rtc_time *tm)
119 119
120 cpcap2rtc_time(tm, &cpcap_tm); 120 cpcap2rtc_time(tm, &cpcap_tm);
121 121
122 return rtc_valid_tm(tm); 122 return 0;
123} 123}
124 124
125static int cpcap_rtc_set_time(struct device *dev, struct rtc_time *tm) 125static int cpcap_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-cros-ec.c b/drivers/rtc/rtc-cros-ec.c
index f0ea6899c731..bf7ced095c94 100644
--- a/drivers/rtc/rtc-cros-ec.c
+++ b/drivers/rtc/rtc-cros-ec.c
@@ -197,10 +197,10 @@ static int cros_ec_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
197 cros_ec_rtc->saved_alarm = (u32)alarm_time; 197 cros_ec_rtc->saved_alarm = (u32)alarm_time;
198 } else { 198 } else {
199 /* Don't set an alarm in the past. */ 199 /* Don't set an alarm in the past. */
200 if ((u32)alarm_time < current_time) 200 if ((u32)alarm_time <= current_time)
201 alarm_offset = EC_RTC_ALARM_CLEAR; 201 return -ETIME;
202 else 202
203 alarm_offset = (u32)alarm_time - current_time; 203 alarm_offset = (u32)alarm_time - current_time;
204 } 204 }
205 205
206 ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM, alarm_offset); 206 ret = cros_ec_rtc_set(cros_ec, EC_CMD_RTC_SET_ALARM, alarm_offset);
diff --git a/drivers/rtc/rtc-da9052.c b/drivers/rtc/rtc-da9052.c
index 4273377562ec..03044e1bc497 100644
--- a/drivers/rtc/rtc-da9052.c
+++ b/drivers/rtc/rtc-da9052.c
@@ -187,8 +187,7 @@ static int da9052_rtc_read_time(struct device *dev, struct rtc_time *rtc_tm)
187 rtc_tm->tm_min = v[0][1] & DA9052_RTC_MIN; 187 rtc_tm->tm_min = v[0][1] & DA9052_RTC_MIN;
188 rtc_tm->tm_sec = v[0][0] & DA9052_RTC_SEC; 188 rtc_tm->tm_sec = v[0][0] & DA9052_RTC_SEC;
189 189
190 ret = rtc_valid_tm(rtc_tm); 190 return 0;
191 return ret;
192 } 191 }
193 192
194 idx = (1-idx); 193 idx = (1-idx);
diff --git a/drivers/rtc/rtc-da9055.c b/drivers/rtc/rtc-da9055.c
index 678af8648c45..e08cd8130c23 100644
--- a/drivers/rtc/rtc-da9055.c
+++ b/drivers/rtc/rtc-da9055.c
@@ -158,7 +158,7 @@ static int da9055_rtc_read_time(struct device *dev, struct rtc_time *rtc_tm)
158 rtc_tm->tm_min = v[1] & DA9055_RTC_MIN; 158 rtc_tm->tm_min = v[1] & DA9055_RTC_MIN;
159 rtc_tm->tm_sec = v[0] & DA9055_RTC_SEC; 159 rtc_tm->tm_sec = v[0] & DA9055_RTC_SEC;
160 160
161 return rtc_valid_tm(rtc_tm); 161 return 0;
162} 162}
163 163
164static int da9055_rtc_set_time(struct device *dev, struct rtc_time *tm) 164static int da9055_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
index f85cae240f12..b4e054c64bad 100644
--- a/drivers/rtc/rtc-da9063.c
+++ b/drivers/rtc/rtc-da9063.c
@@ -256,7 +256,7 @@ static int da9063_rtc_read_time(struct device *dev, struct rtc_time *tm)
256 else 256 else
257 rtc->rtc_sync = false; 257 rtc->rtc_sync = false;
258 258
259 return rtc_valid_tm(tm); 259 return 0;
260} 260}
261 261
262static int da9063_rtc_set_time(struct device *dev, struct rtc_time *tm) 262static int da9063_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-ds1216.c b/drivers/rtc/rtc-ds1216.c
index 9c82b1da2d45..5f158715fb4c 100644
--- a/drivers/rtc/rtc-ds1216.c
+++ b/drivers/rtc/rtc-ds1216.c
@@ -99,7 +99,7 @@ static int ds1216_rtc_read_time(struct device *dev, struct rtc_time *tm)
99 if (tm->tm_year < 70) 99 if (tm->tm_year < 70)
100 tm->tm_year += 100; 100 tm->tm_year += 100;
101 101
102 return rtc_valid_tm(tm); 102 return 0;
103} 103}
104 104
105static int ds1216_rtc_set_time(struct device *dev, struct rtc_time *tm) 105static int ds1216_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-ds1286.c b/drivers/rtc/rtc-ds1286.c
index ef75c349dff9..0744916b79c5 100644
--- a/drivers/rtc/rtc-ds1286.c
+++ b/drivers/rtc/rtc-ds1286.c
@@ -211,7 +211,7 @@ static int ds1286_read_time(struct device *dev, struct rtc_time *tm)
211 211
212 tm->tm_mon--; 212 tm->tm_mon--;
213 213
214 return rtc_valid_tm(tm); 214 return 0;
215} 215}
216 216
217static int ds1286_set_time(struct device *dev, struct rtc_time *tm) 217static int ds1286_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-ds1302.c b/drivers/rtc/rtc-ds1302.c
index 0ec4be62322b..2a881150d51c 100644
--- a/drivers/rtc/rtc-ds1302.c
+++ b/drivers/rtc/rtc-ds1302.c
@@ -43,7 +43,7 @@ static int ds1302_rtc_set_time(struct device *dev, struct rtc_time *time)
43{ 43{
44 struct spi_device *spi = dev_get_drvdata(dev); 44 struct spi_device *spi = dev_get_drvdata(dev);
45 u8 buf[1 + RTC_CLCK_LEN]; 45 u8 buf[1 + RTC_CLCK_LEN];
46 u8 *bp = buf; 46 u8 *bp;
47 int status; 47 int status;
48 48
49 /* Enable writing */ 49 /* Enable writing */
@@ -98,8 +98,7 @@ static int ds1302_rtc_get_time(struct device *dev, struct rtc_time *time)
98 time->tm_mon = bcd2bin(buf[RTC_ADDR_MON]) - 1; 98 time->tm_mon = bcd2bin(buf[RTC_ADDR_MON]) - 1;
99 time->tm_year = bcd2bin(buf[RTC_ADDR_YEAR]) + 100; 99 time->tm_year = bcd2bin(buf[RTC_ADDR_YEAR]) + 100;
100 100
101 /* Time may not be set */ 101 return 0;
102 return rtc_valid_tm(time);
103} 102}
104 103
105static const struct rtc_class_ops ds1302_rtc_ops = { 104static const struct rtc_class_ops ds1302_rtc_ops = {
@@ -112,7 +111,7 @@ static int ds1302_probe(struct spi_device *spi)
112 struct rtc_device *rtc; 111 struct rtc_device *rtc;
113 u8 addr; 112 u8 addr;
114 u8 buf[4]; 113 u8 buf[4];
115 u8 *bp = buf; 114 u8 *bp;
116 int status; 115 int status;
117 116
118 /* Sanity check board setup data. This may be hooked up 117 /* Sanity check board setup data. This may be hooked up
diff --git a/drivers/rtc/rtc-ds1305.c b/drivers/rtc/rtc-ds1305.c
index d8df2e9e14ad..2d502fc85698 100644
--- a/drivers/rtc/rtc-ds1305.c
+++ b/drivers/rtc/rtc-ds1305.c
@@ -203,8 +203,7 @@ static int ds1305_get_time(struct device *dev, struct rtc_time *time)
203 time->tm_hour, time->tm_mday, 203 time->tm_hour, time->tm_mday,
204 time->tm_mon, time->tm_year, time->tm_wday); 204 time->tm_mon, time->tm_year, time->tm_wday);
205 205
206 /* Time may not be set */ 206 return 0;
207 return rtc_valid_tm(time);
208} 207}
209 208
210static int ds1305_set_time(struct device *dev, struct rtc_time *time) 209static int ds1305_set_time(struct device *dev, struct rtc_time *time)
@@ -544,15 +543,6 @@ static int ds1305_nvram_write(void *priv, unsigned int off, void *buf,
544 return spi_sync(spi, &m); 543 return spi_sync(spi, &m);
545} 544}
546 545
547static struct nvmem_config ds1305_nvmem_cfg = {
548 .name = "ds1305_nvram",
549 .word_size = 1,
550 .stride = 1,
551 .size = DS1305_NVRAM_LEN,
552 .reg_read = ds1305_nvram_read,
553 .reg_write = ds1305_nvram_write,
554};
555
556/*----------------------------------------------------------------------*/ 546/*----------------------------------------------------------------------*/
557 547
558/* 548/*
@@ -566,6 +556,14 @@ static int ds1305_probe(struct spi_device *spi)
566 u8 addr, value; 556 u8 addr, value;
567 struct ds1305_platform_data *pdata = dev_get_platdata(&spi->dev); 557 struct ds1305_platform_data *pdata = dev_get_platdata(&spi->dev);
568 bool write_ctrl = false; 558 bool write_ctrl = false;
559 struct nvmem_config ds1305_nvmem_cfg = {
560 .name = "ds1305_nvram",
561 .word_size = 1,
562 .stride = 1,
563 .size = DS1305_NVRAM_LEN,
564 .reg_read = ds1305_nvram_read,
565 .reg_write = ds1305_nvram_write,
566 };
569 567
570 /* Sanity check board setup data. This may be hooked up 568 /* Sanity check board setup data. This may be hooked up
571 * in 3wire mode, but we don't care. Note that unless 569 * in 3wire mode, but we don't care. Note that unless
@@ -703,15 +701,15 @@ static int ds1305_probe(struct spi_device *spi)
703 ds1305->rtc->ops = &ds1305_ops; 701 ds1305->rtc->ops = &ds1305_ops;
704 702
705 ds1305_nvmem_cfg.priv = ds1305; 703 ds1305_nvmem_cfg.priv = ds1305;
706 ds1305->rtc->nvmem_config = &ds1305_nvmem_cfg;
707 ds1305->rtc->nvram_old_abi = true; 704 ds1305->rtc->nvram_old_abi = true;
708
709 status = rtc_register_device(ds1305->rtc); 705 status = rtc_register_device(ds1305->rtc);
710 if (status) { 706 if (status) {
711 dev_dbg(&spi->dev, "register rtc --> %d\n", status); 707 dev_dbg(&spi->dev, "register rtc --> %d\n", status);
712 return status; 708 return status;
713 } 709 }
714 710
711 rtc_nvmem_register(ds1305->rtc, &ds1305_nvmem_cfg);
712
715 /* Maybe set up alarm IRQ; be ready to handle it triggering right 713 /* Maybe set up alarm IRQ; be ready to handle it triggering right
716 * away. NOTE that we don't share this. The signal is active low, 714 * away. NOTE that we don't share this. The signal is active low,
717 * and we can't ack it before a SPI message delay. We temporarily 715 * and we can't ack it before a SPI message delay. We temporarily
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 923dde912f60..a13e59edff53 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -114,7 +114,6 @@ enum ds_type {
114# define RX8025_BIT_XST 0x20 114# define RX8025_BIT_XST 0x20
115 115
116struct ds1307 { 116struct ds1307 {
117 struct nvmem_config nvmem_cfg;
118 enum ds_type type; 117 enum ds_type type;
119 unsigned long flags; 118 unsigned long flags;
120#define HAS_NVRAM 0 /* bit 0 == sysfs file active */ 119#define HAS_NVRAM 0 /* bit 0 == sysfs file active */
@@ -438,8 +437,7 @@ static int ds1307_get_time(struct device *dev, struct rtc_time *t)
438 t->tm_hour, t->tm_mday, 437 t->tm_hour, t->tm_mday,
439 t->tm_mon, t->tm_year, t->tm_wday); 438 t->tm_mon, t->tm_year, t->tm_wday);
440 439
441 /* initial clock setting can be undefined */ 440 return 0;
442 return rtc_valid_tm(t);
443} 441}
444 442
445static int ds1307_set_time(struct device *dev, struct rtc_time *t) 443static int ds1307_set_time(struct device *dev, struct rtc_time *t)
@@ -1696,24 +1694,26 @@ read_rtc:
1696 } 1694 }
1697 } 1695 }
1698 1696
1699 if (chip->nvram_size) {
1700 ds1307->nvmem_cfg.name = "ds1307_nvram";
1701 ds1307->nvmem_cfg.word_size = 1;
1702 ds1307->nvmem_cfg.stride = 1;
1703 ds1307->nvmem_cfg.size = chip->nvram_size;
1704 ds1307->nvmem_cfg.reg_read = ds1307_nvram_read;
1705 ds1307->nvmem_cfg.reg_write = ds1307_nvram_write;
1706 ds1307->nvmem_cfg.priv = ds1307;
1707
1708 ds1307->rtc->nvmem_config = &ds1307->nvmem_cfg;
1709 ds1307->rtc->nvram_old_abi = true;
1710 }
1711
1712 ds1307->rtc->ops = chip->rtc_ops ?: &ds13xx_rtc_ops; 1697 ds1307->rtc->ops = chip->rtc_ops ?: &ds13xx_rtc_ops;
1713 err = rtc_register_device(ds1307->rtc); 1698 err = rtc_register_device(ds1307->rtc);
1714 if (err) 1699 if (err)
1715 return err; 1700 return err;
1716 1701
1702 if (chip->nvram_size) {
1703 struct nvmem_config nvmem_cfg = {
1704 .name = "ds1307_nvram",
1705 .word_size = 1,
1706 .stride = 1,
1707 .size = chip->nvram_size,
1708 .reg_read = ds1307_nvram_read,
1709 .reg_write = ds1307_nvram_write,
1710 .priv = ds1307,
1711 };
1712
1713 ds1307->rtc->nvram_old_abi = true;
1714 rtc_nvmem_register(ds1307->rtc, &nvmem_cfg);
1715 }
1716
1717 ds1307_hwmon_register(ds1307); 1717 ds1307_hwmon_register(ds1307);
1718 ds1307_clks_register(ds1307); 1718 ds1307_clks_register(ds1307);
1719 1719
diff --git a/drivers/rtc/rtc-ds1343.c b/drivers/rtc/rtc-ds1343.c
index 895fbeeb47fe..5208da4cf94a 100644
--- a/drivers/rtc/rtc-ds1343.c
+++ b/drivers/rtc/rtc-ds1343.c
@@ -153,120 +153,22 @@ static ssize_t ds1343_store_glitchfilter(struct device *dev,
153static DEVICE_ATTR(glitch_filter, S_IRUGO | S_IWUSR, ds1343_show_glitchfilter, 153static DEVICE_ATTR(glitch_filter, S_IRUGO | S_IWUSR, ds1343_show_glitchfilter,
154 ds1343_store_glitchfilter); 154 ds1343_store_glitchfilter);
155 155
156static ssize_t ds1343_nvram_write(struct file *filp, struct kobject *kobj, 156static int ds1343_nvram_write(void *priv, unsigned int off, void *val,
157 struct bin_attribute *attr, 157 size_t bytes)
158 char *buf, loff_t off, size_t count)
159{ 158{
160 int ret; 159 struct ds1343_priv *ds1343 = priv;
161 unsigned char address;
162 struct device *dev = kobj_to_dev(kobj);
163 struct ds1343_priv *priv = dev_get_drvdata(dev);
164
165 address = DS1343_NVRAM + off;
166
167 ret = regmap_bulk_write(priv->map, address, buf, count);
168 if (ret < 0)
169 dev_err(&priv->spi->dev, "Error in nvram write %d", ret);
170 160
171 return (ret < 0) ? ret : count; 161 return regmap_bulk_write(ds1343->map, DS1343_NVRAM + off, val, bytes);
172} 162}
173 163
174 164static int ds1343_nvram_read(void *priv, unsigned int off, void *val,
175static ssize_t ds1343_nvram_read(struct file *filp, struct kobject *kobj, 165 size_t bytes)
176 struct bin_attribute *attr,
177 char *buf, loff_t off, size_t count)
178{ 166{
179 int ret; 167 struct ds1343_priv *ds1343 = priv;
180 unsigned char address;
181 struct device *dev = kobj_to_dev(kobj);
182 struct ds1343_priv *priv = dev_get_drvdata(dev);
183 168
184 address = DS1343_NVRAM + off; 169 return regmap_bulk_read(ds1343->map, DS1343_NVRAM + off, val, bytes);
185
186 ret = regmap_bulk_read(priv->map, address, buf, count);
187 if (ret < 0)
188 dev_err(&priv->spi->dev, "Error in nvram read %d\n", ret);
189
190 return (ret < 0) ? ret : count;
191} 170}
192 171
193
194static struct bin_attribute nvram_attr = {
195 .attr.name = "nvram",
196 .attr.mode = S_IRUGO | S_IWUSR,
197 .read = ds1343_nvram_read,
198 .write = ds1343_nvram_write,
199 .size = DS1343_NVRAM_LEN,
200};
201
202static ssize_t ds1343_show_alarmstatus(struct device *dev,
203 struct device_attribute *attr, char *buf)
204{
205 struct ds1343_priv *priv = dev_get_drvdata(dev);
206 int alarmstatus, data;
207
208 regmap_read(priv->map, DS1343_CONTROL_REG, &data);
209
210 alarmstatus = !!(data & DS1343_A0IE);
211
212 if (alarmstatus)
213 return sprintf(buf, "enabled\n");
214 else
215 return sprintf(buf, "disabled\n");
216}
217
218static DEVICE_ATTR(alarm_status, S_IRUGO, ds1343_show_alarmstatus, NULL);
219
220static ssize_t ds1343_show_alarmmode(struct device *dev,
221 struct device_attribute *attr, char *buf)
222{
223 struct ds1343_priv *priv = dev_get_drvdata(dev);
224 int alarm_mode, data;
225 char *alarm_str;
226
227 regmap_read(priv->map, DS1343_ALM0_SEC_REG, &data);
228 alarm_mode = (data & 0x80) >> 4;
229
230 regmap_read(priv->map, DS1343_ALM0_MIN_REG, &data);
231 alarm_mode |= (data & 0x80) >> 5;
232
233 regmap_read(priv->map, DS1343_ALM0_HOUR_REG, &data);
234 alarm_mode |= (data & 0x80) >> 6;
235
236 regmap_read(priv->map, DS1343_ALM0_DAY_REG, &data);
237 alarm_mode |= (data & 0x80) >> 7;
238
239 switch (alarm_mode) {
240 case 15:
241 alarm_str = "each second";
242 break;
243
244 case 7:
245 alarm_str = "seconds match";
246 break;
247
248 case 3:
249 alarm_str = "minutes and seconds match";
250 break;
251
252 case 1:
253 alarm_str = "hours, minutes and seconds match";
254 break;
255
256 case 0:
257 alarm_str = "day, hours, minutes and seconds match";
258 break;
259
260 default:
261 alarm_str = "invalid";
262 break;
263 }
264
265 return sprintf(buf, "%s\n", alarm_str);
266}
267
268static DEVICE_ATTR(alarm_mode, S_IRUGO, ds1343_show_alarmmode, NULL);
269
270static ssize_t ds1343_show_tricklecharger(struct device *dev, 172static ssize_t ds1343_show_tricklecharger(struct device *dev,
271 struct device_attribute *attr, char *buf) 173 struct device_attribute *attr, char *buf)
272{ 174{
@@ -313,7 +215,6 @@ static DEVICE_ATTR(trickle_charger, S_IRUGO, ds1343_show_tricklecharger, NULL);
313 215
314static int ds1343_sysfs_register(struct device *dev) 216static int ds1343_sysfs_register(struct device *dev)
315{ 217{
316 struct ds1343_priv *priv = dev_get_drvdata(dev);
317 int err; 218 int err;
318 219
319 err = device_create_file(dev, &dev_attr_glitch_filter); 220 err = device_create_file(dev, &dev_attr_glitch_filter);
@@ -321,33 +222,9 @@ static int ds1343_sysfs_register(struct device *dev)
321 return err; 222 return err;
322 223
323 err = device_create_file(dev, &dev_attr_trickle_charger); 224 err = device_create_file(dev, &dev_attr_trickle_charger);
324 if (err)
325 goto error1;
326
327 err = device_create_bin_file(dev, &nvram_attr);
328 if (err)
329 goto error2;
330
331 if (priv->irq <= 0)
332 return err;
333
334 err = device_create_file(dev, &dev_attr_alarm_mode);
335 if (err)
336 goto error3;
337
338 err = device_create_file(dev, &dev_attr_alarm_status);
339 if (!err) 225 if (!err)
340 return err; 226 return 0;
341 227
342 device_remove_file(dev, &dev_attr_alarm_mode);
343
344error3:
345 device_remove_bin_file(dev, &nvram_attr);
346
347error2:
348 device_remove_file(dev, &dev_attr_trickle_charger);
349
350error1:
351 device_remove_file(dev, &dev_attr_glitch_filter); 228 device_remove_file(dev, &dev_attr_glitch_filter);
352 229
353 return err; 230 return err;
@@ -355,17 +232,8 @@ error1:
355 232
356static void ds1343_sysfs_unregister(struct device *dev) 233static void ds1343_sysfs_unregister(struct device *dev)
357{ 234{
358 struct ds1343_priv *priv = dev_get_drvdata(dev);
359
360 device_remove_file(dev, &dev_attr_glitch_filter); 235 device_remove_file(dev, &dev_attr_glitch_filter);
361 device_remove_file(dev, &dev_attr_trickle_charger); 236 device_remove_file(dev, &dev_attr_trickle_charger);
362 device_remove_bin_file(dev, &nvram_attr);
363
364 if (priv->irq <= 0)
365 return;
366
367 device_remove_file(dev, &dev_attr_alarm_status);
368 device_remove_file(dev, &dev_attr_alarm_mode);
369} 237}
370 238
371static int ds1343_read_time(struct device *dev, struct rtc_time *dt) 239static int ds1343_read_time(struct device *dev, struct rtc_time *dt)
@@ -386,7 +254,7 @@ static int ds1343_read_time(struct device *dev, struct rtc_time *dt)
386 dt->tm_mon = bcd2bin(buf[5] & 0x1F) - 1; 254 dt->tm_mon = bcd2bin(buf[5] & 0x1F) - 1;
387 dt->tm_year = bcd2bin(buf[6]) + 100; /* year offset from 1900 */ 255 dt->tm_year = bcd2bin(buf[6]) + 100; /* year offset from 1900 */
388 256
389 return rtc_valid_tm(dt); 257 return 0;
390} 258}
391 259
392static int ds1343_set_time(struct device *dev, struct rtc_time *dt) 260static int ds1343_set_time(struct device *dev, struct rtc_time *dt)
@@ -599,14 +467,18 @@ static const struct rtc_class_ops ds1343_rtc_ops = {
599static int ds1343_probe(struct spi_device *spi) 467static int ds1343_probe(struct spi_device *spi)
600{ 468{
601 struct ds1343_priv *priv; 469 struct ds1343_priv *priv;
602 struct regmap_config config; 470 struct regmap_config config = { .reg_bits = 8, .val_bits = 8,
471 .write_flag_mask = 0x80, };
603 unsigned int data; 472 unsigned int data;
604 int res; 473 int res;
605 474 struct nvmem_config nvmem_cfg = {
606 memset(&config, 0, sizeof(config)); 475 .name = "ds1343-",
607 config.reg_bits = 8; 476 .word_size = 1,
608 config.val_bits = 8; 477 .stride = 1,
609 config.write_flag_mask = 0x80; 478 .size = DS1343_NVRAM_LEN,
479 .reg_read = ds1343_nvram_read,
480 .reg_write = ds1343_nvram_write,
481 };
610 482
611 priv = devm_kzalloc(&spi->dev, sizeof(struct ds1343_priv), GFP_KERNEL); 483 priv = devm_kzalloc(&spi->dev, sizeof(struct ds1343_priv), GFP_KERNEL);
612 if (!priv) 484 if (!priv)
@@ -646,12 +518,19 @@ static int ds1343_probe(struct spi_device *spi)
646 data &= ~(DS1343_OSF | DS1343_IRQF1 | DS1343_IRQF0); 518 data &= ~(DS1343_OSF | DS1343_IRQF1 | DS1343_IRQF0);
647 regmap_write(priv->map, DS1343_STATUS_REG, data); 519 regmap_write(priv->map, DS1343_STATUS_REG, data);
648 520
649 priv->rtc = devm_rtc_device_register(&spi->dev, "ds1343", 521 priv->rtc = devm_rtc_allocate_device(&spi->dev);
650 &ds1343_rtc_ops, THIS_MODULE); 522 if (IS_ERR(priv->rtc))
651 if (IS_ERR(priv->rtc)) {
652 dev_err(&spi->dev, "unable to register rtc ds1343\n");
653 return PTR_ERR(priv->rtc); 523 return PTR_ERR(priv->rtc);
654 } 524
525 priv->rtc->nvram_old_abi = true;
526 priv->rtc->ops = &ds1343_rtc_ops;
527
528 res = rtc_register_device(priv->rtc);
529 if (res)
530 return res;
531
532 nvmem_cfg.priv = priv;
533 rtc_nvmem_register(priv->rtc, &nvmem_cfg);
655 534
656 priv->irq = spi->irq; 535 priv->irq = spi->irq;
657 536
diff --git a/drivers/rtc/rtc-ds1347.c b/drivers/rtc/rtc-ds1347.c
index ccfc9d43eb1e..938512c676ee 100644
--- a/drivers/rtc/rtc-ds1347.c
+++ b/drivers/rtc/rtc-ds1347.c
@@ -66,7 +66,7 @@ static int ds1347_read_time(struct device *dev, struct rtc_time *dt)
66 dt->tm_wday = bcd2bin(buf[5]) - 1; 66 dt->tm_wday = bcd2bin(buf[5]) - 1;
67 dt->tm_year = bcd2bin(buf[6]) + 100; 67 dt->tm_year = bcd2bin(buf[6]) + 100;
68 68
69 return rtc_valid_tm(dt); 69 return 0;
70} 70}
71 71
72static int ds1347_set_time(struct device *dev, struct rtc_time *dt) 72static int ds1347_set_time(struct device *dev, struct rtc_time *dt)
diff --git a/drivers/rtc/rtc-ds1390.c b/drivers/rtc/rtc-ds1390.c
index 4d5b007d7fc6..3b095401f848 100644
--- a/drivers/rtc/rtc-ds1390.c
+++ b/drivers/rtc/rtc-ds1390.c
@@ -153,7 +153,7 @@ static int ds1390_read_time(struct device *dev, struct rtc_time *dt)
153 /* adjust for century bit */ 153 /* adjust for century bit */
154 dt->tm_year = bcd2bin(chip->txrx_buf[6]) + ((chip->txrx_buf[5] & 0x80) ? 100 : 0); 154 dt->tm_year = bcd2bin(chip->txrx_buf[6]) + ((chip->txrx_buf[5] & 0x80) ? 100 : 0);
155 155
156 return rtc_valid_tm(dt); 156 return 0;
157} 157}
158 158
159static int ds1390_set_time(struct device *dev, struct rtc_time *dt) 159static int ds1390_set_time(struct device *dev, struct rtc_time *dt)
diff --git a/drivers/rtc/rtc-ds1511.c b/drivers/rtc/rtc-ds1511.c
index 1e95312a6f2e..a7d5ca428d68 100644
--- a/drivers/rtc/rtc-ds1511.c
+++ b/drivers/rtc/rtc-ds1511.c
@@ -277,10 +277,6 @@ static int ds1511_rtc_read_time(struct device *dev, struct rtc_time *rtc_tm)
277 277
278 rtc_tm->tm_mon--; 278 rtc_tm->tm_mon--;
279 279
280 if (rtc_valid_tm(rtc_tm) < 0) {
281 dev_err(dev, "retrieved date/time is not valid.\n");
282 rtc_time_to_tm(0, rtc_tm);
283 }
284 return 0; 280 return 0;
285} 281}
286 282
@@ -422,20 +418,20 @@ static int ds1511_nvram_write(void *priv, unsigned int pos, void *buf,
422 return 0; 418 return 0;
423} 419}
424 420
425static struct nvmem_config ds1511_nvmem_cfg = {
426 .name = "ds1511_nvram",
427 .word_size = 1,
428 .stride = 1,
429 .size = DS1511_RAM_MAX,
430 .reg_read = ds1511_nvram_read,
431 .reg_write = ds1511_nvram_write,
432};
433
434static int ds1511_rtc_probe(struct platform_device *pdev) 421static int ds1511_rtc_probe(struct platform_device *pdev)
435{ 422{
436 struct resource *res; 423 struct resource *res;
437 struct rtc_plat_data *pdata; 424 struct rtc_plat_data *pdata;
438 int ret = 0; 425 int ret = 0;
426 struct nvmem_config ds1511_nvmem_cfg = {
427 .name = "ds1511_nvram",
428 .word_size = 1,
429 .stride = 1,
430 .size = DS1511_RAM_MAX,
431 .reg_read = ds1511_nvram_read,
432 .reg_write = ds1511_nvram_write,
433 .priv = &pdev->dev,
434 };
439 435
440 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 436 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
441 if (!pdata) 437 if (!pdata)
@@ -478,14 +474,14 @@ static int ds1511_rtc_probe(struct platform_device *pdev)
478 474
479 pdata->rtc->ops = &ds1511_rtc_ops; 475 pdata->rtc->ops = &ds1511_rtc_ops;
480 476
481 ds1511_nvmem_cfg.priv = &pdev->dev;
482 pdata->rtc->nvmem_config = &ds1511_nvmem_cfg;
483 pdata->rtc->nvram_old_abi = true; 477 pdata->rtc->nvram_old_abi = true;
484 478
485 ret = rtc_register_device(pdata->rtc); 479 ret = rtc_register_device(pdata->rtc);
486 if (ret) 480 if (ret)
487 return ret; 481 return ret;
488 482
483 rtc_nvmem_register(pdata->rtc, &ds1511_nvmem_cfg);
484
489 /* 485 /*
490 * if the platform has an interrupt in mind for this device, 486 * if the platform has an interrupt in mind for this device,
491 * then by all means, set it 487 * then by all means, set it
diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c
index 9961ec646fd2..2441b9a2b366 100644
--- a/drivers/rtc/rtc-ds1553.c
+++ b/drivers/rtc/rtc-ds1553.c
@@ -127,10 +127,6 @@ static int ds1553_rtc_read_time(struct device *dev, struct rtc_time *tm)
127 /* year is 1900 + tm->tm_year */ 127 /* year is 1900 + tm->tm_year */
128 tm->tm_year = bcd2bin(year) + bcd2bin(century) * 100 - 1900; 128 tm->tm_year = bcd2bin(year) + bcd2bin(century) * 100 - 1900;
129 129
130 if (rtc_valid_tm(tm) < 0) {
131 dev_err(dev, "retrieved date/time is not valid.\n");
132 rtc_time_to_tm(0, tm);
133 }
134 return 0; 130 return 0;
135} 131}
136 132
@@ -233,46 +229,32 @@ static const struct rtc_class_ops ds1553_rtc_ops = {
233 .alarm_irq_enable = ds1553_rtc_alarm_irq_enable, 229 .alarm_irq_enable = ds1553_rtc_alarm_irq_enable,
234}; 230};
235 231
236static ssize_t ds1553_nvram_read(struct file *filp, struct kobject *kobj, 232static int ds1553_nvram_read(void *priv, unsigned int pos, void *val,
237 struct bin_attribute *bin_attr, 233 size_t bytes)
238 char *buf, loff_t pos, size_t size)
239{ 234{
240 struct device *dev = container_of(kobj, struct device, kobj); 235 struct platform_device *pdev = priv;
241 struct platform_device *pdev = to_platform_device(dev);
242 struct rtc_plat_data *pdata = platform_get_drvdata(pdev); 236 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
243 void __iomem *ioaddr = pdata->ioaddr; 237 void __iomem *ioaddr = pdata->ioaddr;
244 ssize_t count; 238 u8 *buf = val;
245 239
246 for (count = 0; count < size; count++) 240 for (; bytes; bytes--)
247 *buf++ = readb(ioaddr + pos++); 241 *buf++ = readb(ioaddr + pos++);
248 return count; 242 return 0;
249} 243}
250 244
251static ssize_t ds1553_nvram_write(struct file *filp, struct kobject *kobj, 245static int ds1553_nvram_write(void *priv, unsigned int pos, void *val,
252 struct bin_attribute *bin_attr, 246 size_t bytes)
253 char *buf, loff_t pos, size_t size)
254{ 247{
255 struct device *dev = container_of(kobj, struct device, kobj); 248 struct platform_device *pdev = priv;
256 struct platform_device *pdev = to_platform_device(dev);
257 struct rtc_plat_data *pdata = platform_get_drvdata(pdev); 249 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
258 void __iomem *ioaddr = pdata->ioaddr; 250 void __iomem *ioaddr = pdata->ioaddr;
259 ssize_t count; 251 u8 *buf = val;
260 252
261 for (count = 0; count < size; count++) 253 for (; bytes; bytes--)
262 writeb(*buf++, ioaddr + pos++); 254 writeb(*buf++, ioaddr + pos++);
263 return count; 255 return 0;
264} 256}
265 257
266static struct bin_attribute ds1553_nvram_attr = {
267 .attr = {
268 .name = "nvram",
269 .mode = S_IRUGO | S_IWUSR,
270 },
271 .size = RTC_OFFSET,
272 .read = ds1553_nvram_read,
273 .write = ds1553_nvram_write,
274};
275
276static int ds1553_rtc_probe(struct platform_device *pdev) 258static int ds1553_rtc_probe(struct platform_device *pdev)
277{ 259{
278 struct resource *res; 260 struct resource *res;
@@ -280,6 +262,15 @@ static int ds1553_rtc_probe(struct platform_device *pdev)
280 struct rtc_plat_data *pdata; 262 struct rtc_plat_data *pdata;
281 void __iomem *ioaddr; 263 void __iomem *ioaddr;
282 int ret = 0; 264 int ret = 0;
265 struct nvmem_config nvmem_cfg = {
266 .name = "ds1553_nvram",
267 .word_size = 1,
268 .stride = 1,
269 .size = RTC_OFFSET,
270 .reg_read = ds1553_nvram_read,
271 .reg_write = ds1553_nvram_write,
272 .priv = pdev,
273 };
283 274
284 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 275 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
285 if (!pdata) 276 if (!pdata)
@@ -308,11 +299,17 @@ static int ds1553_rtc_probe(struct platform_device *pdev)
308 pdata->last_jiffies = jiffies; 299 pdata->last_jiffies = jiffies;
309 platform_set_drvdata(pdev, pdata); 300 platform_set_drvdata(pdev, pdata);
310 301
311 pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 302 pdata->rtc = devm_rtc_allocate_device(&pdev->dev);
312 &ds1553_rtc_ops, THIS_MODULE);
313 if (IS_ERR(pdata->rtc)) 303 if (IS_ERR(pdata->rtc))
314 return PTR_ERR(pdata->rtc); 304 return PTR_ERR(pdata->rtc);
315 305
306 pdata->rtc->ops = &ds1553_rtc_ops;
307 pdata->rtc->nvram_old_abi = true;
308
309 ret = rtc_register_device(pdata->rtc);
310 if (ret)
311 return ret;
312
316 if (pdata->irq > 0) { 313 if (pdata->irq > 0) {
317 writeb(0, ioaddr + RTC_INTERRUPTS); 314 writeb(0, ioaddr + RTC_INTERRUPTS);
318 if (devm_request_irq(&pdev->dev, pdata->irq, 315 if (devm_request_irq(&pdev->dev, pdata->irq,
@@ -323,21 +320,9 @@ static int ds1553_rtc_probe(struct platform_device *pdev)
323 } 320 }
324 } 321 }
325 322
326 ret = sysfs_create_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr); 323 if (rtc_nvmem_register(pdata->rtc, &nvmem_cfg))
327 if (ret) 324 dev_err(&pdev->dev, "unable to register nvmem\n");
328 dev_err(&pdev->dev, "unable to create sysfs file: %s\n",
329 ds1553_nvram_attr.attr.name);
330
331 return 0;
332}
333
334static int ds1553_rtc_remove(struct platform_device *pdev)
335{
336 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
337 325
338 sysfs_remove_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr);
339 if (pdata->irq > 0)
340 writeb(0, pdata->ioaddr + RTC_INTERRUPTS);
341 return 0; 326 return 0;
342} 327}
343 328
@@ -346,7 +331,6 @@ MODULE_ALIAS("platform:rtc-ds1553");
346 331
347static struct platform_driver ds1553_rtc_driver = { 332static struct platform_driver ds1553_rtc_driver = {
348 .probe = ds1553_rtc_probe, 333 .probe = ds1553_rtc_probe,
349 .remove = ds1553_rtc_remove,
350 .driver = { 334 .driver = {
351 .name = "rtc-ds1553", 335 .name = "rtc-ds1553",
352 }, 336 },
diff --git a/drivers/rtc/rtc-ds1685.c b/drivers/rtc/rtc-ds1685.c
index ed43b4311660..1a39829d2b40 100644
--- a/drivers/rtc/rtc-ds1685.c
+++ b/drivers/rtc/rtc-ds1685.c
@@ -306,7 +306,7 @@ ds1685_rtc_read_time(struct device *dev, struct rtc_time *tm)
306 tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year); 306 tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year);
307 tm->tm_isdst = 0; /* RTC has hardcoded timezone, so don't use. */ 307 tm->tm_isdst = 0; /* RTC has hardcoded timezone, so don't use. */
308 308
309 return rtc_valid_tm(tm); 309 return 0;
310} 310}
311 311
312/** 312/**
diff --git a/drivers/rtc/rtc-ds1742.c b/drivers/rtc/rtc-ds1742.c
index 3abf1cbfb8ce..2d781180e968 100644
--- a/drivers/rtc/rtc-ds1742.c
+++ b/drivers/rtc/rtc-ds1742.c
@@ -53,9 +53,7 @@
53struct rtc_plat_data { 53struct rtc_plat_data {
54 void __iomem *ioaddr_nvram; 54 void __iomem *ioaddr_nvram;
55 void __iomem *ioaddr_rtc; 55 void __iomem *ioaddr_rtc;
56 size_t size_nvram;
57 unsigned long last_jiffies; 56 unsigned long last_jiffies;
58 struct bin_attribute nvram_attr;
59}; 57};
60 58
61static int ds1742_rtc_set_time(struct device *dev, struct rtc_time *tm) 59static int ds1742_rtc_set_time(struct device *dev, struct rtc_time *tm)
@@ -114,7 +112,7 @@ static int ds1742_rtc_read_time(struct device *dev, struct rtc_time *tm)
114 /* year is 1900 + tm->tm_year */ 112 /* year is 1900 + tm->tm_year */
115 tm->tm_year = bcd2bin(year) + bcd2bin(century) * 100 - 1900; 113 tm->tm_year = bcd2bin(year) + bcd2bin(century) * 100 - 1900;
116 114
117 return rtc_valid_tm(tm); 115 return 0;
118} 116}
119 117
120static const struct rtc_class_ops ds1742_rtc_ops = { 118static const struct rtc_class_ops ds1742_rtc_ops = {
@@ -122,34 +120,28 @@ static const struct rtc_class_ops ds1742_rtc_ops = {
122 .set_time = ds1742_rtc_set_time, 120 .set_time = ds1742_rtc_set_time,
123}; 121};
124 122
125static ssize_t ds1742_nvram_read(struct file *filp, struct kobject *kobj, 123static int ds1742_nvram_read(void *priv, unsigned int pos, void *val,
126 struct bin_attribute *bin_attr, 124 size_t bytes)
127 char *buf, loff_t pos, size_t size)
128{ 125{
129 struct device *dev = container_of(kobj, struct device, kobj); 126 struct rtc_plat_data *pdata = priv;
130 struct platform_device *pdev = to_platform_device(dev);
131 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
132 void __iomem *ioaddr = pdata->ioaddr_nvram; 127 void __iomem *ioaddr = pdata->ioaddr_nvram;
133 ssize_t count; 128 u8 *buf = val;
134 129
135 for (count = 0; count < size; count++) 130 for (; bytes; bytes--)
136 *buf++ = readb(ioaddr + pos++); 131 *buf++ = readb(ioaddr + pos++);
137 return count; 132 return 0;
138} 133}
139 134
140static ssize_t ds1742_nvram_write(struct file *filp, struct kobject *kobj, 135static int ds1742_nvram_write(void *priv, unsigned int pos, void *val,
141 struct bin_attribute *bin_attr, 136 size_t bytes)
142 char *buf, loff_t pos, size_t size)
143{ 137{
144 struct device *dev = container_of(kobj, struct device, kobj); 138 struct rtc_plat_data *pdata = priv;
145 struct platform_device *pdev = to_platform_device(dev);
146 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
147 void __iomem *ioaddr = pdata->ioaddr_nvram; 139 void __iomem *ioaddr = pdata->ioaddr_nvram;
148 ssize_t count; 140 u8 *buf = val;
149 141
150 for (count = 0; count < size; count++) 142 for (; bytes; bytes--)
151 writeb(*buf++, ioaddr + pos++); 143 writeb(*buf++, ioaddr + pos++);
152 return count; 144 return 0;
153} 145}
154 146
155static int ds1742_rtc_probe(struct platform_device *pdev) 147static int ds1742_rtc_probe(struct platform_device *pdev)
@@ -160,6 +152,14 @@ static int ds1742_rtc_probe(struct platform_device *pdev)
160 struct rtc_plat_data *pdata; 152 struct rtc_plat_data *pdata;
161 void __iomem *ioaddr; 153 void __iomem *ioaddr;
162 int ret = 0; 154 int ret = 0;
155 struct nvmem_config nvmem_cfg = {
156 .name = "ds1742_nvram",
157 .word_size = 1,
158 .stride = 1,
159 .reg_read = ds1742_nvram_read,
160 .reg_write = ds1742_nvram_write,
161 };
162
163 163
164 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 164 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
165 if (!pdata) 165 if (!pdata)
@@ -171,15 +171,10 @@ static int ds1742_rtc_probe(struct platform_device *pdev)
171 return PTR_ERR(ioaddr); 171 return PTR_ERR(ioaddr);
172 172
173 pdata->ioaddr_nvram = ioaddr; 173 pdata->ioaddr_nvram = ioaddr;
174 pdata->size_nvram = resource_size(res) - RTC_SIZE; 174 pdata->ioaddr_rtc = ioaddr + resource_size(res) - RTC_SIZE;
175 pdata->ioaddr_rtc = ioaddr + pdata->size_nvram;
176 175
177 sysfs_bin_attr_init(&pdata->nvram_attr); 176 nvmem_cfg.size = resource_size(res) - RTC_SIZE;
178 pdata->nvram_attr.attr.name = "nvram"; 177 nvmem_cfg.priv = pdata;
179 pdata->nvram_attr.attr.mode = S_IRUGO | S_IWUSR;
180 pdata->nvram_attr.read = ds1742_nvram_read;
181 pdata->nvram_attr.write = ds1742_nvram_write;
182 pdata->nvram_attr.size = pdata->size_nvram;
183 178
184 /* turn RTC on if it was not on */ 179 /* turn RTC on if it was not on */
185 ioaddr = pdata->ioaddr_rtc; 180 ioaddr = pdata->ioaddr_rtc;
@@ -196,24 +191,21 @@ static int ds1742_rtc_probe(struct platform_device *pdev)
196 191
197 pdata->last_jiffies = jiffies; 192 pdata->last_jiffies = jiffies;
198 platform_set_drvdata(pdev, pdata); 193 platform_set_drvdata(pdev, pdata);
199 rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 194
200 &ds1742_rtc_ops, THIS_MODULE); 195 rtc = devm_rtc_allocate_device(&pdev->dev);
201 if (IS_ERR(rtc)) 196 if (IS_ERR(rtc))
202 return PTR_ERR(rtc); 197 return PTR_ERR(rtc);
203 198
204 ret = sysfs_create_bin_file(&pdev->dev.kobj, &pdata->nvram_attr); 199 rtc->ops = &ds1742_rtc_ops;
205 if (ret) 200 rtc->nvram_old_abi = true;
206 dev_err(&pdev->dev, "Unable to create sysfs entry: %s\n",
207 pdata->nvram_attr.attr.name);
208 201
209 return 0; 202 ret = rtc_register_device(rtc);
210} 203 if (ret)
204 return ret;
211 205
212static int ds1742_rtc_remove(struct platform_device *pdev) 206 if (rtc_nvmem_register(rtc, &nvmem_cfg))
213{ 207 dev_err(&pdev->dev, "Unable to register nvmem\n");
214 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
215 208
216 sysfs_remove_bin_file(&pdev->dev.kobj, &pdata->nvram_attr);
217 return 0; 209 return 0;
218} 210}
219 211
@@ -225,7 +217,6 @@ MODULE_DEVICE_TABLE(of, ds1742_rtc_of_match);
225 217
226static struct platform_driver ds1742_rtc_driver = { 218static struct platform_driver ds1742_rtc_driver = {
227 .probe = ds1742_rtc_probe, 219 .probe = ds1742_rtc_probe,
228 .remove = ds1742_rtc_remove,
229 .driver = { 220 .driver = {
230 .name = "rtc-ds1742", 221 .name = "rtc-ds1742",
231 .of_match_table = of_match_ptr(ds1742_rtc_of_match), 222 .of_match_table = of_match_ptr(ds1742_rtc_of_match),
diff --git a/drivers/rtc/rtc-ds2404.c b/drivers/rtc/rtc-ds2404.c
index 9a1582ed7070..b886b6a5c178 100644
--- a/drivers/rtc/rtc-ds2404.c
+++ b/drivers/rtc/rtc-ds2404.c
@@ -207,7 +207,7 @@ static int ds2404_read_time(struct device *dev, struct rtc_time *dt)
207 time = le32_to_cpu(time); 207 time = le32_to_cpu(time);
208 208
209 rtc_time_to_tm(time, dt); 209 rtc_time_to_tm(time, dt);
210 return rtc_valid_tm(dt); 210 return 0;
211} 211}
212 212
213static int ds2404_set_mmss(struct device *dev, unsigned long secs) 213static int ds2404_set_mmss(struct device *dev, unsigned long secs)
diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c
index 0550f7ba464f..7184e5145f12 100644
--- a/drivers/rtc/rtc-ds3232.c
+++ b/drivers/rtc/rtc-ds3232.c
@@ -145,7 +145,7 @@ static int ds3232_read_time(struct device *dev, struct rtc_time *time)
145 145
146 time->tm_year = bcd2bin(year) + add_century; 146 time->tm_year = bcd2bin(year) + add_century;
147 147
148 return rtc_valid_tm(time); 148 return 0;
149} 149}
150 150
151static int ds3232_set_time(struct device *dev, struct rtc_time *time) 151static int ds3232_set_time(struct device *dev, struct rtc_time *time)
diff --git a/drivers/rtc/rtc-efi.c b/drivers/rtc/rtc-efi.c
index 0130afd7fe88..3454e7814524 100644
--- a/drivers/rtc/rtc-efi.c
+++ b/drivers/rtc/rtc-efi.c
@@ -176,7 +176,7 @@ static int efi_read_time(struct device *dev, struct rtc_time *tm)
176 if (!convert_from_efi_time(&eft, tm)) 176 if (!convert_from_efi_time(&eft, tm))
177 return -EIO; 177 return -EIO;
178 178
179 return rtc_valid_tm(tm); 179 return 0;
180} 180}
181 181
182static int efi_set_time(struct device *dev, struct rtc_time *tm) 182static int efi_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-fm3130.c b/drivers/rtc/rtc-fm3130.c
index 576eadbba296..e1137670d4d2 100644
--- a/drivers/rtc/rtc-fm3130.c
+++ b/drivers/rtc/rtc-fm3130.c
@@ -136,8 +136,7 @@ static int fm3130_get_time(struct device *dev, struct rtc_time *t)
136 t->tm_hour, t->tm_mday, 136 t->tm_hour, t->tm_mday,
137 t->tm_mon, t->tm_year, t->tm_wday); 137 t->tm_mon, t->tm_year, t->tm_wday);
138 138
139 /* initial clock setting can be undefined */ 139 return 0;
140 return rtc_valid_tm(t);
141} 140}
142 141
143 142
diff --git a/drivers/rtc/rtc-goldfish.c b/drivers/rtc/rtc-goldfish.c
index d67769265185..a1c44d0c8557 100644
--- a/drivers/rtc/rtc-goldfish.c
+++ b/drivers/rtc/rtc-goldfish.c
@@ -235,3 +235,5 @@ static struct platform_driver goldfish_rtc = {
235}; 235};
236 236
237module_platform_driver(goldfish_rtc); 237module_platform_driver(goldfish_rtc);
238
239MODULE_LICENSE("GPL v2");
diff --git a/drivers/rtc/rtc-isl12022.c b/drivers/rtc/rtc-isl12022.c
index 38586a024ee8..890ccfc9e5aa 100644
--- a/drivers/rtc/rtc-isl12022.c
+++ b/drivers/rtc/rtc-isl12022.c
@@ -104,8 +104,9 @@ static int isl12022_write_reg(struct i2c_client *client,
104 * In the routines that deal directly with the isl12022 hardware, we use 104 * In the routines that deal directly with the isl12022 hardware, we use
105 * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch. 105 * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
106 */ 106 */
107static int isl12022_get_datetime(struct i2c_client *client, struct rtc_time *tm) 107static int isl12022_rtc_read_time(struct device *dev, struct rtc_time *tm)
108{ 108{
109 struct i2c_client *client = to_i2c_client(dev);
109 uint8_t buf[ISL12022_REG_INT + 1]; 110 uint8_t buf[ISL12022_REG_INT + 1];
110 int ret; 111 int ret;
111 112
@@ -149,11 +150,12 @@ static int isl12022_get_datetime(struct i2c_client *client, struct rtc_time *tm)
149 tm->tm_sec, tm->tm_min, tm->tm_hour, 150 tm->tm_sec, tm->tm_min, tm->tm_hour,
150 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 151 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
151 152
152 return rtc_valid_tm(tm); 153 return 0;
153} 154}
154 155
155static int isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm) 156static int isl12022_rtc_set_time(struct device *dev, struct rtc_time *tm)
156{ 157{
158 struct i2c_client *client = to_i2c_client(dev);
157 struct isl12022 *isl12022 = i2c_get_clientdata(client); 159 struct isl12022 *isl12022 = i2c_get_clientdata(client);
158 size_t i; 160 size_t i;
159 int ret; 161 int ret;
@@ -199,7 +201,7 @@ static int isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm)
199 return ret; 201 return ret;
200 } 202 }
201 203
202 isl12022->write_enabled = 1; 204 isl12022->write_enabled = true;
203 } 205 }
204 206
205 /* hours, minutes and seconds */ 207 /* hours, minutes and seconds */
@@ -228,16 +230,6 @@ static int isl12022_set_datetime(struct i2c_client *client, struct rtc_time *tm)
228 return 0; 230 return 0;
229} 231}
230 232
231static int isl12022_rtc_read_time(struct device *dev, struct rtc_time *tm)
232{
233 return isl12022_get_datetime(to_i2c_client(dev), tm);
234}
235
236static int isl12022_rtc_set_time(struct device *dev, struct rtc_time *tm)
237{
238 return isl12022_set_datetime(to_i2c_client(dev), tm);
239}
240
241static const struct rtc_class_ops isl12022_rtc_ops = { 233static const struct rtc_class_ops isl12022_rtc_ops = {
242 .read_time = isl12022_rtc_read_time, 234 .read_time = isl12022_rtc_read_time,
243 .set_time = isl12022_rtc_set_time, 235 .set_time = isl12022_rtc_set_time,
diff --git a/drivers/rtc/rtc-isl12026.c b/drivers/rtc/rtc-isl12026.c
new file mode 100644
index 000000000000..97f594f9667c
--- /dev/null
+++ b/drivers/rtc/rtc-isl12026.c
@@ -0,0 +1,501 @@
1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * An I2C driver for the Intersil ISL 12026
4 *
5 * Copyright (c) 2018 Cavium, Inc.
6 */
7#include <linux/bcd.h>
8#include <linux/delay.h>
9#include <linux/i2c.h>
10#include <linux/module.h>
11#include <linux/mutex.h>
12#include <linux/nvmem-provider.h>
13#include <linux/of.h>
14#include <linux/of_device.h>
15#include <linux/rtc.h>
16#include <linux/slab.h>
17
18/* register offsets */
19#define ISL12026_REG_PWR 0x14
20# define ISL12026_REG_PWR_BSW BIT(6)
21# define ISL12026_REG_PWR_SBIB BIT(7)
22#define ISL12026_REG_SC 0x30
23#define ISL12026_REG_HR 0x32
24# define ISL12026_REG_HR_MIL BIT(7) /* military or 24 hour time */
25#define ISL12026_REG_SR 0x3f
26# define ISL12026_REG_SR_RTCF BIT(0)
27# define ISL12026_REG_SR_WEL BIT(1)
28# define ISL12026_REG_SR_RWEL BIT(2)
29# define ISL12026_REG_SR_MBZ BIT(3)
30# define ISL12026_REG_SR_OSCF BIT(4)
31
32/* The EEPROM array responds at i2c address 0x57 */
33#define ISL12026_EEPROM_ADDR 0x57
34
35#define ISL12026_PAGESIZE 16
36#define ISL12026_NVMEM_WRITE_TIME 20
37
38struct isl12026 {
39 struct rtc_device *rtc;
40 struct i2c_client *nvm_client;
41};
42
43static int isl12026_read_reg(struct i2c_client *client, int reg)
44{
45 u8 addr[] = {0, reg};
46 u8 val;
47 int ret;
48
49 struct i2c_msg msgs[] = {
50 {
51 .addr = client->addr,
52 .flags = 0,
53 .len = sizeof(addr),
54 .buf = addr
55 }, {
56 .addr = client->addr,
57 .flags = I2C_M_RD,
58 .len = 1,
59 .buf = &val
60 }
61 };
62
63 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
64 if (ret != ARRAY_SIZE(msgs)) {
65 dev_err(&client->dev, "read reg error, ret=%d\n", ret);
66 ret = ret < 0 ? ret : -EIO;
67 } else {
68 ret = val;
69 }
70
71 return ret;
72}
73
74static int isl12026_arm_write(struct i2c_client *client)
75{
76 int ret;
77 u8 op[3];
78 struct i2c_msg msg = {
79 .addr = client->addr,
80 .flags = 0,
81 .len = 1,
82 .buf = op
83 };
84
85 /* Set SR.WEL */
86 op[0] = 0;
87 op[1] = ISL12026_REG_SR;
88 op[2] = ISL12026_REG_SR_WEL;
89 msg.len = 3;
90 ret = i2c_transfer(client->adapter, &msg, 1);
91 if (ret != 1) {
92 dev_err(&client->dev, "write error SR.WEL, ret=%d\n", ret);
93 ret = ret < 0 ? ret : -EIO;
94 goto out;
95 }
96
97 /* Set SR.WEL and SR.RWEL */
98 op[2] = ISL12026_REG_SR_WEL | ISL12026_REG_SR_RWEL;
99 msg.len = 3;
100 ret = i2c_transfer(client->adapter, &msg, 1);
101 if (ret != 1) {
102 dev_err(&client->dev,
103 "write error SR.WEL|SR.RWEL, ret=%d\n", ret);
104 ret = ret < 0 ? ret : -EIO;
105 goto out;
106 } else {
107 ret = 0;
108 }
109out:
110 return ret;
111}
112
113static int isl12026_disarm_write(struct i2c_client *client)
114{
115 int ret;
116 u8 op[3] = {0, ISL12026_REG_SR, 0};
117 struct i2c_msg msg = {
118 .addr = client->addr,
119 .flags = 0,
120 .len = sizeof(op),
121 .buf = op
122 };
123
124 ret = i2c_transfer(client->adapter, &msg, 1);
125 if (ret != 1) {
126 dev_err(&client->dev,
127 "write error SR, ret=%d\n", ret);
128 ret = ret < 0 ? ret : -EIO;
129 } else {
130 ret = 0;
131 }
132
133 return ret;
134}
135
136static int isl12026_write_reg(struct i2c_client *client, int reg, u8 val)
137{
138 int ret;
139 u8 op[3] = {0, reg, val};
140 struct i2c_msg msg = {
141 .addr = client->addr,
142 .flags = 0,
143 .len = sizeof(op),
144 .buf = op
145 };
146
147 ret = isl12026_arm_write(client);
148 if (ret)
149 return ret;
150
151 ret = i2c_transfer(client->adapter, &msg, 1);
152 if (ret != 1) {
153 dev_err(&client->dev, "write error CCR, ret=%d\n", ret);
154 ret = ret < 0 ? ret : -EIO;
155 goto out;
156 }
157
158 msleep(ISL12026_NVMEM_WRITE_TIME);
159
160 ret = isl12026_disarm_write(client);
161out:
162 return ret;
163}
164
165static int isl12026_rtc_set_time(struct device *dev, struct rtc_time *tm)
166{
167 struct i2c_client *client = to_i2c_client(dev);
168 int ret;
169 u8 op[10];
170 struct i2c_msg msg = {
171 .addr = client->addr,
172 .flags = 0,
173 .len = sizeof(op),
174 .buf = op
175 };
176
177 ret = isl12026_arm_write(client);
178 if (ret)
179 return ret;
180
181 /* Set the CCR registers */
182 op[0] = 0;
183 op[1] = ISL12026_REG_SC;
184 op[2] = bin2bcd(tm->tm_sec); /* SC */
185 op[3] = bin2bcd(tm->tm_min); /* MN */
186 op[4] = bin2bcd(tm->tm_hour) | ISL12026_REG_HR_MIL; /* HR */
187 op[5] = bin2bcd(tm->tm_mday); /* DT */
188 op[6] = bin2bcd(tm->tm_mon + 1); /* MO */
189 op[7] = bin2bcd(tm->tm_year % 100); /* YR */
190 op[8] = bin2bcd(tm->tm_wday & 7); /* DW */
191 op[9] = bin2bcd(tm->tm_year >= 100 ? 20 : 19); /* Y2K */
192 ret = i2c_transfer(client->adapter, &msg, 1);
193 if (ret != 1) {
194 dev_err(&client->dev, "write error CCR, ret=%d\n", ret);
195 ret = ret < 0 ? ret : -EIO;
196 goto out;
197 }
198
199 ret = isl12026_disarm_write(client);
200out:
201 return ret;
202}
203
204static int isl12026_rtc_read_time(struct device *dev, struct rtc_time *tm)
205{
206 struct i2c_client *client = to_i2c_client(dev);
207 u8 ccr[8];
208 u8 addr[2];
209 u8 sr;
210 int ret;
211 struct i2c_msg msgs[] = {
212 {
213 .addr = client->addr,
214 .flags = 0,
215 .len = sizeof(addr),
216 .buf = addr
217 }, {
218 .addr = client->addr,
219 .flags = I2C_M_RD,
220 }
221 };
222
223 /* First, read SR */
224 addr[0] = 0;
225 addr[1] = ISL12026_REG_SR;
226 msgs[1].len = 1;
227 msgs[1].buf = &sr;
228
229 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
230 if (ret != ARRAY_SIZE(msgs)) {
231 dev_err(&client->dev, "read error, ret=%d\n", ret);
232 ret = ret < 0 ? ret : -EIO;
233 goto out;
234 }
235
236 if (sr & ISL12026_REG_SR_RTCF)
237 dev_warn(&client->dev, "Real-Time Clock Failure on read\n");
238 if (sr & ISL12026_REG_SR_OSCF)
239 dev_warn(&client->dev, "Oscillator Failure on read\n");
240
241 /* Second, CCR regs */
242 addr[0] = 0;
243 addr[1] = ISL12026_REG_SC;
244 msgs[1].len = sizeof(ccr);
245 msgs[1].buf = ccr;
246
247 ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
248 if (ret != ARRAY_SIZE(msgs)) {
249 dev_err(&client->dev, "read error, ret=%d\n", ret);
250 ret = ret < 0 ? ret : -EIO;
251 goto out;
252 }
253
254 tm->tm_sec = bcd2bin(ccr[0] & 0x7F);
255 tm->tm_min = bcd2bin(ccr[1] & 0x7F);
256 if (ccr[2] & ISL12026_REG_HR_MIL)
257 tm->tm_hour = bcd2bin(ccr[2] & 0x3F);
258 else
259 tm->tm_hour = bcd2bin(ccr[2] & 0x1F) +
260 ((ccr[2] & 0x20) ? 12 : 0);
261 tm->tm_mday = bcd2bin(ccr[3] & 0x3F);
262 tm->tm_mon = bcd2bin(ccr[4] & 0x1F) - 1;
263 tm->tm_year = bcd2bin(ccr[5]);
264 if (bcd2bin(ccr[7]) == 20)
265 tm->tm_year += 100;
266 tm->tm_wday = ccr[6] & 0x07;
267
268 ret = 0;
269out:
270 return ret;
271}
272
273static const struct rtc_class_ops isl12026_rtc_ops = {
274 .read_time = isl12026_rtc_read_time,
275 .set_time = isl12026_rtc_set_time,
276};
277
278static int isl12026_nvm_read(void *p, unsigned int offset,
279 void *val, size_t bytes)
280{
281 struct isl12026 *priv = p;
282 int ret;
283 u8 addr[2];
284 struct i2c_msg msgs[] = {
285 {
286 .addr = priv->nvm_client->addr,
287 .flags = 0,
288 .len = sizeof(addr),
289 .buf = addr
290 }, {
291 .addr = priv->nvm_client->addr,
292 .flags = I2C_M_RD,
293 .buf = val
294 }
295 };
296
297 /*
298 * offset and bytes checked and limited by nvmem core, so
299 * proceed without further checks.
300 */
301 ret = mutex_lock_interruptible(&priv->rtc->ops_lock);
302 if (ret)
303 return ret;
304
305 /* 2 bytes of address, most significant first */
306 addr[0] = offset >> 8;
307 addr[1] = offset;
308 msgs[1].len = bytes;
309 ret = i2c_transfer(priv->nvm_client->adapter, msgs, ARRAY_SIZE(msgs));
310
311 mutex_unlock(&priv->rtc->ops_lock);
312
313 if (ret != ARRAY_SIZE(msgs)) {
314 dev_err(&priv->nvm_client->dev,
315 "nvmem read error, ret=%d\n", ret);
316 return ret < 0 ? ret : -EIO;
317 }
318
319 return 0;
320}
321
322static int isl12026_nvm_write(void *p, unsigned int offset,
323 void *val, size_t bytes)
324{
325 struct isl12026 *priv = p;
326 int ret;
327 u8 *v = val;
328 size_t chunk_size, num_written;
329 u8 payload[ISL12026_PAGESIZE + 2]; /* page + 2 address bytes */
330 struct i2c_msg msgs[] = {
331 {
332 .addr = priv->nvm_client->addr,
333 .flags = 0,
334 .buf = payload
335 }
336 };
337
338 /*
339 * offset and bytes checked and limited by nvmem core, so
340 * proceed without further checks.
341 */
342 ret = mutex_lock_interruptible(&priv->rtc->ops_lock);
343 if (ret)
344 return ret;
345
346 num_written = 0;
347 while (bytes) {
348 chunk_size = round_down(offset, ISL12026_PAGESIZE) +
349 ISL12026_PAGESIZE - offset;
350 chunk_size = min(bytes, chunk_size);
351 /*
352 * 2 bytes of address, most significant first, followed
353 * by page data bytes
354 */
355 memcpy(payload + 2, v + num_written, chunk_size);
356 payload[0] = offset >> 8;
357 payload[1] = offset;
358 msgs[0].len = chunk_size + 2;
359 ret = i2c_transfer(priv->nvm_client->adapter,
360 msgs, ARRAY_SIZE(msgs));
361 if (ret != ARRAY_SIZE(msgs)) {
362 dev_err(&priv->nvm_client->dev,
363 "nvmem write error, ret=%d\n", ret);
364 ret = ret < 0 ? ret : -EIO;
365 break;
366 }
367 ret = 0;
368 bytes -= chunk_size;
369 offset += chunk_size;
370 num_written += chunk_size;
371 msleep(ISL12026_NVMEM_WRITE_TIME);
372 }
373
374 mutex_unlock(&priv->rtc->ops_lock);
375
376 return ret;
377}
378
379static void isl12026_force_power_modes(struct i2c_client *client)
380{
381 int ret;
382 int pwr, requested_pwr;
383 u32 bsw_val, sbib_val;
384 bool set_bsw, set_sbib;
385
386 /*
387 * If we can read the of_property, set the specified value.
388 * If there is an error reading the of_property (likely
389 * because it does not exist), keep the current value.
390 */
391 ret = of_property_read_u32(client->dev.of_node,
392 "isil,pwr-bsw", &bsw_val);
393 set_bsw = (ret == 0);
394
395 ret = of_property_read_u32(client->dev.of_node,
396 "isil,pwr-sbib", &sbib_val);
397 set_sbib = (ret == 0);
398
399 /* Check if PWR.BSW and/or PWR.SBIB need specified values */
400 if (!set_bsw && !set_sbib)
401 return;
402
403 pwr = isl12026_read_reg(client, ISL12026_REG_PWR);
404 if (pwr < 0) {
405 dev_warn(&client->dev, "Error: Failed to read PWR %d\n", pwr);
406 return;
407 }
408
409 requested_pwr = pwr;
410
411 if (set_bsw) {
412 if (bsw_val)
413 requested_pwr |= ISL12026_REG_PWR_BSW;
414 else
415 requested_pwr &= ~ISL12026_REG_PWR_BSW;
416 } /* else keep current BSW */
417
418 if (set_sbib) {
419 if (sbib_val)
420 requested_pwr |= ISL12026_REG_PWR_SBIB;
421 else
422 requested_pwr &= ~ISL12026_REG_PWR_SBIB;
423 } /* else keep current SBIB */
424
425 if (pwr >= 0 && pwr != requested_pwr) {
426 dev_dbg(&client->dev, "PWR: %02x\n", pwr);
427 dev_dbg(&client->dev, "Updating PWR to: %02x\n", requested_pwr);
428 isl12026_write_reg(client, ISL12026_REG_PWR, requested_pwr);
429 }
430}
431
432static int isl12026_probe_new(struct i2c_client *client)
433{
434 struct isl12026 *priv;
435 int ret;
436 struct nvmem_config nvm_cfg = {
437 .name = "isl12026-",
438 .base_dev = &client->dev,
439 .stride = 1,
440 .word_size = 1,
441 .size = 512,
442 .reg_read = isl12026_nvm_read,
443 .reg_write = isl12026_nvm_write,
444 };
445
446 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
447 return -ENODEV;
448
449 priv = devm_kzalloc(&client->dev, sizeof(*priv), GFP_KERNEL);
450 if (!priv)
451 return -ENOMEM;
452
453 i2c_set_clientdata(client, priv);
454
455 isl12026_force_power_modes(client);
456
457 priv->nvm_client = i2c_new_dummy(client->adapter, ISL12026_EEPROM_ADDR);
458 if (!priv->nvm_client)
459 return -ENOMEM;
460
461 priv->rtc = devm_rtc_allocate_device(&client->dev);
462 ret = PTR_ERR_OR_ZERO(priv->rtc);
463 if (ret)
464 return ret;
465
466 priv->rtc->ops = &isl12026_rtc_ops;
467 nvm_cfg.priv = priv;
468 ret = rtc_nvmem_register(priv->rtc, &nvm_cfg);
469 if (ret)
470 return ret;
471
472 return rtc_register_device(priv->rtc);
473}
474
475static int isl12026_remove(struct i2c_client *client)
476{
477 struct isl12026 *priv = i2c_get_clientdata(client);
478
479 i2c_unregister_device(priv->nvm_client);
480 return 0;
481}
482
483static const struct of_device_id isl12026_dt_match[] = {
484 { .compatible = "isil,isl12026" },
485 { }
486};
487MODULE_DEVICE_TABLE(of, isl12026_dt_match);
488
489static struct i2c_driver isl12026_driver = {
490 .driver = {
491 .name = "rtc-isl12026",
492 .of_match_table = isl12026_dt_match,
493 },
494 .probe_new = isl12026_probe_new,
495 .remove = isl12026_remove,
496};
497
498module_i2c_driver(isl12026_driver);
499
500MODULE_DESCRIPTION("ISL 12026 RTC driver");
501MODULE_LICENSE("GPL");
diff --git a/drivers/rtc/rtc-isl1208.c b/drivers/rtc/rtc-isl1208.c
index 8dd299c6a1f3..1a2c38cc0178 100644
--- a/drivers/rtc/rtc-isl1208.c
+++ b/drivers/rtc/rtc-isl1208.c
@@ -459,6 +459,11 @@ isl1208_i2c_set_time(struct i2c_client *client, struct rtc_time const *tm)
459 } 459 }
460 460
461 /* clear WRTC again */ 461 /* clear WRTC again */
462 sr = isl1208_i2c_get_sr(client);
463 if (sr < 0) {
464 dev_err(&client->dev, "%s: reading SR failed\n", __func__);
465 return sr;
466 }
462 sr = i2c_smbus_write_byte_data(client, ISL1208_REG_SR, 467 sr = i2c_smbus_write_byte_data(client, ISL1208_REG_SR,
463 sr & ~ISL1208_REG_SR_WRTC); 468 sr & ~ISL1208_REG_SR_WRTC);
464 if (sr < 0) { 469 if (sr < 0) {
@@ -630,29 +635,12 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
630 if (isl1208_i2c_validate_client(client) < 0) 635 if (isl1208_i2c_validate_client(client) < 0)
631 return -ENODEV; 636 return -ENODEV;
632 637
633 if (client->irq > 0) { 638 rtc = devm_rtc_allocate_device(&client->dev);
634 rc = devm_request_threaded_irq(&client->dev, client->irq, NULL,
635 isl1208_rtc_interrupt,
636 IRQF_SHARED | IRQF_ONESHOT,
637 isl1208_driver.driver.name,
638 client);
639 if (!rc) {
640 device_init_wakeup(&client->dev, 1);
641 enable_irq_wake(client->irq);
642 } else {
643 dev_err(&client->dev,
644 "Unable to request irq %d, no alarm support\n",
645 client->irq);
646 client->irq = 0;
647 }
648 }
649
650 rtc = devm_rtc_device_register(&client->dev, isl1208_driver.driver.name,
651 &isl1208_rtc_ops,
652 THIS_MODULE);
653 if (IS_ERR(rtc)) 639 if (IS_ERR(rtc))
654 return PTR_ERR(rtc); 640 return PTR_ERR(rtc);
655 641
642 rtc->ops = &isl1208_rtc_ops;
643
656 i2c_set_clientdata(client, rtc); 644 i2c_set_clientdata(client, rtc);
657 645
658 rc = isl1208_i2c_get_sr(client); 646 rc = isl1208_i2c_get_sr(client);
@@ -669,7 +657,24 @@ isl1208_probe(struct i2c_client *client, const struct i2c_device_id *id)
669 if (rc) 657 if (rc)
670 return rc; 658 return rc;
671 659
672 return 0; 660 if (client->irq > 0) {
661 rc = devm_request_threaded_irq(&client->dev, client->irq, NULL,
662 isl1208_rtc_interrupt,
663 IRQF_SHARED | IRQF_ONESHOT,
664 isl1208_driver.driver.name,
665 client);
666 if (!rc) {
667 device_init_wakeup(&client->dev, 1);
668 enable_irq_wake(client->irq);
669 } else {
670 dev_err(&client->dev,
671 "Unable to request irq %d, no alarm support\n",
672 client->irq);
673 client->irq = 0;
674 }
675 }
676
677 return rtc_register_device(rtc);
673} 678}
674 679
675static int 680static int
diff --git a/drivers/rtc/rtc-jz4740.c b/drivers/rtc/rtc-jz4740.c
index ff65a7d2b9c9..d0a891777f44 100644
--- a/drivers/rtc/rtc-jz4740.c
+++ b/drivers/rtc/rtc-jz4740.c
@@ -173,7 +173,7 @@ static int jz4740_rtc_read_time(struct device *dev, struct rtc_time *time)
173 173
174 rtc_time_to_tm(secs, time); 174 rtc_time_to_tm(secs, time);
175 175
176 return rtc_valid_tm(time); 176 return 0;
177} 177}
178 178
179static int jz4740_rtc_set_mmss(struct device *dev, unsigned long secs) 179static int jz4740_rtc_set_mmss(struct device *dev, unsigned long secs)
diff --git a/drivers/rtc/rtc-lib.c b/drivers/rtc/rtc-lib.c
index 1ae7da5cfc60..4a3c0f3aab14 100644
--- a/drivers/rtc/rtc-lib.c
+++ b/drivers/rtc/rtc-lib.c
@@ -52,13 +52,11 @@ EXPORT_SYMBOL(rtc_year_days);
52 */ 52 */
53void rtc_time64_to_tm(time64_t time, struct rtc_time *tm) 53void rtc_time64_to_tm(time64_t time, struct rtc_time *tm)
54{ 54{
55 unsigned int month, year; 55 unsigned int month, year, secs;
56 unsigned long secs;
57 int days; 56 int days;
58 57
59 /* time must be positive */ 58 /* time must be positive */
60 days = div_s64(time, 86400); 59 days = div_s64_rem(time, 86400, &secs);
61 secs = time - (unsigned int) days * 86400;
62 60
63 /* day of the week, 1970-01-01 was a Thursday */ 61 /* day of the week, 1970-01-01 was a Thursday */
64 tm->tm_wday = (days + 4) % 7; 62 tm->tm_wday = (days + 4) % 7;
@@ -67,7 +65,7 @@ void rtc_time64_to_tm(time64_t time, struct rtc_time *tm)
67 days -= (year - 1970) * 365 65 days -= (year - 1970) * 365
68 + LEAPS_THRU_END_OF(year - 1) 66 + LEAPS_THRU_END_OF(year - 1)
69 - LEAPS_THRU_END_OF(1970 - 1); 67 - LEAPS_THRU_END_OF(1970 - 1);
70 if (days < 0) { 68 while (days < 0) {
71 year -= 1; 69 year -= 1;
72 days += 365 + is_leap_year(year); 70 days += 365 + is_leap_year(year);
73 } 71 }
diff --git a/drivers/rtc/rtc-lpc24xx.c b/drivers/rtc/rtc-lpc24xx.c
index 59d99596fdeb..14dc7b04fae0 100644
--- a/drivers/rtc/rtc-lpc24xx.c
+++ b/drivers/rtc/rtc-lpc24xx.c
@@ -110,7 +110,7 @@ static int lpc24xx_rtc_read_time(struct device *dev, struct rtc_time *tm)
110 tm->tm_year = CT1_YEAR(ct1); 110 tm->tm_year = CT1_YEAR(ct1);
111 tm->tm_yday = CT2_DOY(ct2); 111 tm->tm_yday = CT2_DOY(ct2);
112 112
113 return rtc_valid_tm(tm); 113 return 0;
114} 114}
115 115
116static int lpc24xx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *wkalrm) 116static int lpc24xx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *wkalrm)
diff --git a/drivers/rtc/rtc-lpc32xx.c b/drivers/rtc/rtc-lpc32xx.c
index 887871c3d526..3ba87239aacc 100644
--- a/drivers/rtc/rtc-lpc32xx.c
+++ b/drivers/rtc/rtc-lpc32xx.c
@@ -70,7 +70,7 @@ static int lpc32xx_rtc_read_time(struct device *dev, struct rtc_time *time)
70 elapsed_sec = rtc_readl(rtc, LPC32XX_RTC_UCOUNT); 70 elapsed_sec = rtc_readl(rtc, LPC32XX_RTC_UCOUNT);
71 rtc_time_to_tm(elapsed_sec, time); 71 rtc_time_to_tm(elapsed_sec, time);
72 72
73 return rtc_valid_tm(time); 73 return 0;
74} 74}
75 75
76static int lpc32xx_rtc_set_mmss(struct device *dev, unsigned long secs) 76static int lpc32xx_rtc_set_mmss(struct device *dev, unsigned long secs)
diff --git a/drivers/rtc/rtc-ls1x.c b/drivers/rtc/rtc-ls1x.c
index e04ca54f21e2..045af1135e48 100644
--- a/drivers/rtc/rtc-ls1x.c
+++ b/drivers/rtc/rtc-ls1x.c
@@ -98,7 +98,7 @@ static int ls1x_rtc_read_time(struct device *dev, struct rtc_time *rtm)
98 ls1x_get_min(v), ls1x_get_sec(v)); 98 ls1x_get_min(v), ls1x_get_sec(v));
99 rtc_time_to_tm(t, rtm); 99 rtc_time_to_tm(t, rtm);
100 100
101 return rtc_valid_tm(rtm); 101 return 0;
102} 102}
103 103
104static int ls1x_rtc_set_time(struct device *dev, struct rtc_time *rtm) 104static int ls1x_rtc_set_time(struct device *dev, struct rtc_time *rtm)
diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
index c90fba3ed861..ad03e2f12f5d 100644
--- a/drivers/rtc/rtc-m41t80.c
+++ b/drivers/rtc/rtc-m41t80.c
@@ -73,7 +73,6 @@
73#define M41T80_FEATURE_WD BIT(3) /* Extra watchdog resolution */ 73#define M41T80_FEATURE_WD BIT(3) /* Extra watchdog resolution */
74#define M41T80_FEATURE_SQ_ALT BIT(4) /* RSx bits are in reg 4 */ 74#define M41T80_FEATURE_SQ_ALT BIT(4) /* RSx bits are in reg 4 */
75 75
76static DEFINE_MUTEX(m41t80_rtc_mutex);
77static const struct i2c_device_id m41t80_id[] = { 76static const struct i2c_device_id m41t80_id[] = {
78 { "m41t62", M41T80_FEATURE_SQ | M41T80_FEATURE_SQ_ALT }, 77 { "m41t62", M41T80_FEATURE_SQ | M41T80_FEATURE_SQ_ALT },
79 { "m41t65", M41T80_FEATURE_HT | M41T80_FEATURE_WD }, 78 { "m41t65", M41T80_FEATURE_HT | M41T80_FEATURE_WD },
@@ -199,9 +198,9 @@ static irqreturn_t m41t80_handle_irq(int irq, void *dev_id)
199 return IRQ_HANDLED; 198 return IRQ_HANDLED;
200} 199}
201 200
202static int m41t80_get_datetime(struct i2c_client *client, 201static int m41t80_rtc_read_time(struct device *dev, struct rtc_time *tm)
203 struct rtc_time *tm)
204{ 202{
203 struct i2c_client *client = to_i2c_client(dev);
205 unsigned char buf[8]; 204 unsigned char buf[8];
206 int err, flags; 205 int err, flags;
207 206
@@ -230,12 +229,12 @@ static int m41t80_get_datetime(struct i2c_client *client,
230 229
231 /* assume 20YY not 19YY, and ignore the Century Bit */ 230 /* assume 20YY not 19YY, and ignore the Century Bit */
232 tm->tm_year = bcd2bin(buf[M41T80_REG_YEAR]) + 100; 231 tm->tm_year = bcd2bin(buf[M41T80_REG_YEAR]) + 100;
233 return rtc_valid_tm(tm); 232 return 0;
234} 233}
235 234
236/* Sets the given date and time to the real time clock. */ 235static int m41t80_rtc_set_time(struct device *dev, struct rtc_time *tm)
237static int m41t80_set_datetime(struct i2c_client *client, struct rtc_time *tm)
238{ 236{
237 struct i2c_client *client = to_i2c_client(dev);
239 struct m41t80_data *clientdata = i2c_get_clientdata(client); 238 struct m41t80_data *clientdata = i2c_get_clientdata(client);
240 unsigned char buf[8]; 239 unsigned char buf[8];
241 int err, flags; 240 int err, flags;
@@ -298,16 +297,6 @@ static int m41t80_rtc_proc(struct device *dev, struct seq_file *seq)
298 return 0; 297 return 0;
299} 298}
300 299
301static int m41t80_rtc_read_time(struct device *dev, struct rtc_time *tm)
302{
303 return m41t80_get_datetime(to_i2c_client(dev), tm);
304}
305
306static int m41t80_rtc_set_time(struct device *dev, struct rtc_time *tm)
307{
308 return m41t80_set_datetime(to_i2c_client(dev), tm);
309}
310
311static int m41t80_alarm_irq_enable(struct device *dev, unsigned int enabled) 300static int m41t80_alarm_irq_enable(struct device *dev, unsigned int enabled)
312{ 301{
313 struct i2c_client *client = to_i2c_client(dev); 302 struct i2c_client *client = to_i2c_client(dev);
@@ -598,6 +587,7 @@ static struct clk *m41t80_sqw_register_clk(struct m41t80_data *m41t80)
598 * 587 *
599 ***************************************************************************** 588 *****************************************************************************
600 */ 589 */
590static DEFINE_MUTEX(m41t80_rtc_mutex);
601static struct i2c_client *save_client; 591static struct i2c_client *save_client;
602 592
603/* Default margin */ 593/* Default margin */
@@ -885,7 +875,6 @@ static int m41t80_probe(struct i2c_client *client,
885{ 875{
886 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 876 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
887 int rc = 0; 877 int rc = 0;
888 struct rtc_device *rtc = NULL;
889 struct rtc_time tm; 878 struct rtc_time tm;
890 struct m41t80_data *m41t80_data = NULL; 879 struct m41t80_data *m41t80_data = NULL;
891 bool wakeup_source = false; 880 bool wakeup_source = false;
@@ -909,6 +898,10 @@ static int m41t80_probe(struct i2c_client *client,
909 m41t80_data->features = id->driver_data; 898 m41t80_data->features = id->driver_data;
910 i2c_set_clientdata(client, m41t80_data); 899 i2c_set_clientdata(client, m41t80_data);
911 900
901 m41t80_data->rtc = devm_rtc_allocate_device(&client->dev);
902 if (IS_ERR(m41t80_data->rtc))
903 return PTR_ERR(m41t80_data->rtc);
904
912#ifdef CONFIG_OF 905#ifdef CONFIG_OF
913 wakeup_source = of_property_read_bool(client->dev.of_node, 906 wakeup_source = of_property_read_bool(client->dev.of_node,
914 "wakeup-source"); 907 "wakeup-source");
@@ -932,15 +925,11 @@ static int m41t80_probe(struct i2c_client *client,
932 device_init_wakeup(&client->dev, true); 925 device_init_wakeup(&client->dev, true);
933 } 926 }
934 927
935 rtc = devm_rtc_device_register(&client->dev, client->name, 928 m41t80_data->rtc->ops = &m41t80_rtc_ops;
936 &m41t80_rtc_ops, THIS_MODULE);
937 if (IS_ERR(rtc))
938 return PTR_ERR(rtc);
939 929
940 m41t80_data->rtc = rtc;
941 if (client->irq <= 0) { 930 if (client->irq <= 0) {
942 /* We cannot support UIE mode if we do not have an IRQ line */ 931 /* We cannot support UIE mode if we do not have an IRQ line */
943 rtc->uie_unsupported = 1; 932 m41t80_data->rtc->uie_unsupported = 1;
944 } 933 }
945 934
946 /* Make sure HT (Halt Update) bit is cleared */ 935 /* Make sure HT (Halt Update) bit is cleared */
@@ -948,7 +937,7 @@ static int m41t80_probe(struct i2c_client *client,
948 937
949 if (rc >= 0 && rc & M41T80_ALHOUR_HT) { 938 if (rc >= 0 && rc & M41T80_ALHOUR_HT) {
950 if (m41t80_data->features & M41T80_FEATURE_HT) { 939 if (m41t80_data->features & M41T80_FEATURE_HT) {
951 m41t80_get_datetime(client, &tm); 940 m41t80_rtc_read_time(&client->dev, &tm);
952 dev_info(&client->dev, "HT bit was set!\n"); 941 dev_info(&client->dev, "HT bit was set!\n");
953 dev_info(&client->dev, 942 dev_info(&client->dev,
954 "Power Down at %04i-%02i-%02i %02i:%02i:%02i\n", 943 "Power Down at %04i-%02i-%02i %02i:%02i:%02i\n",
@@ -993,6 +982,11 @@ static int m41t80_probe(struct i2c_client *client,
993 if (m41t80_data->features & M41T80_FEATURE_SQ) 982 if (m41t80_data->features & M41T80_FEATURE_SQ)
994 m41t80_sqw_register_clk(m41t80_data); 983 m41t80_sqw_register_clk(m41t80_data);
995#endif 984#endif
985
986 rc = rtc_register_device(m41t80_data->rtc);
987 if (rc)
988 return rc;
989
996 return 0; 990 return 0;
997} 991}
998 992
diff --git a/drivers/rtc/rtc-m41t93.c b/drivers/rtc/rtc-m41t93.c
index 5ac45fc1a787..4a08a9dabc82 100644
--- a/drivers/rtc/rtc-m41t93.c
+++ b/drivers/rtc/rtc-m41t93.c
@@ -159,7 +159,7 @@ static int m41t93_get_time(struct device *dev, struct rtc_time *tm)
159 tm->tm_hour, tm->tm_mday, 159 tm->tm_hour, tm->tm_mday,
160 tm->tm_mon, tm->tm_year, tm->tm_wday); 160 tm->tm_mon, tm->tm_year, tm->tm_wday);
161 161
162 return ret < 0 ? ret : rtc_valid_tm(tm); 162 return ret;
163} 163}
164 164
165 165
diff --git a/drivers/rtc/rtc-m41t94.c b/drivers/rtc/rtc-m41t94.c
index 1f0eb79e69f9..bab82b4be356 100644
--- a/drivers/rtc/rtc-m41t94.c
+++ b/drivers/rtc/rtc-m41t94.c
@@ -99,8 +99,7 @@ static int m41t94_read_time(struct device *dev, struct rtc_time *tm)
99 tm->tm_hour, tm->tm_mday, 99 tm->tm_hour, tm->tm_mday,
100 tm->tm_mon, tm->tm_year, tm->tm_wday); 100 tm->tm_mon, tm->tm_year, tm->tm_wday);
101 101
102 /* initial clock setting can be undefined */ 102 return 0;
103 return rtc_valid_tm(tm);
104} 103}
105 104
106static const struct rtc_class_ops m41t94_rtc_ops = { 105static const struct rtc_class_ops m41t94_rtc_ops = {
diff --git a/drivers/rtc/rtc-m48t35.c b/drivers/rtc/rtc-m48t35.c
index 810f4ea481e4..0cf6507de3c7 100644
--- a/drivers/rtc/rtc-m48t35.c
+++ b/drivers/rtc/rtc-m48t35.c
@@ -84,7 +84,7 @@ static int m48t35_read_time(struct device *dev, struct rtc_time *tm)
84 tm->tm_year += 100; 84 tm->tm_year += 100;
85 85
86 tm->tm_mon--; 86 tm->tm_mon--;
87 return rtc_valid_tm(tm); 87 return 0;
88} 88}
89 89
90static int m48t35_set_time(struct device *dev, struct rtc_time *tm) 90static int m48t35_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c
index d99a705bec07..216fac62c888 100644
--- a/drivers/rtc/rtc-m48t59.c
+++ b/drivers/rtc/rtc-m48t59.c
@@ -105,7 +105,7 @@ static int m48t59_rtc_read_time(struct device *dev, struct rtc_time *tm)
105 dev_dbg(dev, "RTC read time %04d-%02d-%02d %02d/%02d/%02d\n", 105 dev_dbg(dev, "RTC read time %04d-%02d-%02d %02d/%02d/%02d\n",
106 tm->tm_year + 1900, tm->tm_mon, tm->tm_mday, 106 tm->tm_year + 1900, tm->tm_mon, tm->tm_mday,
107 tm->tm_hour, tm->tm_min, tm->tm_sec); 107 tm->tm_hour, tm->tm_min, tm->tm_sec);
108 return rtc_valid_tm(tm); 108 return 0;
109} 109}
110 110
111static int m48t59_rtc_set_time(struct device *dev, struct rtc_time *tm) 111static int m48t59_rtc_set_time(struct device *dev, struct rtc_time *tm)
@@ -334,16 +334,16 @@ static const struct rtc_class_ops m48t02_rtc_ops = {
334 .set_time = m48t59_rtc_set_time, 334 .set_time = m48t59_rtc_set_time,
335}; 335};
336 336
337static ssize_t m48t59_nvram_read(struct file *filp, struct kobject *kobj, 337static int m48t59_nvram_read(void *priv, unsigned int offset, void *val,
338 struct bin_attribute *bin_attr, 338 size_t size)
339 char *buf, loff_t pos, size_t size)
340{ 339{
341 struct device *dev = container_of(kobj, struct device, kobj); 340 struct platform_device *pdev = priv;
342 struct platform_device *pdev = to_platform_device(dev); 341 struct device *dev = &pdev->dev;
343 struct m48t59_plat_data *pdata = dev_get_platdata(&pdev->dev); 342 struct m48t59_plat_data *pdata = dev_get_platdata(&pdev->dev);
344 struct m48t59_private *m48t59 = platform_get_drvdata(pdev); 343 struct m48t59_private *m48t59 = platform_get_drvdata(pdev);
345 ssize_t cnt = 0; 344 ssize_t cnt = 0;
346 unsigned long flags; 345 unsigned long flags;
346 u8 *buf = val;
347 347
348 spin_lock_irqsave(&m48t59->lock, flags); 348 spin_lock_irqsave(&m48t59->lock, flags);
349 349
@@ -352,19 +352,19 @@ static ssize_t m48t59_nvram_read(struct file *filp, struct kobject *kobj,
352 352
353 spin_unlock_irqrestore(&m48t59->lock, flags); 353 spin_unlock_irqrestore(&m48t59->lock, flags);
354 354
355 return cnt; 355 return 0;
356} 356}
357 357
358static ssize_t m48t59_nvram_write(struct file *filp, struct kobject *kobj, 358static int m48t59_nvram_write(void *priv, unsigned int offset, void *val,
359 struct bin_attribute *bin_attr, 359 size_t size)
360 char *buf, loff_t pos, size_t size)
361{ 360{
362 struct device *dev = container_of(kobj, struct device, kobj); 361 struct platform_device *pdev = priv;
363 struct platform_device *pdev = to_platform_device(dev); 362 struct device *dev = &pdev->dev;
364 struct m48t59_plat_data *pdata = dev_get_platdata(&pdev->dev); 363 struct m48t59_plat_data *pdata = dev_get_platdata(&pdev->dev);
365 struct m48t59_private *m48t59 = platform_get_drvdata(pdev); 364 struct m48t59_private *m48t59 = platform_get_drvdata(pdev);
366 ssize_t cnt = 0; 365 ssize_t cnt = 0;
367 unsigned long flags; 366 unsigned long flags;
367 u8 *buf = val;
368 368
369 spin_lock_irqsave(&m48t59->lock, flags); 369 spin_lock_irqsave(&m48t59->lock, flags);
370 370
@@ -373,18 +373,9 @@ static ssize_t m48t59_nvram_write(struct file *filp, struct kobject *kobj,
373 373
374 spin_unlock_irqrestore(&m48t59->lock, flags); 374 spin_unlock_irqrestore(&m48t59->lock, flags);
375 375
376 return cnt; 376 return 0;
377} 377}
378 378
379static struct bin_attribute m48t59_nvram_attr = {
380 .attr = {
381 .name = "nvram",
382 .mode = S_IRUGO | S_IWUSR,
383 },
384 .read = m48t59_nvram_read,
385 .write = m48t59_nvram_write,
386};
387
388static int m48t59_rtc_probe(struct platform_device *pdev) 379static int m48t59_rtc_probe(struct platform_device *pdev)
389{ 380{
390 struct m48t59_plat_data *pdata = dev_get_platdata(&pdev->dev); 381 struct m48t59_plat_data *pdata = dev_get_platdata(&pdev->dev);
@@ -393,6 +384,14 @@ static int m48t59_rtc_probe(struct platform_device *pdev)
393 int ret = -ENOMEM; 384 int ret = -ENOMEM;
394 char *name; 385 char *name;
395 const struct rtc_class_ops *ops; 386 const struct rtc_class_ops *ops;
387 struct nvmem_config nvmem_cfg = {
388 .name = "m48t59-",
389 .word_size = 1,
390 .stride = 1,
391 .reg_read = m48t59_nvram_read,
392 .reg_write = m48t59_nvram_write,
393 .priv = pdev,
394 };
396 395
397 /* This chip could be memory-mapped or I/O-mapped */ 396 /* This chip could be memory-mapped or I/O-mapped */
398 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 397 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -480,23 +479,22 @@ static int m48t59_rtc_probe(struct platform_device *pdev)
480 spin_lock_init(&m48t59->lock); 479 spin_lock_init(&m48t59->lock);
481 platform_set_drvdata(pdev, m48t59); 480 platform_set_drvdata(pdev, m48t59);
482 481
483 m48t59->rtc = devm_rtc_device_register(&pdev->dev, name, ops, 482 m48t59->rtc = devm_rtc_allocate_device(&pdev->dev);
484 THIS_MODULE);
485 if (IS_ERR(m48t59->rtc)) 483 if (IS_ERR(m48t59->rtc))
486 return PTR_ERR(m48t59->rtc); 484 return PTR_ERR(m48t59->rtc);
487 485
488 m48t59_nvram_attr.size = pdata->offset; 486 m48t59->rtc->nvram_old_abi = true;
487 m48t59->rtc->ops = ops;
489 488
490 ret = sysfs_create_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr); 489 nvmem_cfg.size = pdata->offset;
490 ret = rtc_nvmem_register(m48t59->rtc, &nvmem_cfg);
491 if (ret) 491 if (ret)
492 return ret; 492 return ret;
493 493
494 return 0; 494 ret = rtc_register_device(m48t59->rtc);
495} 495 if (ret)
496 return ret;
496 497
497static int m48t59_rtc_remove(struct platform_device *pdev)
498{
499 sysfs_remove_bin_file(&pdev->dev.kobj, &m48t59_nvram_attr);
500 return 0; 498 return 0;
501} 499}
502 500
@@ -508,7 +506,6 @@ static struct platform_driver m48t59_rtc_driver = {
508 .name = "rtc-m48t59", 506 .name = "rtc-m48t59",
509 }, 507 },
510 .probe = m48t59_rtc_probe, 508 .probe = m48t59_rtc_probe,
511 .remove = m48t59_rtc_remove,
512}; 509};
513 510
514module_platform_driver(m48t59_rtc_driver); 511module_platform_driver(m48t59_rtc_driver);
diff --git a/drivers/rtc/rtc-m48t86.c b/drivers/rtc/rtc-m48t86.c
index d9aea9b6d9cd..a9533535c3b7 100644
--- a/drivers/rtc/rtc-m48t86.c
+++ b/drivers/rtc/rtc-m48t86.c
@@ -100,7 +100,7 @@ static int m48t86_rtc_read_time(struct device *dev, struct rtc_time *tm)
100 if (m48t86_readb(dev, M48T86_HOUR) & 0x80) 100 if (m48t86_readb(dev, M48T86_HOUR) & 0x80)
101 tm->tm_hour += 12; 101 tm->tm_hour += 12;
102 102
103 return rtc_valid_tm(tm); 103 return 0;
104} 104}
105 105
106static int m48t86_rtc_set_time(struct device *dev, struct rtc_time *tm) 106static int m48t86_rtc_set_time(struct device *dev, struct rtc_time *tm)
@@ -218,21 +218,21 @@ static bool m48t86_verify_chip(struct platform_device *pdev)
218 return false; 218 return false;
219} 219}
220 220
221static struct nvmem_config m48t86_nvmem_cfg = {
222 .name = "m48t86_nvram",
223 .word_size = 1,
224 .stride = 1,
225 .size = M48T86_NVRAM_LEN,
226 .reg_read = m48t86_nvram_read,
227 .reg_write = m48t86_nvram_write,
228};
229
230static int m48t86_rtc_probe(struct platform_device *pdev) 221static int m48t86_rtc_probe(struct platform_device *pdev)
231{ 222{
232 struct m48t86_rtc_info *info; 223 struct m48t86_rtc_info *info;
233 struct resource *res; 224 struct resource *res;
234 unsigned char reg; 225 unsigned char reg;
235 int err; 226 int err;
227 struct nvmem_config m48t86_nvmem_cfg = {
228 .name = "m48t86_nvram",
229 .word_size = 1,
230 .stride = 1,
231 .size = M48T86_NVRAM_LEN,
232 .reg_read = m48t86_nvram_read,
233 .reg_write = m48t86_nvram_write,
234 .priv = &pdev->dev,
235 };
236 236
237 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); 237 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
238 if (!info) 238 if (!info)
@@ -264,15 +264,14 @@ static int m48t86_rtc_probe(struct platform_device *pdev)
264 return PTR_ERR(info->rtc); 264 return PTR_ERR(info->rtc);
265 265
266 info->rtc->ops = &m48t86_rtc_ops; 266 info->rtc->ops = &m48t86_rtc_ops;
267
268 m48t86_nvmem_cfg.priv = &pdev->dev;
269 info->rtc->nvmem_config = &m48t86_nvmem_cfg;
270 info->rtc->nvram_old_abi = true; 267 info->rtc->nvram_old_abi = true;
271 268
272 err = rtc_register_device(info->rtc); 269 err = rtc_register_device(info->rtc);
273 if (err) 270 if (err)
274 return err; 271 return err;
275 272
273 rtc_nvmem_register(info->rtc, &m48t86_nvmem_cfg);
274
276 /* read battery status */ 275 /* read battery status */
277 reg = m48t86_readb(&pdev->dev, M48T86_D); 276 reg = m48t86_readb(&pdev->dev, M48T86_D);
278 dev_info(&pdev->dev, "battery %s\n", 277 dev_info(&pdev->dev, "battery %s\n",
diff --git a/drivers/rtc/rtc-max6900.c b/drivers/rtc/rtc-max6900.c
index cbdc86a560ba..ab60f13fa3ef 100644
--- a/drivers/rtc/rtc-max6900.c
+++ b/drivers/rtc/rtc-max6900.c
@@ -139,8 +139,9 @@ static int max6900_i2c_write_regs(struct i2c_client *client, u8 const *buf)
139 return -EIO; 139 return -EIO;
140} 140}
141 141
142static int max6900_i2c_read_time(struct i2c_client *client, struct rtc_time *tm) 142static int max6900_rtc_read_time(struct device *dev, struct rtc_time *tm)
143{ 143{
144 struct i2c_client *client = to_i2c_client(dev);
144 int rc; 145 int rc;
145 u8 regs[MAX6900_REG_LEN]; 146 u8 regs[MAX6900_REG_LEN];
146 147
@@ -157,7 +158,7 @@ static int max6900_i2c_read_time(struct i2c_client *client, struct rtc_time *tm)
157 bcd2bin(regs[MAX6900_REG_CENTURY]) * 100 - 1900; 158 bcd2bin(regs[MAX6900_REG_CENTURY]) * 100 - 1900;
158 tm->tm_wday = bcd2bin(regs[MAX6900_REG_DW]); 159 tm->tm_wday = bcd2bin(regs[MAX6900_REG_DW]);
159 160
160 return rtc_valid_tm(tm); 161 return 0;
161} 162}
162 163
163static int max6900_i2c_clear_write_protect(struct i2c_client *client) 164static int max6900_i2c_clear_write_protect(struct i2c_client *client)
@@ -165,9 +166,9 @@ static int max6900_i2c_clear_write_protect(struct i2c_client *client)
165 return i2c_smbus_write_byte_data(client, MAX6900_REG_CONTROL_WRITE, 0); 166 return i2c_smbus_write_byte_data(client, MAX6900_REG_CONTROL_WRITE, 0);
166} 167}
167 168
168static int 169static int max6900_rtc_set_time(struct device *dev, struct rtc_time *tm)
169max6900_i2c_set_time(struct i2c_client *client, struct rtc_time const *tm)
170{ 170{
171 struct i2c_client *client = to_i2c_client(dev);
171 u8 regs[MAX6900_REG_LEN]; 172 u8 regs[MAX6900_REG_LEN];
172 int rc; 173 int rc;
173 174
@@ -193,16 +194,6 @@ max6900_i2c_set_time(struct i2c_client *client, struct rtc_time const *tm)
193 return 0; 194 return 0;
194} 195}
195 196
196static int max6900_rtc_read_time(struct device *dev, struct rtc_time *tm)
197{
198 return max6900_i2c_read_time(to_i2c_client(dev), tm);
199}
200
201static int max6900_rtc_set_time(struct device *dev, struct rtc_time *tm)
202{
203 return max6900_i2c_set_time(to_i2c_client(dev), tm);
204}
205
206static const struct rtc_class_ops max6900_rtc_ops = { 197static const struct rtc_class_ops max6900_rtc_ops = {
207 .read_time = max6900_rtc_read_time, 198 .read_time = max6900_rtc_read_time,
208 .set_time = max6900_rtc_set_time, 199 .set_time = max6900_rtc_set_time,
diff --git a/drivers/rtc/rtc-max6902.c b/drivers/rtc/rtc-max6902.c
index 315d09e0f2c1..745827463367 100644
--- a/drivers/rtc/rtc-max6902.c
+++ b/drivers/rtc/rtc-max6902.c
@@ -85,7 +85,7 @@ static int max6902_read_time(struct device *dev, struct rtc_time *dt)
85 dt->tm_year += century; 85 dt->tm_year += century;
86 dt->tm_year -= 1900; 86 dt->tm_year -= 1900;
87 87
88 return rtc_valid_tm(dt); 88 return 0;
89} 89}
90 90
91static int max6902_set_time(struct device *dev, struct rtc_time *dt) 91static int max6902_set_time(struct device *dev, struct rtc_time *dt)
diff --git a/drivers/rtc/rtc-max6916.c b/drivers/rtc/rtc-max6916.c
index 623ab27b2757..7e908a490cf6 100644
--- a/drivers/rtc/rtc-max6916.c
+++ b/drivers/rtc/rtc-max6916.c
@@ -75,7 +75,7 @@ static int max6916_read_time(struct device *dev, struct rtc_time *dt)
75 dt->tm_wday = bcd2bin(buf[5]) - 1; 75 dt->tm_wday = bcd2bin(buf[5]) - 1;
76 dt->tm_year = bcd2bin(buf[6]) + 100; 76 dt->tm_year = bcd2bin(buf[6]) + 100;
77 77
78 return rtc_valid_tm(dt); 78 return 0;
79} 79}
80 80
81static int max6916_set_time(struct device *dev, struct rtc_time *dt) 81static int max6916_set_time(struct device *dev, struct rtc_time *dt)
diff --git a/drivers/rtc/rtc-max77686.c b/drivers/rtc/rtc-max77686.c
index 182fdd00e290..cefde273fae6 100644
--- a/drivers/rtc/rtc-max77686.c
+++ b/drivers/rtc/rtc-max77686.c
@@ -364,11 +364,9 @@ static int max77686_rtc_read_time(struct device *dev, struct rtc_time *tm)
364 364
365 max77686_rtc_data_to_tm(data, tm, info); 365 max77686_rtc_data_to_tm(data, tm, info);
366 366
367 ret = rtc_valid_tm(tm);
368
369out: 367out:
370 mutex_unlock(&info->lock); 368 mutex_unlock(&info->lock);
371 return ret; 369 return 0;
372} 370}
373 371
374static int max77686_rtc_set_time(struct device *dev, struct rtc_time *tm) 372static int max77686_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-max8997.c b/drivers/rtc/rtc-max8997.c
index db984d4bf952..e8cee123e8aa 100644
--- a/drivers/rtc/rtc-max8997.c
+++ b/drivers/rtc/rtc-max8997.c
@@ -153,7 +153,7 @@ static int max8997_rtc_read_time(struct device *dev, struct rtc_time *tm)
153 153
154 max8997_rtc_data_to_tm(data, tm, info->rtc_24hr_mode); 154 max8997_rtc_data_to_tm(data, tm, info->rtc_24hr_mode);
155 155
156 return rtc_valid_tm(tm); 156 return 0;
157} 157}
158 158
159static int max8997_rtc_set_time(struct device *dev, struct rtc_time *tm) 159static int max8997_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-max8998.c b/drivers/rtc/rtc-max8998.c
index 30804b00985e..d8c0f9b3f87d 100644
--- a/drivers/rtc/rtc-max8998.c
+++ b/drivers/rtc/rtc-max8998.c
@@ -120,7 +120,7 @@ static int max8998_rtc_read_time(struct device *dev, struct rtc_time *tm)
120 120
121 max8998_data_to_tm(data, tm); 121 max8998_data_to_tm(data, tm);
122 122
123 return rtc_valid_tm(tm); 123 return 0;
124} 124}
125 125
126static int max8998_rtc_set_time(struct device *dev, struct rtc_time *tm) 126static int max8998_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-mc13xxx.c b/drivers/rtc/rtc-mc13xxx.c
index 30b8ef6a3676..1f892b238ddb 100644
--- a/drivers/rtc/rtc-mc13xxx.c
+++ b/drivers/rtc/rtc-mc13xxx.c
@@ -85,7 +85,7 @@ static int mc13xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
85 85
86 rtc_time64_to_tm((time64_t)days1 * SEC_PER_DAY + seconds, tm); 86 rtc_time64_to_tm((time64_t)days1 * SEC_PER_DAY + seconds, tm);
87 87
88 return rtc_valid_tm(tm); 88 return 0;
89} 89}
90 90
91static int mc13xxx_rtc_set_mmss(struct device *dev, time64_t secs) 91static int mc13xxx_rtc_set_mmss(struct device *dev, time64_t secs)
diff --git a/drivers/rtc/rtc-mcp795.c b/drivers/rtc/rtc-mcp795.c
index 77f21331ae21..00e11c1b2186 100644
--- a/drivers/rtc/rtc-mcp795.c
+++ b/drivers/rtc/rtc-mcp795.c
@@ -82,7 +82,7 @@ static int mcp795_rtcc_write(struct device *dev, u8 addr, u8 *data, u8 count)
82{ 82{
83 struct spi_device *spi = to_spi_device(dev); 83 struct spi_device *spi = to_spi_device(dev);
84 int ret; 84 int ret;
85 u8 tx[2 + count]; 85 u8 tx[257];
86 86
87 tx[0] = MCP795_WRITE; 87 tx[0] = MCP795_WRITE;
88 tx[1] = addr; 88 tx[1] = addr;
@@ -262,7 +262,7 @@ static int mcp795_read_time(struct device *dev, struct rtc_time *tim)
262 tim->tm_year + 1900, tim->tm_mon, tim->tm_mday, 262 tim->tm_year + 1900, tim->tm_mon, tim->tm_mday,
263 tim->tm_wday, tim->tm_hour, tim->tm_min, tim->tm_sec); 263 tim->tm_wday, tim->tm_hour, tim->tm_min, tim->tm_sec);
264 264
265 return rtc_valid_tm(tim); 265 return 0;
266} 266}
267 267
268static int mcp795_set_alarm(struct device *dev, struct rtc_wkalrm *alm) 268static int mcp795_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
diff --git a/drivers/rtc/rtc-mpc5121.c b/drivers/rtc/rtc-mpc5121.c
index 4ca4daa0b8f3..dd0364293bc0 100644
--- a/drivers/rtc/rtc-mpc5121.c
+++ b/drivers/rtc/rtc-mpc5121.c
@@ -122,7 +122,7 @@ static int mpc5121_rtc_read_time(struct device *dev, struct rtc_time *tm)
122 */ 122 */
123 mpc5121_rtc_update_smh(regs, tm); 123 mpc5121_rtc_update_smh(regs, tm);
124 124
125 return rtc_valid_tm(tm); 125 return 0;
126} 126}
127 127
128static int mpc5121_rtc_set_time(struct device *dev, struct rtc_time *tm) 128static int mpc5121_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-mrst.c b/drivers/rtc/rtc-mrst.c
index 7334c44fa7c3..fcb9de5218b2 100644
--- a/drivers/rtc/rtc-mrst.c
+++ b/drivers/rtc/rtc-mrst.c
@@ -105,7 +105,7 @@ static int mrst_read_time(struct device *dev, struct rtc_time *time)
105 /* Adjust for the 1972/1900 */ 105 /* Adjust for the 1972/1900 */
106 time->tm_year += 72; 106 time->tm_year += 72;
107 time->tm_mon--; 107 time->tm_mon--;
108 return rtc_valid_tm(time); 108 return 0;
109} 109}
110 110
111static int mrst_set_time(struct device *dev, struct rtc_time *time) 111static int mrst_set_time(struct device *dev, struct rtc_time *time)
@@ -122,7 +122,7 @@ static int mrst_set_time(struct device *dev, struct rtc_time *time)
122 min = time->tm_min; 122 min = time->tm_min;
123 sec = time->tm_sec; 123 sec = time->tm_sec;
124 124
125 if (yrs < 72 || yrs > 138) 125 if (yrs < 72 || yrs > 172)
126 return -EINVAL; 126 return -EINVAL;
127 yrs -= 72; 127 yrs -= 72;
128 128
diff --git a/drivers/rtc/rtc-msm6242.c b/drivers/rtc/rtc-msm6242.c
index c1c5c4e3b3b4..0c72a2e8ec67 100644
--- a/drivers/rtc/rtc-msm6242.c
+++ b/drivers/rtc/rtc-msm6242.c
@@ -155,7 +155,7 @@ static int msm6242_read_time(struct device *dev, struct rtc_time *tm)
155 155
156 msm6242_unlock(priv); 156 msm6242_unlock(priv);
157 157
158 return rtc_valid_tm(tm); 158 return 0;
159} 159}
160 160
161static int msm6242_set_time(struct device *dev, struct rtc_time *tm) 161static int msm6242_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-mt7622.c b/drivers/rtc/rtc-mt7622.c
index d79b9ae4d237..fd0cea722286 100644
--- a/drivers/rtc/rtc-mt7622.c
+++ b/drivers/rtc/rtc-mt7622.c
@@ -232,7 +232,7 @@ static int mtk_rtc_gettime(struct device *dev, struct rtc_time *tm)
232 232
233 mtk_rtc_get_alarm_or_time(hw, tm, MTK_TC); 233 mtk_rtc_get_alarm_or_time(hw, tm, MTK_TC);
234 234
235 return rtc_valid_tm(tm); 235 return 0;
236} 236}
237 237
238static int mtk_rtc_settime(struct device *dev, struct rtc_time *tm) 238static int mtk_rtc_settime(struct device *dev, struct rtc_time *tm)
@@ -307,6 +307,7 @@ static const struct of_device_id mtk_rtc_match[] = {
307 { .compatible = "mediatek,soc-rtc" }, 307 { .compatible = "mediatek,soc-rtc" },
308 {}, 308 {},
309}; 309};
310MODULE_DEVICE_TABLE(of, mtk_rtc_match);
310 311
311static int mtk_rtc_probe(struct platform_device *pdev) 312static int mtk_rtc_probe(struct platform_device *pdev)
312{ 313{
diff --git a/drivers/rtc/rtc-mv.c b/drivers/rtc/rtc-mv.c
index 79bb28617d45..bc52dbb0c0e2 100644
--- a/drivers/rtc/rtc-mv.c
+++ b/drivers/rtc/rtc-mv.c
@@ -94,7 +94,7 @@ static int mv_rtc_read_time(struct device *dev, struct rtc_time *tm)
94 /* hw counts from year 2000, but tm_year is relative to 1900 */ 94 /* hw counts from year 2000, but tm_year is relative to 1900 */
95 tm->tm_year = bcd2bin(year) + 100; 95 tm->tm_year = bcd2bin(year) + 100;
96 96
97 return rtc_valid_tm(tm); 97 return 0;
98} 98}
99 99
100static int mv_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm) 100static int mv_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
@@ -223,7 +223,6 @@ static int __init mv_rtc_probe(struct platform_device *pdev)
223 struct resource *res; 223 struct resource *res;
224 struct rtc_plat_data *pdata; 224 struct rtc_plat_data *pdata;
225 u32 rtc_time; 225 u32 rtc_time;
226 u32 rtc_date;
227 int ret = 0; 226 int ret = 0;
228 227
229 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 228 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
@@ -259,17 +258,6 @@ static int __init mv_rtc_probe(struct platform_device *pdev)
259 } 258 }
260 } 259 }
261 260
262 /*
263 * A date after January 19th, 2038 does not fit on 32 bits and
264 * will confuse the kernel and userspace. Reset to a sane date
265 * (January 1st, 2013) if we're after 2038.
266 */
267 rtc_date = readl(pdata->ioaddr + RTC_DATE_REG_OFFS);
268 if (bcd2bin((rtc_date >> RTC_YEAR_OFFS) & 0xff) >= 38) {
269 dev_info(&pdev->dev, "invalid RTC date, resetting to January 1st, 2013\n");
270 writel(0x130101, pdata->ioaddr + RTC_DATE_REG_OFFS);
271 }
272
273 pdata->irq = platform_get_irq(pdev, 0); 261 pdata->irq = platform_get_irq(pdev, 0);
274 262
275 platform_set_drvdata(pdev, pdata); 263 platform_set_drvdata(pdev, pdata);
diff --git a/drivers/rtc/rtc-mxc_v2.c b/drivers/rtc/rtc-mxc_v2.c
index 784221dfc9c7..9e14efb990b2 100644
--- a/drivers/rtc/rtc-mxc_v2.c
+++ b/drivers/rtc/rtc-mxc_v2.c
@@ -273,7 +273,7 @@ static const struct rtc_class_ops mxc_rtc_ops = {
273 .alarm_irq_enable = mxc_rtc_alarm_irq_enable, 273 .alarm_irq_enable = mxc_rtc_alarm_irq_enable,
274}; 274};
275 275
276static int mxc_rtc_wait_for_flag(void *__iomem ioaddr, int flag) 276static int mxc_rtc_wait_for_flag(void __iomem *ioaddr, int flag)
277{ 277{
278 unsigned int timeout = REG_READ_TIMEOUT; 278 unsigned int timeout = REG_READ_TIMEOUT;
279 279
diff --git a/drivers/rtc/rtc-nuc900.c b/drivers/rtc/rtc-nuc900.c
index 4ed81117cf5f..7da664a77181 100644
--- a/drivers/rtc/rtc-nuc900.c
+++ b/drivers/rtc/rtc-nuc900.c
@@ -102,8 +102,8 @@ static int *check_rtc_access_enable(struct nuc900_rtc *nuc900_rtc)
102 return NULL; 102 return NULL;
103} 103}
104 104
105static int nuc900_rtc_bcd2bin(unsigned int timereg, 105static void nuc900_rtc_bcd2bin(unsigned int timereg,
106 unsigned int calreg, struct rtc_time *tm) 106 unsigned int calreg, struct rtc_time *tm)
107{ 107{
108 tm->tm_mday = bcd2bin(calreg >> 0); 108 tm->tm_mday = bcd2bin(calreg >> 0);
109 tm->tm_mon = bcd2bin(calreg >> 8); 109 tm->tm_mon = bcd2bin(calreg >> 8);
@@ -112,8 +112,6 @@ static int nuc900_rtc_bcd2bin(unsigned int timereg,
112 tm->tm_sec = bcd2bin(timereg >> 0); 112 tm->tm_sec = bcd2bin(timereg >> 0);
113 tm->tm_min = bcd2bin(timereg >> 8); 113 tm->tm_min = bcd2bin(timereg >> 8);
114 tm->tm_hour = bcd2bin(timereg >> 16); 114 tm->tm_hour = bcd2bin(timereg >> 16);
115
116 return rtc_valid_tm(tm);
117} 115}
118 116
119static void nuc900_rtc_bin2bcd(struct device *dev, struct rtc_time *settm, 117static void nuc900_rtc_bin2bcd(struct device *dev, struct rtc_time *settm,
@@ -156,7 +154,9 @@ static int nuc900_rtc_read_time(struct device *dev, struct rtc_time *tm)
156 timeval = __raw_readl(rtc->rtc_reg + REG_RTC_TLR); 154 timeval = __raw_readl(rtc->rtc_reg + REG_RTC_TLR);
157 clrval = __raw_readl(rtc->rtc_reg + REG_RTC_CLR); 155 clrval = __raw_readl(rtc->rtc_reg + REG_RTC_CLR);
158 156
159 return nuc900_rtc_bcd2bin(timeval, clrval, tm); 157 nuc900_rtc_bcd2bin(timeval, clrval, tm);
158
159 return 0;
160} 160}
161 161
162static int nuc900_rtc_set_time(struct device *dev, struct rtc_time *tm) 162static int nuc900_rtc_set_time(struct device *dev, struct rtc_time *tm)
@@ -189,7 +189,9 @@ static int nuc900_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
189 timeval = __raw_readl(rtc->rtc_reg + REG_RTC_TAR); 189 timeval = __raw_readl(rtc->rtc_reg + REG_RTC_TAR);
190 carval = __raw_readl(rtc->rtc_reg + REG_RTC_CAR); 190 carval = __raw_readl(rtc->rtc_reg + REG_RTC_CAR);
191 191
192 return nuc900_rtc_bcd2bin(timeval, carval, &alrm->time); 192 nuc900_rtc_bcd2bin(timeval, carval, &alrm->time);
193
194 return rtc_valid_tm(&alrm->time);
193} 195}
194 196
195static int nuc900_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) 197static int nuc900_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 09ef802d6e54..39086398833e 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -273,9 +273,6 @@ static int omap_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
273/* this hardware doesn't support "don't care" alarm fields */ 273/* this hardware doesn't support "don't care" alarm fields */
274static int tm2bcd(struct rtc_time *tm) 274static int tm2bcd(struct rtc_time *tm)
275{ 275{
276 if (rtc_valid_tm(tm) != 0)
277 return -EINVAL;
278
279 tm->tm_sec = bin2bcd(tm->tm_sec); 276 tm->tm_sec = bin2bcd(tm->tm_sec);
280 tm->tm_min = bin2bcd(tm->tm_min); 277 tm->tm_min = bin2bcd(tm->tm_min);
281 tm->tm_hour = bin2bcd(tm->tm_hour); 278 tm->tm_hour = bin2bcd(tm->tm_hour);
@@ -850,7 +847,6 @@ static int omap_rtc_probe(struct platform_device *pdev)
850 847
851 rtc->rtc->ops = &omap_rtc_ops; 848 rtc->rtc->ops = &omap_rtc_ops;
852 omap_rtc_nvmem_config.priv = rtc; 849 omap_rtc_nvmem_config.priv = rtc;
853 rtc->rtc->nvmem_config = &omap_rtc_nvmem_config;
854 850
855 /* handle periodic and alarm irqs */ 851 /* handle periodic and alarm irqs */
856 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0, 852 ret = devm_request_irq(&pdev->dev, rtc->irq_timer, rtc_irq, 0,
@@ -886,6 +882,8 @@ static int omap_rtc_probe(struct platform_device *pdev)
886 if (ret) 882 if (ret)
887 goto err; 883 goto err;
888 884
885 rtc_nvmem_register(rtc->rtc, &omap_rtc_nvmem_config);
886
889 return 0; 887 return 0;
890 888
891err: 889err:
diff --git a/drivers/rtc/rtc-pcap.c b/drivers/rtc/rtc-pcap.c
index c4433240d8a9..c05f524ba9af 100644
--- a/drivers/rtc/rtc-pcap.c
+++ b/drivers/rtc/rtc-pcap.c
@@ -95,7 +95,7 @@ static int pcap_rtc_read_time(struct device *dev, struct rtc_time *tm)
95 95
96 rtc_time_to_tm(secs, tm); 96 rtc_time_to_tm(secs, tm);
97 97
98 return rtc_valid_tm(tm); 98 return 0;
99} 99}
100 100
101static int pcap_rtc_set_mmss(struct device *dev, unsigned long secs) 101static int pcap_rtc_set_mmss(struct device *dev, unsigned long secs)
diff --git a/drivers/rtc/rtc-pcf2123.c b/drivers/rtc/rtc-pcf2123.c
index 8895f77726e8..e5222c5d8223 100644
--- a/drivers/rtc/rtc-pcf2123.c
+++ b/drivers/rtc/rtc-pcf2123.c
@@ -289,7 +289,7 @@ static int pcf2123_rtc_read_time(struct device *dev, struct rtc_time *tm)
289 tm->tm_sec, tm->tm_min, tm->tm_hour, 289 tm->tm_sec, tm->tm_min, tm->tm_hour,
290 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 290 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
291 291
292 return rtc_valid_tm(tm); 292 return 0;
293} 293}
294 294
295static int pcf2123_rtc_set_time(struct device *dev, struct rtc_time *tm) 295static int pcf2123_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
index f33447c5db85..e83be1852c2f 100644
--- a/drivers/rtc/rtc-pcf2127.c
+++ b/drivers/rtc/rtc-pcf2127.c
@@ -111,7 +111,7 @@ static int pcf2127_rtc_read_time(struct device *dev, struct rtc_time *tm)
111 tm->tm_sec, tm->tm_min, tm->tm_hour, 111 tm->tm_sec, tm->tm_min, tm->tm_hour,
112 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 112 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
113 113
114 return rtc_valid_tm(tm); 114 return 0;
115} 115}
116 116
117static int pcf2127_rtc_set_time(struct device *dev, struct rtc_time *tm) 117static int pcf2127_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-pcf50633.c b/drivers/rtc/rtc-pcf50633.c
index 00c31c91b245..ef72b0c389d7 100644
--- a/drivers/rtc/rtc-pcf50633.c
+++ b/drivers/rtc/rtc-pcf50633.c
@@ -135,7 +135,7 @@ static int pcf50633_rtc_read_time(struct device *dev, struct rtc_time *tm)
135 tm->tm_mday, tm->tm_mon, tm->tm_year, 135 tm->tm_mday, tm->tm_mon, tm->tm_year,
136 tm->tm_hour, tm->tm_min, tm->tm_sec); 136 tm->tm_hour, tm->tm_min, tm->tm_sec);
137 137
138 return rtc_valid_tm(tm); 138 return 0;
139} 139}
140 140
141static int pcf50633_rtc_set_time(struct device *dev, struct rtc_time *tm) 141static int pcf50633_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-pcf85063.c b/drivers/rtc/rtc-pcf85063.c
index a06dff994c83..49bcbb3d4a69 100644
--- a/drivers/rtc/rtc-pcf85063.c
+++ b/drivers/rtc/rtc-pcf85063.c
@@ -70,7 +70,7 @@ static int pcf85063_start_clock(struct i2c_client *client, u8 ctrl1)
70 s32 ret; 70 s32 ret;
71 71
72 /* start the clock */ 72 /* start the clock */
73 ctrl1 &= PCF85063_REG_CTRL1_STOP; 73 ctrl1 &= ~PCF85063_REG_CTRL1_STOP;
74 74
75 ret = i2c_smbus_write_byte_data(client, PCF85063_REG_CTRL1, ctrl1); 75 ret = i2c_smbus_write_byte_data(client, PCF85063_REG_CTRL1, ctrl1);
76 if (ret < 0) { 76 if (ret < 0) {
@@ -81,8 +81,9 @@ static int pcf85063_start_clock(struct i2c_client *client, u8 ctrl1)
81 return 0; 81 return 0;
82} 82}
83 83
84static int pcf85063_get_datetime(struct i2c_client *client, struct rtc_time *tm) 84static int pcf85063_rtc_read_time(struct device *dev, struct rtc_time *tm)
85{ 85{
86 struct i2c_client *client = to_i2c_client(dev);
86 int rc; 87 int rc;
87 u8 regs[7]; 88 u8 regs[7];
88 89
@@ -114,11 +115,12 @@ static int pcf85063_get_datetime(struct i2c_client *client, struct rtc_time *tm)
114 tm->tm_year = bcd2bin(regs[6]); 115 tm->tm_year = bcd2bin(regs[6]);
115 tm->tm_year += 100; 116 tm->tm_year += 100;
116 117
117 return rtc_valid_tm(tm); 118 return 0;
118} 119}
119 120
120static int pcf85063_set_datetime(struct i2c_client *client, struct rtc_time *tm) 121static int pcf85063_rtc_set_time(struct device *dev, struct rtc_time *tm)
121{ 122{
123 struct i2c_client *client = to_i2c_client(dev);
122 int rc; 124 int rc;
123 u8 regs[7]; 125 u8 regs[7];
124 u8 ctrl1; 126 u8 ctrl1;
@@ -172,16 +174,6 @@ static int pcf85063_set_datetime(struct i2c_client *client, struct rtc_time *tm)
172 return 0; 174 return 0;
173} 175}
174 176
175static int pcf85063_rtc_read_time(struct device *dev, struct rtc_time *tm)
176{
177 return pcf85063_get_datetime(to_i2c_client(dev), tm);
178}
179
180static int pcf85063_rtc_set_time(struct device *dev, struct rtc_time *tm)
181{
182 return pcf85063_set_datetime(to_i2c_client(dev), tm);
183}
184
185static const struct rtc_class_ops pcf85063_rtc_ops = { 177static const struct rtc_class_ops pcf85063_rtc_ops = {
186 .read_time = pcf85063_rtc_read_time, 178 .read_time = pcf85063_rtc_read_time,
187 .set_time = pcf85063_rtc_set_time 179 .set_time = pcf85063_rtc_set_time
diff --git a/drivers/rtc/rtc-pcf8523.c b/drivers/rtc/rtc-pcf8523.c
index c312af0db729..453615f8ac9a 100644
--- a/drivers/rtc/rtc-pcf8523.c
+++ b/drivers/rtc/rtc-pcf8523.c
@@ -192,7 +192,7 @@ static int pcf8523_rtc_read_time(struct device *dev, struct rtc_time *tm)
192 tm->tm_mon = bcd2bin(regs[5] & 0x1f) - 1; 192 tm->tm_mon = bcd2bin(regs[5] & 0x1f) - 1;
193 tm->tm_year = bcd2bin(regs[6]) + 100; 193 tm->tm_year = bcd2bin(regs[6]) + 100;
194 194
195 return rtc_valid_tm(tm); 195 return 0;
196} 196}
197 197
198static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm) 198static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-pcf85363.c b/drivers/rtc/rtc-pcf85363.c
index ea04e9f0930b..c04a1edcd571 100644
--- a/drivers/rtc/rtc-pcf85363.c
+++ b/drivers/rtc/rtc-pcf85363.c
@@ -73,6 +73,43 @@
73#define CTRL_RESETS 0x2f 73#define CTRL_RESETS 0x2f
74#define CTRL_RAM 0x40 74#define CTRL_RAM 0x40
75 75
76#define ALRM_SEC_A1E BIT(0)
77#define ALRM_MIN_A1E BIT(1)
78#define ALRM_HR_A1E BIT(2)
79#define ALRM_DAY_A1E BIT(3)
80#define ALRM_MON_A1E BIT(4)
81#define ALRM_MIN_A2E BIT(5)
82#define ALRM_HR_A2E BIT(6)
83#define ALRM_DAY_A2E BIT(7)
84
85#define INT_WDIE BIT(0)
86#define INT_BSIE BIT(1)
87#define INT_TSRIE BIT(2)
88#define INT_A2IE BIT(3)
89#define INT_A1IE BIT(4)
90#define INT_OIE BIT(5)
91#define INT_PIE BIT(6)
92#define INT_ILP BIT(7)
93
94#define FLAGS_TSR1F BIT(0)
95#define FLAGS_TSR2F BIT(1)
96#define FLAGS_TSR3F BIT(2)
97#define FLAGS_BSF BIT(3)
98#define FLAGS_WDF BIT(4)
99#define FLAGS_A1F BIT(5)
100#define FLAGS_A2F BIT(6)
101#define FLAGS_PIF BIT(7)
102
103#define PIN_IO_INTAPM GENMASK(1, 0)
104#define PIN_IO_INTA_CLK 0
105#define PIN_IO_INTA_BAT 1
106#define PIN_IO_INTA_OUT 2
107#define PIN_IO_INTA_HIZ 3
108
109#define STOP_EN_STOP BIT(0)
110
111#define RESET_CPR 0xa4
112
76#define NVRAM_SIZE 0x40 113#define NVRAM_SIZE 0x40
77 114
78static struct i2c_driver pcf85363_driver; 115static struct i2c_driver pcf85363_driver;
@@ -80,7 +117,6 @@ static struct i2c_driver pcf85363_driver;
80struct pcf85363 { 117struct pcf85363 {
81 struct device *dev; 118 struct device *dev;
82 struct rtc_device *rtc; 119 struct rtc_device *rtc;
83 struct nvmem_config nvmem_cfg;
84 struct regmap *regmap; 120 struct regmap *regmap;
85}; 121};
86 122
@@ -116,8 +152,12 @@ static int pcf85363_rtc_read_time(struct device *dev, struct rtc_time *tm)
116static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm) 152static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm)
117{ 153{
118 struct pcf85363 *pcf85363 = dev_get_drvdata(dev); 154 struct pcf85363 *pcf85363 = dev_get_drvdata(dev);
119 unsigned char buf[DT_YEARS + 1]; 155 unsigned char tmp[11];
120 int len = sizeof(buf); 156 unsigned char *buf = &tmp[2];
157 int ret;
158
159 tmp[0] = STOP_EN_STOP;
160 tmp[1] = RESET_CPR;
121 161
122 buf[DT_100THS] = 0; 162 buf[DT_100THS] = 0;
123 buf[DT_SECS] = bin2bcd(tm->tm_sec); 163 buf[DT_SECS] = bin2bcd(tm->tm_sec);
@@ -128,8 +168,116 @@ static int pcf85363_rtc_set_time(struct device *dev, struct rtc_time *tm)
128 buf[DT_MONTHS] = bin2bcd(tm->tm_mon + 1); 168 buf[DT_MONTHS] = bin2bcd(tm->tm_mon + 1);
129 buf[DT_YEARS] = bin2bcd(tm->tm_year % 100); 169 buf[DT_YEARS] = bin2bcd(tm->tm_year % 100);
130 170
131 return regmap_bulk_write(pcf85363->regmap, DT_100THS, 171 ret = regmap_bulk_write(pcf85363->regmap, CTRL_STOP_EN,
132 buf, len); 172 tmp, sizeof(tmp));
173 if (ret)
174 return ret;
175
176 return regmap_write(pcf85363->regmap, CTRL_STOP_EN, 0);
177}
178
179static int pcf85363_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
180{
181 struct pcf85363 *pcf85363 = dev_get_drvdata(dev);
182 unsigned char buf[DT_MONTH_ALM1 - DT_SECOND_ALM1 + 1];
183 unsigned int val;
184 int ret;
185
186 ret = regmap_bulk_read(pcf85363->regmap, DT_SECOND_ALM1, buf,
187 sizeof(buf));
188 if (ret)
189 return ret;
190
191 alrm->time.tm_sec = bcd2bin(buf[0]);
192 alrm->time.tm_min = bcd2bin(buf[1]);
193 alrm->time.tm_hour = bcd2bin(buf[2]);
194 alrm->time.tm_mday = bcd2bin(buf[3]);
195 alrm->time.tm_mon = bcd2bin(buf[4]) - 1;
196
197 ret = regmap_read(pcf85363->regmap, CTRL_INTA_EN, &val);
198 if (ret)
199 return ret;
200
201 alrm->enabled = !!(val & INT_A1IE);
202
203 return 0;
204}
205
206static int _pcf85363_rtc_alarm_irq_enable(struct pcf85363 *pcf85363, unsigned
207 int enabled)
208{
209 unsigned int alarm_flags = ALRM_SEC_A1E | ALRM_MIN_A1E | ALRM_HR_A1E |
210 ALRM_DAY_A1E | ALRM_MON_A1E;
211 int ret;
212
213 ret = regmap_update_bits(pcf85363->regmap, DT_ALARM_EN, alarm_flags,
214 enabled ? alarm_flags : 0);
215 if (ret)
216 return ret;
217
218 ret = regmap_update_bits(pcf85363->regmap, CTRL_INTA_EN,
219 INT_A1IE, enabled ? INT_A1IE : 0);
220
221 if (ret || enabled)
222 return ret;
223
224 /* clear current flags */
225 return regmap_update_bits(pcf85363->regmap, CTRL_FLAGS, FLAGS_A1F, 0);
226}
227
228static int pcf85363_rtc_alarm_irq_enable(struct device *dev,
229 unsigned int enabled)
230{
231 struct pcf85363 *pcf85363 = dev_get_drvdata(dev);
232
233 return _pcf85363_rtc_alarm_irq_enable(pcf85363, enabled);
234}
235
236static int pcf85363_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
237{
238 struct pcf85363 *pcf85363 = dev_get_drvdata(dev);
239 unsigned char buf[DT_MONTH_ALM1 - DT_SECOND_ALM1 + 1];
240 int ret;
241
242 buf[0] = bin2bcd(alrm->time.tm_sec);
243 buf[1] = bin2bcd(alrm->time.tm_min);
244 buf[2] = bin2bcd(alrm->time.tm_hour);
245 buf[3] = bin2bcd(alrm->time.tm_mday);
246 buf[4] = bin2bcd(alrm->time.tm_mon + 1);
247
248 /*
249 * Disable the alarm interrupt before changing the value to avoid
250 * spurious interrupts
251 */
252 ret = _pcf85363_rtc_alarm_irq_enable(pcf85363, 0);
253 if (ret)
254 return ret;
255
256 ret = regmap_bulk_write(pcf85363->regmap, DT_SECOND_ALM1, buf,
257 sizeof(buf));
258 if (ret)
259 return ret;
260
261 return _pcf85363_rtc_alarm_irq_enable(pcf85363, alrm->enabled);
262}
263
264static irqreturn_t pcf85363_rtc_handle_irq(int irq, void *dev_id)
265{
266 struct pcf85363 *pcf85363 = i2c_get_clientdata(dev_id);
267 unsigned int flags;
268 int err;
269
270 err = regmap_read(pcf85363->regmap, CTRL_FLAGS, &flags);
271 if (err)
272 return IRQ_NONE;
273
274 if (flags & FLAGS_A1F) {
275 rtc_update_irq(pcf85363->rtc, 1, RTC_IRQF | RTC_AF);
276 regmap_update_bits(pcf85363->regmap, CTRL_FLAGS, FLAGS_A1F, 0);
277 return IRQ_HANDLED;
278 }
279
280 return IRQ_NONE;
133} 281}
134 282
135static const struct rtc_class_ops rtc_ops = { 283static const struct rtc_class_ops rtc_ops = {
@@ -137,6 +285,14 @@ static const struct rtc_class_ops rtc_ops = {
137 .set_time = pcf85363_rtc_set_time, 285 .set_time = pcf85363_rtc_set_time,
138}; 286};
139 287
288static const struct rtc_class_ops rtc_ops_alarm = {
289 .read_time = pcf85363_rtc_read_time,
290 .set_time = pcf85363_rtc_set_time,
291 .read_alarm = pcf85363_rtc_read_alarm,
292 .set_alarm = pcf85363_rtc_set_alarm,
293 .alarm_irq_enable = pcf85363_rtc_alarm_irq_enable,
294};
295
140static int pcf85363_nvram_read(void *priv, unsigned int offset, void *val, 296static int pcf85363_nvram_read(void *priv, unsigned int offset, void *val,
141 size_t bytes) 297 size_t bytes)
142{ 298{
@@ -158,12 +314,22 @@ static int pcf85363_nvram_write(void *priv, unsigned int offset, void *val,
158static const struct regmap_config regmap_config = { 314static const struct regmap_config regmap_config = {
159 .reg_bits = 8, 315 .reg_bits = 8,
160 .val_bits = 8, 316 .val_bits = 8,
317 .max_register = 0x7f,
161}; 318};
162 319
163static int pcf85363_probe(struct i2c_client *client, 320static int pcf85363_probe(struct i2c_client *client,
164 const struct i2c_device_id *id) 321 const struct i2c_device_id *id)
165{ 322{
166 struct pcf85363 *pcf85363; 323 struct pcf85363 *pcf85363;
324 struct nvmem_config nvmem_cfg = {
325 .name = "pcf85363-",
326 .word_size = 1,
327 .stride = 1,
328 .size = NVRAM_SIZE,
329 .reg_read = pcf85363_nvram_read,
330 .reg_write = pcf85363_nvram_write,
331 };
332 int ret;
167 333
168 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) 334 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
169 return -ENODEV; 335 return -ENODEV;
@@ -186,17 +352,28 @@ static int pcf85363_probe(struct i2c_client *client,
186 if (IS_ERR(pcf85363->rtc)) 352 if (IS_ERR(pcf85363->rtc))
187 return PTR_ERR(pcf85363->rtc); 353 return PTR_ERR(pcf85363->rtc);
188 354
189 pcf85363->nvmem_cfg.name = "pcf85363-";
190 pcf85363->nvmem_cfg.word_size = 1;
191 pcf85363->nvmem_cfg.stride = 1;
192 pcf85363->nvmem_cfg.size = NVRAM_SIZE;
193 pcf85363->nvmem_cfg.reg_read = pcf85363_nvram_read;
194 pcf85363->nvmem_cfg.reg_write = pcf85363_nvram_write;
195 pcf85363->nvmem_cfg.priv = pcf85363;
196 pcf85363->rtc->nvmem_config = &pcf85363->nvmem_cfg;
197 pcf85363->rtc->ops = &rtc_ops; 355 pcf85363->rtc->ops = &rtc_ops;
198 356
199 return rtc_register_device(pcf85363->rtc); 357 if (client->irq > 0) {
358 regmap_write(pcf85363->regmap, CTRL_FLAGS, 0);
359 regmap_update_bits(pcf85363->regmap, CTRL_PIN_IO,
360 PIN_IO_INTA_OUT, PIN_IO_INTAPM);
361 ret = devm_request_threaded_irq(pcf85363->dev, client->irq,
362 NULL, pcf85363_rtc_handle_irq,
363 IRQF_TRIGGER_LOW | IRQF_ONESHOT,
364 "pcf85363", client);
365 if (ret)
366 dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
367 else
368 pcf85363->rtc->ops = &rtc_ops_alarm;
369 }
370
371 ret = rtc_register_device(pcf85363->rtc);
372
373 nvmem_cfg.priv = pcf85363;
374 rtc_nvmem_register(pcf85363->rtc, &nvmem_cfg);
375
376 return ret;
200} 377}
201 378
202static const struct of_device_id dev_ids[] = { 379static const struct of_device_id dev_ids[] = {
diff --git a/drivers/rtc/rtc-pic32.c b/drivers/rtc/rtc-pic32.c
index 5cfb6df5c430..3c08eab4f1a8 100644
--- a/drivers/rtc/rtc-pic32.c
+++ b/drivers/rtc/rtc-pic32.c
@@ -175,7 +175,7 @@ static int pic32_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
175 rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec); 175 rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec);
176 176
177 clk_disable(pdata->clk); 177 clk_disable(pdata->clk);
178 return rtc_valid_tm(rtc_tm); 178 return 0;
179} 179}
180 180
181static int pic32_rtc_settime(struct device *dev, struct rtc_time *tm) 181static int pic32_rtc_settime(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-pm8xxx.c b/drivers/rtc/rtc-pm8xxx.c
index fac835530671..29358a045925 100644
--- a/drivers/rtc/rtc-pm8xxx.c
+++ b/drivers/rtc/rtc-pm8xxx.c
@@ -74,16 +74,18 @@ struct pm8xxx_rtc {
74/* 74/*
75 * Steps to write the RTC registers. 75 * Steps to write the RTC registers.
76 * 1. Disable alarm if enabled. 76 * 1. Disable alarm if enabled.
77 * 2. Write 0x00 to LSB. 77 * 2. Disable rtc if enabled.
78 * 3. Write Byte[1], Byte[2], Byte[3] then Byte[0]. 78 * 3. Write 0x00 to LSB.
79 * 4. Enable alarm if disabled in step 1. 79 * 4. Write Byte[1], Byte[2], Byte[3] then Byte[0].
80 * 5. Enable rtc if disabled in step 2.
81 * 6. Enable alarm if disabled in step 1.
80 */ 82 */
81static int pm8xxx_rtc_set_time(struct device *dev, struct rtc_time *tm) 83static int pm8xxx_rtc_set_time(struct device *dev, struct rtc_time *tm)
82{ 84{
83 int rc, i; 85 int rc, i;
84 unsigned long secs, irq_flags; 86 unsigned long secs, irq_flags;
85 u8 value[NUM_8_BIT_RTC_REGS], alarm_enabled = 0; 87 u8 value[NUM_8_BIT_RTC_REGS], alarm_enabled = 0, rtc_disabled = 0;
86 unsigned int ctrl_reg; 88 unsigned int ctrl_reg, rtc_ctrl_reg;
87 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev); 89 struct pm8xxx_rtc *rtc_dd = dev_get_drvdata(dev);
88 const struct pm8xxx_rtc_regs *regs = rtc_dd->regs; 90 const struct pm8xxx_rtc_regs *regs = rtc_dd->regs;
89 91
@@ -92,23 +94,38 @@ static int pm8xxx_rtc_set_time(struct device *dev, struct rtc_time *tm)
92 94
93 rtc_tm_to_time(tm, &secs); 95 rtc_tm_to_time(tm, &secs);
94 96
97 dev_dbg(dev, "Seconds value to be written to RTC = %lu\n", secs);
98
95 for (i = 0; i < NUM_8_BIT_RTC_REGS; i++) { 99 for (i = 0; i < NUM_8_BIT_RTC_REGS; i++) {
96 value[i] = secs & 0xFF; 100 value[i] = secs & 0xFF;
97 secs >>= 8; 101 secs >>= 8;
98 } 102 }
99 103
100 dev_dbg(dev, "Seconds value to be written to RTC = %lu\n", secs);
101
102 spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags); 104 spin_lock_irqsave(&rtc_dd->ctrl_reg_lock, irq_flags);
103 105
104 rc = regmap_read(rtc_dd->regmap, regs->ctrl, &ctrl_reg); 106 rc = regmap_read(rtc_dd->regmap, regs->alarm_ctrl, &ctrl_reg);
105 if (rc) 107 if (rc)
106 goto rtc_rw_fail; 108 goto rtc_rw_fail;
107 109
108 if (ctrl_reg & regs->alarm_en) { 110 if (ctrl_reg & regs->alarm_en) {
109 alarm_enabled = 1; 111 alarm_enabled = 1;
110 ctrl_reg &= ~regs->alarm_en; 112 ctrl_reg &= ~regs->alarm_en;
111 rc = regmap_write(rtc_dd->regmap, regs->ctrl, ctrl_reg); 113 rc = regmap_write(rtc_dd->regmap, regs->alarm_ctrl, ctrl_reg);
114 if (rc) {
115 dev_err(dev, "Write to RTC Alarm control register failed\n");
116 goto rtc_rw_fail;
117 }
118 }
119
120 /* Disable RTC H/w before writing on RTC register */
121 rc = regmap_read(rtc_dd->regmap, regs->ctrl, &rtc_ctrl_reg);
122 if (rc)
123 goto rtc_rw_fail;
124
125 if (rtc_ctrl_reg & PM8xxx_RTC_ENABLE) {
126 rtc_disabled = 1;
127 rtc_ctrl_reg &= ~PM8xxx_RTC_ENABLE;
128 rc = regmap_write(rtc_dd->regmap, regs->ctrl, rtc_ctrl_reg);
112 if (rc) { 129 if (rc) {
113 dev_err(dev, "Write to RTC control register failed\n"); 130 dev_err(dev, "Write to RTC control register failed\n");
114 goto rtc_rw_fail; 131 goto rtc_rw_fail;
@@ -137,11 +154,21 @@ static int pm8xxx_rtc_set_time(struct device *dev, struct rtc_time *tm)
137 goto rtc_rw_fail; 154 goto rtc_rw_fail;
138 } 155 }
139 156
157 /* Enable RTC H/w after writing on RTC register */
158 if (rtc_disabled) {
159 rtc_ctrl_reg |= PM8xxx_RTC_ENABLE;
160 rc = regmap_write(rtc_dd->regmap, regs->ctrl, rtc_ctrl_reg);
161 if (rc) {
162 dev_err(dev, "Write to RTC control register failed\n");
163 goto rtc_rw_fail;
164 }
165 }
166
140 if (alarm_enabled) { 167 if (alarm_enabled) {
141 ctrl_reg |= regs->alarm_en; 168 ctrl_reg |= regs->alarm_en;
142 rc = regmap_write(rtc_dd->regmap, regs->ctrl, ctrl_reg); 169 rc = regmap_write(rtc_dd->regmap, regs->alarm_ctrl, ctrl_reg);
143 if (rc) { 170 if (rc) {
144 dev_err(dev, "Write to RTC control register failed\n"); 171 dev_err(dev, "Write to RTC Alarm control register failed\n");
145 goto rtc_rw_fail; 172 goto rtc_rw_fail;
146 } 173 }
147 } 174 }
@@ -190,12 +217,6 @@ static int pm8xxx_rtc_read_time(struct device *dev, struct rtc_time *tm)
190 217
191 rtc_time_to_tm(secs, tm); 218 rtc_time_to_tm(secs, tm);
192 219
193 rc = rtc_valid_tm(tm);
194 if (rc < 0) {
195 dev_err(dev, "Invalid time read from RTC\n");
196 return rc;
197 }
198
199 dev_dbg(dev, "secs = %lu, h:m:s == %d:%d:%d, d/m/y = %d/%d/%d\n", 220 dev_dbg(dev, "secs = %lu, h:m:s == %d:%d:%d, d/m/y = %d/%d/%d\n",
200 secs, tm->tm_hour, tm->tm_min, tm->tm_sec, 221 secs, tm->tm_hour, tm->tm_min, tm->tm_sec,
201 tm->tm_mday, tm->tm_mon, tm->tm_year); 222 tm->tm_mday, tm->tm_mon, tm->tm_year);
diff --git a/drivers/rtc/rtc-ps3.c b/drivers/rtc/rtc-ps3.c
index 6a8f5d758eac..347288bff438 100644
--- a/drivers/rtc/rtc-ps3.c
+++ b/drivers/rtc/rtc-ps3.c
@@ -41,7 +41,7 @@ static u64 read_rtc(void)
41static int ps3_get_time(struct device *dev, struct rtc_time *tm) 41static int ps3_get_time(struct device *dev, struct rtc_time *tm)
42{ 42{
43 rtc_time_to_tm(read_rtc() + ps3_os_area_get_rtc_diff(), tm); 43 rtc_time_to_tm(read_rtc() + ps3_os_area_get_rtc_diff(), tm);
44 return rtc_valid_tm(tm); 44 return 0;
45} 45}
46 46
47static int ps3_set_time(struct device *dev, struct rtc_time *tm) 47static int ps3_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-r7301.c b/drivers/rtc/rtc-r7301.c
index 500e8c8a2605..169704b2ce13 100644
--- a/drivers/rtc/rtc-r7301.c
+++ b/drivers/rtc/rtc-r7301.c
@@ -224,7 +224,7 @@ static int rtc7301_read_time(struct device *dev, struct rtc_time *tm)
224 224
225 spin_unlock_irqrestore(&priv->lock, flags); 225 spin_unlock_irqrestore(&priv->lock, flags);
226 226
227 return err ? err : rtc_valid_tm(tm); 227 return err;
228} 228}
229 229
230static int rtc7301_set_time(struct device *dev, struct rtc_time *tm) 230static int rtc7301_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-r9701.c b/drivers/rtc/rtc-r9701.c
index b6c5eb97051c..a39ccd1cf6e8 100644
--- a/drivers/rtc/rtc-r9701.c
+++ b/drivers/rtc/rtc-r9701.c
@@ -92,7 +92,7 @@ static int r9701_get_datetime(struct device *dev, struct rtc_time *dt)
92 * according to the data sheet. make sure they are valid. 92 * according to the data sheet. make sure they are valid.
93 */ 93 */
94 94
95 return rtc_valid_tm(dt); 95 return 0;
96} 96}
97 97
98static int r9701_set_datetime(struct device *dev, struct rtc_time *dt) 98static int r9701_set_datetime(struct device *dev, struct rtc_time *dt)
diff --git a/drivers/rtc/rtc-rk808.c b/drivers/rtc/rtc-rk808.c
index 35c9aada07c8..739c0d42e835 100644
--- a/drivers/rtc/rtc-rk808.c
+++ b/drivers/rtc/rtc-rk808.c
@@ -375,7 +375,6 @@ static int rk808_rtc_probe(struct platform_device *pdev)
375{ 375{
376 struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent); 376 struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent);
377 struct rk808_rtc *rk808_rtc; 377 struct rk808_rtc *rk808_rtc;
378 struct rtc_time tm;
379 int ret; 378 int ret;
380 379
381 rk808_rtc = devm_kzalloc(&pdev->dev, sizeof(*rk808_rtc), GFP_KERNEL); 380 rk808_rtc = devm_kzalloc(&pdev->dev, sizeof(*rk808_rtc), GFP_KERNEL);
@@ -404,24 +403,13 @@ static int rk808_rtc_probe(struct platform_device *pdev)
404 return ret; 403 return ret;
405 } 404 }
406 405
407 /* set init time */
408 ret = rk808_rtc_readtime(&pdev->dev, &tm);
409 if (ret) {
410 dev_err(&pdev->dev, "Failed to read RTC time\n");
411 return ret;
412 }
413 ret = rtc_valid_tm(&tm);
414 if (ret)
415 dev_warn(&pdev->dev, "invalid date/time\n");
416
417 device_init_wakeup(&pdev->dev, 1); 406 device_init_wakeup(&pdev->dev, 1);
418 407
419 rk808_rtc->rtc = devm_rtc_device_register(&pdev->dev, "rk808-rtc", 408 rk808_rtc->rtc = devm_rtc_allocate_device(&pdev->dev);
420 &rk808_rtc_ops, THIS_MODULE); 409 if (IS_ERR(rk808_rtc->rtc))
421 if (IS_ERR(rk808_rtc->rtc)) { 410 return PTR_ERR(rk808_rtc->rtc);
422 ret = PTR_ERR(rk808_rtc->rtc); 411
423 return ret; 412 rk808_rtc->rtc->ops = &rk808_rtc_ops;
424 }
425 413
426 rk808_rtc->irq = platform_get_irq(pdev, 0); 414 rk808_rtc->irq = platform_get_irq(pdev, 0);
427 if (rk808_rtc->irq < 0) { 415 if (rk808_rtc->irq < 0) {
@@ -438,9 +426,10 @@ static int rk808_rtc_probe(struct platform_device *pdev)
438 if (ret) { 426 if (ret) {
439 dev_err(&pdev->dev, "Failed to request alarm IRQ %d: %d\n", 427 dev_err(&pdev->dev, "Failed to request alarm IRQ %d: %d\n",
440 rk808_rtc->irq, ret); 428 rk808_rtc->irq, ret);
429 return ret;
441 } 430 }
442 431
443 return ret; 432 return rtc_register_device(rk808_rtc->rtc);
444} 433}
445 434
446static struct platform_driver rk808_rtc_driver = { 435static struct platform_driver rk808_rtc_driver = {
diff --git a/drivers/rtc/rtc-rp5c01.c b/drivers/rtc/rtc-rp5c01.c
index 026035373ae6..f1c160fe7d37 100644
--- a/drivers/rtc/rtc-rp5c01.c
+++ b/drivers/rtc/rtc-rp5c01.c
@@ -64,7 +64,6 @@ struct rp5c01_priv {
64 u32 __iomem *regs; 64 u32 __iomem *regs;
65 struct rtc_device *rtc; 65 struct rtc_device *rtc;
66 spinlock_t lock; /* against concurrent RTC/NVRAM access */ 66 spinlock_t lock; /* against concurrent RTC/NVRAM access */
67 struct bin_attribute nvram_attr;
68}; 67};
69 68
70static inline unsigned int rp5c01_read(struct rp5c01_priv *priv, 69static inline unsigned int rp5c01_read(struct rp5c01_priv *priv,
@@ -116,7 +115,7 @@ static int rp5c01_read_time(struct device *dev, struct rtc_time *tm)
116 rp5c01_unlock(priv); 115 rp5c01_unlock(priv);
117 spin_unlock_irq(&priv->lock); 116 spin_unlock_irq(&priv->lock);
118 117
119 return rtc_valid_tm(tm); 118 return 0;
120} 119}
121 120
122static int rp5c01_set_time(struct device *dev, struct rtc_time *tm) 121static int rp5c01_set_time(struct device *dev, struct rtc_time *tm)
@@ -160,17 +159,15 @@ static const struct rtc_class_ops rp5c01_rtc_ops = {
160 * byte is stored in BLOCK10, the low nibble in BLOCK11. 159 * byte is stored in BLOCK10, the low nibble in BLOCK11.
161 */ 160 */
162 161
163static ssize_t rp5c01_nvram_read(struct file *filp, struct kobject *kobj, 162static int rp5c01_nvram_read(void *_priv, unsigned int pos, void *val,
164 struct bin_attribute *bin_attr, 163 size_t bytes)
165 char *buf, loff_t pos, size_t size)
166{ 164{
167 struct device *dev = container_of(kobj, struct device, kobj); 165 struct rp5c01_priv *priv = _priv;
168 struct rp5c01_priv *priv = dev_get_drvdata(dev); 166 u8 *buf = val;
169 ssize_t count;
170 167
171 spin_lock_irq(&priv->lock); 168 spin_lock_irq(&priv->lock);
172 169
173 for (count = 0; count < size; count++) { 170 for (; bytes; bytes--) {
174 u8 data; 171 u8 data;
175 172
176 rp5c01_write(priv, 173 rp5c01_write(priv,
@@ -187,20 +184,18 @@ static ssize_t rp5c01_nvram_read(struct file *filp, struct kobject *kobj,
187 } 184 }
188 185
189 spin_unlock_irq(&priv->lock); 186 spin_unlock_irq(&priv->lock);
190 return count; 187 return 0;
191} 188}
192 189
193static ssize_t rp5c01_nvram_write(struct file *filp, struct kobject *kobj, 190static int rp5c01_nvram_write(void *_priv, unsigned int pos, void *val,
194 struct bin_attribute *bin_attr, 191 size_t bytes)
195 char *buf, loff_t pos, size_t size)
196{ 192{
197 struct device *dev = container_of(kobj, struct device, kobj); 193 struct rp5c01_priv *priv = _priv;
198 struct rp5c01_priv *priv = dev_get_drvdata(dev); 194 u8 *buf = val;
199 ssize_t count;
200 195
201 spin_lock_irq(&priv->lock); 196 spin_lock_irq(&priv->lock);
202 197
203 for (count = 0; count < size; count++) { 198 for (; bytes; bytes--) {
204 u8 data = *buf++; 199 u8 data = *buf++;
205 200
206 rp5c01_write(priv, 201 rp5c01_write(priv,
@@ -216,7 +211,7 @@ static ssize_t rp5c01_nvram_write(struct file *filp, struct kobject *kobj,
216 } 211 }
217 212
218 spin_unlock_irq(&priv->lock); 213 spin_unlock_irq(&priv->lock);
219 return count; 214 return 0;
220} 215}
221 216
222static int __init rp5c01_rtc_probe(struct platform_device *dev) 217static int __init rp5c01_rtc_probe(struct platform_device *dev)
@@ -225,6 +220,14 @@ static int __init rp5c01_rtc_probe(struct platform_device *dev)
225 struct rp5c01_priv *priv; 220 struct rp5c01_priv *priv;
226 struct rtc_device *rtc; 221 struct rtc_device *rtc;
227 int error; 222 int error;
223 struct nvmem_config nvmem_cfg = {
224 .name = "rp5c01_nvram",
225 .word_size = 1,
226 .stride = 1,
227 .size = RP5C01_MODE,
228 .reg_read = rp5c01_nvram_read,
229 .reg_write = rp5c01_nvram_write,
230 };
228 231
229 res = platform_get_resource(dev, IORESOURCE_MEM, 0); 232 res = platform_get_resource(dev, IORESOURCE_MEM, 0);
230 if (!res) 233 if (!res)
@@ -238,43 +241,31 @@ static int __init rp5c01_rtc_probe(struct platform_device *dev)
238 if (!priv->regs) 241 if (!priv->regs)
239 return -ENOMEM; 242 return -ENOMEM;
240 243
241 sysfs_bin_attr_init(&priv->nvram_attr);
242 priv->nvram_attr.attr.name = "nvram";
243 priv->nvram_attr.attr.mode = S_IRUGO | S_IWUSR;
244 priv->nvram_attr.read = rp5c01_nvram_read;
245 priv->nvram_attr.write = rp5c01_nvram_write;
246 priv->nvram_attr.size = RP5C01_MODE;
247
248 spin_lock_init(&priv->lock); 244 spin_lock_init(&priv->lock);
249 245
250 platform_set_drvdata(dev, priv); 246 platform_set_drvdata(dev, priv);
251 247
252 rtc = devm_rtc_device_register(&dev->dev, "rtc-rp5c01", &rp5c01_rtc_ops, 248 rtc = devm_rtc_allocate_device(&dev->dev);
253 THIS_MODULE);
254 if (IS_ERR(rtc)) 249 if (IS_ERR(rtc))
255 return PTR_ERR(rtc); 250 return PTR_ERR(rtc);
251
252 rtc->ops = &rp5c01_rtc_ops;
253 rtc->nvram_old_abi = true;
254
256 priv->rtc = rtc; 255 priv->rtc = rtc;
257 256
258 error = sysfs_create_bin_file(&dev->dev.kobj, &priv->nvram_attr); 257 nvmem_cfg.priv = priv;
258 error = rtc_nvmem_register(rtc, &nvmem_cfg);
259 if (error) 259 if (error)
260 return error; 260 return error;
261 261
262 return 0; 262 return rtc_register_device(rtc);
263}
264
265static int __exit rp5c01_rtc_remove(struct platform_device *dev)
266{
267 struct rp5c01_priv *priv = platform_get_drvdata(dev);
268
269 sysfs_remove_bin_file(&dev->dev.kobj, &priv->nvram_attr);
270 return 0;
271} 263}
272 264
273static struct platform_driver rp5c01_rtc_driver = { 265static struct platform_driver rp5c01_rtc_driver = {
274 .driver = { 266 .driver = {
275 .name = "rtc-rp5c01", 267 .name = "rtc-rp5c01",
276 }, 268 },
277 .remove = __exit_p(rp5c01_rtc_remove),
278}; 269};
279 270
280module_platform_driver_probe(rp5c01_rtc_driver, rp5c01_rtc_probe); 271module_platform_driver_probe(rp5c01_rtc_driver, rp5c01_rtc_probe);
diff --git a/drivers/rtc/rtc-rs5c348.c b/drivers/rtc/rtc-rs5c348.c
index 9a306983aaba..f2de8b17e7e3 100644
--- a/drivers/rtc/rtc-rs5c348.c
+++ b/drivers/rtc/rtc-rs5c348.c
@@ -135,11 +135,6 @@ rs5c348_rtc_read_time(struct device *dev, struct rtc_time *tm)
135 tm->tm_year = bcd2bin(rxbuf[RS5C348_REG_YEAR]) + 135 tm->tm_year = bcd2bin(rxbuf[RS5C348_REG_YEAR]) +
136 ((rxbuf[RS5C348_REG_MONTH] & RS5C348_BIT_Y2K) ? 100 : 0); 136 ((rxbuf[RS5C348_REG_MONTH] & RS5C348_BIT_Y2K) ? 100 : 0);
137 137
138 if (rtc_valid_tm(tm) < 0) {
139 dev_err(&spi->dev, "retrieved date/time is not valid.\n");
140 rtc_time_to_tm(0, tm);
141 }
142
143 return 0; 138 return 0;
144} 139}
145 140
diff --git a/drivers/rtc/rtc-rs5c372.c b/drivers/rtc/rtc-rs5c372.c
index d4eff8d7131f..c5038329058c 100644
--- a/drivers/rtc/rtc-rs5c372.c
+++ b/drivers/rtc/rtc-rs5c372.c
@@ -207,8 +207,9 @@ static unsigned rs5c_hr2reg(struct rs5c372 *rs5c, unsigned hour)
207 return bin2bcd(hour); 207 return bin2bcd(hour);
208} 208}
209 209
210static int rs5c372_get_datetime(struct i2c_client *client, struct rtc_time *tm) 210static int rs5c372_rtc_read_time(struct device *dev, struct rtc_time *tm)
211{ 211{
212 struct i2c_client *client = to_i2c_client(dev);
212 struct rs5c372 *rs5c = i2c_get_clientdata(client); 213 struct rs5c372 *rs5c = i2c_get_clientdata(client);
213 int status = rs5c_get_regs(rs5c); 214 int status = rs5c_get_regs(rs5c);
214 215
@@ -234,12 +235,12 @@ static int rs5c372_get_datetime(struct i2c_client *client, struct rtc_time *tm)
234 tm->tm_sec, tm->tm_min, tm->tm_hour, 235 tm->tm_sec, tm->tm_min, tm->tm_hour,
235 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 236 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
236 237
237 /* rtc might need initialization */ 238 return 0;
238 return rtc_valid_tm(tm);
239} 239}
240 240
241static int rs5c372_set_datetime(struct i2c_client *client, struct rtc_time *tm) 241static int rs5c372_rtc_set_time(struct device *dev, struct rtc_time *tm)
242{ 242{
243 struct i2c_client *client = to_i2c_client(dev);
243 struct rs5c372 *rs5c = i2c_get_clientdata(client); 244 struct rs5c372 *rs5c = i2c_get_clientdata(client);
244 unsigned char buf[7]; 245 unsigned char buf[7];
245 int addr; 246 int addr;
@@ -305,17 +306,6 @@ static int rs5c372_get_trim(struct i2c_client *client, int *osc, int *trim)
305} 306}
306#endif 307#endif
307 308
308static int rs5c372_rtc_read_time(struct device *dev, struct rtc_time *tm)
309{
310 return rs5c372_get_datetime(to_i2c_client(dev), tm);
311}
312
313static int rs5c372_rtc_set_time(struct device *dev, struct rtc_time *tm)
314{
315 return rs5c372_set_datetime(to_i2c_client(dev), tm);
316}
317
318
319static int rs5c_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) 309static int rs5c_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
320{ 310{
321 struct i2c_client *client = to_i2c_client(dev); 311 struct i2c_client *client = to_i2c_client(dev);
@@ -581,7 +571,6 @@ static int rs5c372_probe(struct i2c_client *client,
581 int err = 0; 571 int err = 0;
582 int smbus_mode = 0; 572 int smbus_mode = 0;
583 struct rs5c372 *rs5c372; 573 struct rs5c372 *rs5c372;
584 struct rtc_time tm;
585 574
586 dev_dbg(&client->dev, "%s\n", __func__); 575 dev_dbg(&client->dev, "%s\n", __func__);
587 576
@@ -662,9 +651,6 @@ static int rs5c372_probe(struct i2c_client *client,
662 goto exit; 651 goto exit;
663 } 652 }
664 653
665 if (rs5c372_get_datetime(client, &tm) < 0)
666 dev_warn(&client->dev, "clock needs to be set\n");
667
668 dev_info(&client->dev, "%s found, %s\n", 654 dev_info(&client->dev, "%s found, %s\n",
669 ({ char *s; switch (rs5c372->type) { 655 ({ char *s; switch (rs5c372->type) {
670 case rtc_r2025sd: s = "r2025sd"; break; 656 case rtc_r2025sd: s = "r2025sd"; break;
diff --git a/drivers/rtc/rtc-rv8803.c b/drivers/rtc/rtc-rv8803.c
index aae2576741a6..29fc3d210392 100644
--- a/drivers/rtc/rtc-rv8803.c
+++ b/drivers/rtc/rtc-rv8803.c
@@ -68,7 +68,6 @@ struct rv8803_data {
68 struct mutex flags_lock; 68 struct mutex flags_lock;
69 u8 ctrl; 69 u8 ctrl;
70 enum rv8803_type type; 70 enum rv8803_type type;
71 struct nvmem_config nvmem_cfg;
72}; 71};
73 72
74static int rv8803_read_reg(const struct i2c_client *client, u8 reg) 73static int rv8803_read_reg(const struct i2c_client *client, u8 reg)
@@ -528,6 +527,15 @@ static int rv8803_probe(struct i2c_client *client,
528 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 527 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
529 struct rv8803_data *rv8803; 528 struct rv8803_data *rv8803;
530 int err, flags; 529 int err, flags;
530 struct nvmem_config nvmem_cfg = {
531 .name = "rv8803_nvram",
532 .word_size = 1,
533 .stride = 1,
534 .size = 1,
535 .reg_read = rv8803_nvram_read,
536 .reg_write = rv8803_nvram_write,
537 .priv = client,
538 };
531 539
532 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA | 540 if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
533 I2C_FUNC_SMBUS_I2C_BLOCK)) { 541 I2C_FUNC_SMBUS_I2C_BLOCK)) {
@@ -582,21 +590,6 @@ static int rv8803_probe(struct i2c_client *client,
582 } 590 }
583 } 591 }
584 592
585 rv8803->nvmem_cfg.name = "rv8803_nvram",
586 rv8803->nvmem_cfg.word_size = 1,
587 rv8803->nvmem_cfg.stride = 1,
588 rv8803->nvmem_cfg.size = 1,
589 rv8803->nvmem_cfg.reg_read = rv8803_nvram_read,
590 rv8803->nvmem_cfg.reg_write = rv8803_nvram_write,
591 rv8803->nvmem_cfg.priv = client;
592
593 rv8803->rtc->ops = &rv8803_rtc_ops;
594 rv8803->rtc->nvmem_config = &rv8803->nvmem_cfg;
595 rv8803->rtc->nvram_old_abi = true;
596 err = rtc_register_device(rv8803->rtc);
597 if (err)
598 return err;
599
600 err = rv8803_write_reg(rv8803->client, RV8803_EXT, RV8803_EXT_WADA); 593 err = rv8803_write_reg(rv8803->client, RV8803_EXT, RV8803_EXT_WADA);
601 if (err) 594 if (err)
602 return err; 595 return err;
@@ -607,6 +600,14 @@ static int rv8803_probe(struct i2c_client *client,
607 return err; 600 return err;
608 } 601 }
609 602
603 rv8803->rtc->ops = &rv8803_rtc_ops;
604 rv8803->rtc->nvram_old_abi = true;
605 err = rtc_register_device(rv8803->rtc);
606 if (err)
607 return err;
608
609 rtc_nvmem_register(rv8803->rtc, &nvmem_cfg);
610
610 rv8803->rtc->max_user_freq = 1; 611 rv8803->rtc->max_user_freq = 1;
611 612
612 return 0; 613 return 0;
diff --git a/drivers/rtc/rtc-rx4581.c b/drivers/rtc/rtc-rx4581.c
index de3fe4f8d133..c59a218bdd87 100644
--- a/drivers/rtc/rtc-rx4581.c
+++ b/drivers/rtc/rtc-rx4581.c
@@ -172,11 +172,7 @@ static int rx4581_get_datetime(struct device *dev, struct rtc_time *tm)
172 tm->tm_sec, tm->tm_min, tm->tm_hour, 172 tm->tm_sec, tm->tm_min, tm->tm_hour,
173 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 173 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
174 174
175 err = rtc_valid_tm(tm); 175 return 0;
176 if (err < 0)
177 dev_err(dev, "retrieved date/time is not valid.\n");
178
179 return err;
180} 176}
181 177
182static int rx4581_set_datetime(struct device *dev, struct rtc_time *tm) 178static int rx4581_set_datetime(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-rx6110.c b/drivers/rtc/rtc-rx6110.c
index 7c9c08eab5e5..8e322d884cc2 100644
--- a/drivers/rtc/rtc-rx6110.c
+++ b/drivers/rtc/rtc-rx6110.c
@@ -252,7 +252,7 @@ static int rx6110_get_time(struct device *dev, struct rtc_time *tm)
252 tm->tm_sec, tm->tm_min, tm->tm_hour, 252 tm->tm_sec, tm->tm_min, tm->tm_hour,
253 tm->tm_mday, tm->tm_mon, tm->tm_year); 253 tm->tm_mday, tm->tm_mon, tm->tm_year);
254 254
255 return rtc_valid_tm(tm); 255 return 0;
256} 256}
257 257
258static const struct reg_sequence rx6110_default_regs[] = { 258static const struct reg_sequence rx6110_default_regs[] = {
diff --git a/drivers/rtc/rtc-rx8010.c b/drivers/rtc/rtc-rx8010.c
index 5c5938ab3d86..7ddc22eb5b0f 100644
--- a/drivers/rtc/rtc-rx8010.c
+++ b/drivers/rtc/rtc-rx8010.c
@@ -138,7 +138,7 @@ static int rx8010_get_time(struct device *dev, struct rtc_time *dt)
138 dt->tm_year = bcd2bin(date[RX8010_YEAR - RX8010_SEC]) + 100; 138 dt->tm_year = bcd2bin(date[RX8010_YEAR - RX8010_SEC]) + 100;
139 dt->tm_wday = ffs(date[RX8010_WDAY - RX8010_SEC] & 0x7f); 139 dt->tm_wday = ffs(date[RX8010_WDAY - RX8010_SEC] & 0x7f);
140 140
141 return rtc_valid_tm(dt); 141 return 0;
142} 142}
143 143
144static int rx8010_set_time(struct device *dev, struct rtc_time *dt) 144static int rx8010_set_time(struct device *dev, struct rtc_time *dt)
diff --git a/drivers/rtc/rtc-rx8025.c b/drivers/rtc/rtc-rx8025.c
index 91857d8d2df8..41127adf5765 100644
--- a/drivers/rtc/rtc-rx8025.c
+++ b/drivers/rtc/rtc-rx8025.c
@@ -214,7 +214,7 @@ static int rx8025_get_time(struct device *dev, struct rtc_time *dt)
214 dt->tm_sec, dt->tm_min, dt->tm_hour, 214 dt->tm_sec, dt->tm_min, dt->tm_hour,
215 dt->tm_mday, dt->tm_mon, dt->tm_year); 215 dt->tm_mday, dt->tm_mon, dt->tm_year);
216 216
217 return rtc_valid_tm(dt); 217 return 0;
218} 218}
219 219
220static int rx8025_set_time(struct device *dev, struct rtc_time *dt) 220static int rx8025_set_time(struct device *dev, struct rtc_time *dt)
diff --git a/drivers/rtc/rtc-rx8581.c b/drivers/rtc/rtc-rx8581.c
index 9998d7937688..32caadf912ca 100644
--- a/drivers/rtc/rtc-rx8581.c
+++ b/drivers/rtc/rtc-rx8581.c
@@ -164,11 +164,7 @@ static int rx8581_get_datetime(struct i2c_client *client, struct rtc_time *tm)
164 tm->tm_sec, tm->tm_min, tm->tm_hour, 164 tm->tm_sec, tm->tm_min, tm->tm_hour,
165 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); 165 tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
166 166
167 err = rtc_valid_tm(tm); 167 return 0;
168 if (err < 0)
169 dev_err(&client->dev, "retrieved date/time is not valid.\n");
170
171 return err;
172} 168}
173 169
174static int rx8581_set_datetime(struct i2c_client *client, struct rtc_time *tm) 170static int rx8581_set_datetime(struct i2c_client *client, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c
index 7067bca5c20d..77feb603cd4c 100644
--- a/drivers/rtc/rtc-s35390a.c
+++ b/drivers/rtc/rtc-s35390a.c
@@ -210,8 +210,9 @@ static int s35390a_reg2hr(struct s35390a *s35390a, char reg)
210 return hour; 210 return hour;
211} 211}
212 212
213static int s35390a_set_datetime(struct i2c_client *client, struct rtc_time *tm) 213static int s35390a_rtc_set_time(struct device *dev, struct rtc_time *tm)
214{ 214{
215 struct i2c_client *client = to_i2c_client(dev);
215 struct s35390a *s35390a = i2c_get_clientdata(client); 216 struct s35390a *s35390a = i2c_get_clientdata(client);
216 int i, err; 217 int i, err;
217 char buf[7], status; 218 char buf[7], status;
@@ -241,8 +242,9 @@ static int s35390a_set_datetime(struct i2c_client *client, struct rtc_time *tm)
241 return err; 242 return err;
242} 243}
243 244
244static int s35390a_get_datetime(struct i2c_client *client, struct rtc_time *tm) 245static int s35390a_rtc_read_time(struct device *dev, struct rtc_time *tm)
245{ 246{
247 struct i2c_client *client = to_i2c_client(dev);
246 struct s35390a *s35390a = i2c_get_clientdata(client); 248 struct s35390a *s35390a = i2c_get_clientdata(client);
247 char buf[7], status; 249 char buf[7], status;
248 int i, err; 250 int i, err;
@@ -271,11 +273,12 @@ static int s35390a_get_datetime(struct i2c_client *client, struct rtc_time *tm)
271 tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, 273 tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year,
272 tm->tm_wday); 274 tm->tm_wday);
273 275
274 return rtc_valid_tm(tm); 276 return 0;
275} 277}
276 278
277static int s35390a_set_alarm(struct i2c_client *client, struct rtc_wkalrm *alm) 279static int s35390a_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
278{ 280{
281 struct i2c_client *client = to_i2c_client(dev);
279 struct s35390a *s35390a = i2c_get_clientdata(client); 282 struct s35390a *s35390a = i2c_get_clientdata(client);
280 char buf[3], sts = 0; 283 char buf[3], sts = 0;
281 int err, i; 284 int err, i;
@@ -329,8 +332,9 @@ static int s35390a_set_alarm(struct i2c_client *client, struct rtc_wkalrm *alm)
329 return err; 332 return err;
330} 333}
331 334
332static int s35390a_read_alarm(struct i2c_client *client, struct rtc_wkalrm *alm) 335static int s35390a_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
333{ 336{
337 struct i2c_client *client = to_i2c_client(dev);
334 struct s35390a *s35390a = i2c_get_clientdata(client); 338 struct s35390a *s35390a = i2c_get_clientdata(client);
335 char buf[3], sts; 339 char buf[3], sts;
336 int i, err; 340 int i, err;
@@ -384,26 +388,6 @@ static int s35390a_read_alarm(struct i2c_client *client, struct rtc_wkalrm *alm)
384 return 0; 388 return 0;
385} 389}
386 390
387static int s35390a_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alm)
388{
389 return s35390a_read_alarm(to_i2c_client(dev), alm);
390}
391
392static int s35390a_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
393{
394 return s35390a_set_alarm(to_i2c_client(dev), alm);
395}
396
397static int s35390a_rtc_read_time(struct device *dev, struct rtc_time *tm)
398{
399 return s35390a_get_datetime(to_i2c_client(dev), tm);
400}
401
402static int s35390a_rtc_set_time(struct device *dev, struct rtc_time *tm)
403{
404 return s35390a_set_datetime(to_i2c_client(dev), tm);
405}
406
407static int s35390a_rtc_ioctl(struct device *dev, unsigned int cmd, 391static int s35390a_rtc_ioctl(struct device *dev, unsigned int cmd,
408 unsigned long arg) 392 unsigned long arg)
409{ 393{
@@ -450,7 +434,6 @@ static int s35390a_probe(struct i2c_client *client,
450 int err, err_read; 434 int err, err_read;
451 unsigned int i; 435 unsigned int i;
452 struct s35390a *s35390a; 436 struct s35390a *s35390a;
453 struct rtc_time tm;
454 char buf, status1; 437 char buf, status1;
455 438
456 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { 439 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
@@ -508,9 +491,6 @@ static int s35390a_probe(struct i2c_client *client,
508 } 491 }
509 } 492 }
510 493
511 if (err_read > 0 || s35390a_get_datetime(client, &tm) < 0)
512 dev_warn(&client->dev, "clock needs to be set\n");
513
514 device_set_wakeup_capable(&client->dev, 1); 494 device_set_wakeup_capable(&client->dev, 1);
515 495
516 s35390a->rtc = devm_rtc_device_register(&client->dev, 496 s35390a->rtc = devm_rtc_device_register(&client->dev,
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c
index a8992c227f61..75c8c5033e08 100644
--- a/drivers/rtc/rtc-s3c.c
+++ b/drivers/rtc/rtc-s3c.c
@@ -232,7 +232,7 @@ retry_get_time:
232 232
233 rtc_tm->tm_mon -= 1; 233 rtc_tm->tm_mon -= 1;
234 234
235 return rtc_valid_tm(rtc_tm); 235 return 0;
236} 236}
237 237
238static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm) 238static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-s5m.c b/drivers/rtc/rtc-s5m.c
index 0477678d968f..8428455432ca 100644
--- a/drivers/rtc/rtc-s5m.c
+++ b/drivers/rtc/rtc-s5m.c
@@ -38,6 +38,19 @@
38 */ 38 */
39#define UDR_READ_RETRY_CNT 5 39#define UDR_READ_RETRY_CNT 5
40 40
41enum {
42 RTC_SEC = 0,
43 RTC_MIN,
44 RTC_HOUR,
45 RTC_WEEKDAY,
46 RTC_DATE,
47 RTC_MONTH,
48 RTC_YEAR1,
49 RTC_YEAR2,
50 /* Make sure this is always the last enum name. */
51 RTC_MAX_NUM_TIME_REGS
52};
53
41/* 54/*
42 * Registers used by the driver which are different between chipsets. 55 * Registers used by the driver which are different between chipsets.
43 * 56 *
@@ -367,7 +380,7 @@ static void s5m8763_tm_to_data(struct rtc_time *tm, u8 *data)
367static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm) 380static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)
368{ 381{
369 struct s5m_rtc_info *info = dev_get_drvdata(dev); 382 struct s5m_rtc_info *info = dev_get_drvdata(dev);
370 u8 data[info->regs->regs_count]; 383 u8 data[RTC_MAX_NUM_TIME_REGS];
371 int ret; 384 int ret;
372 385
373 if (info->regs->read_time_udr_mask) { 386 if (info->regs->read_time_udr_mask) {
@@ -407,13 +420,13 @@ static int s5m_rtc_read_time(struct device *dev, struct rtc_time *tm)
407 1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, 420 1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday,
408 tm->tm_hour, tm->tm_min, tm->tm_sec, tm->tm_wday); 421 tm->tm_hour, tm->tm_min, tm->tm_sec, tm->tm_wday);
409 422
410 return rtc_valid_tm(tm); 423 return 0;
411} 424}
412 425
413static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm) 426static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm)
414{ 427{
415 struct s5m_rtc_info *info = dev_get_drvdata(dev); 428 struct s5m_rtc_info *info = dev_get_drvdata(dev);
416 u8 data[info->regs->regs_count]; 429 u8 data[RTC_MAX_NUM_TIME_REGS];
417 int ret = 0; 430 int ret = 0;
418 431
419 switch (info->device_type) { 432 switch (info->device_type) {
@@ -450,7 +463,7 @@ static int s5m_rtc_set_time(struct device *dev, struct rtc_time *tm)
450static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) 463static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
451{ 464{
452 struct s5m_rtc_info *info = dev_get_drvdata(dev); 465 struct s5m_rtc_info *info = dev_get_drvdata(dev);
453 u8 data[info->regs->regs_count]; 466 u8 data[RTC_MAX_NUM_TIME_REGS];
454 unsigned int val; 467 unsigned int val;
455 int ret, i; 468 int ret, i;
456 469
@@ -500,7 +513,7 @@ static int s5m_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
500 513
501static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info) 514static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info)
502{ 515{
503 u8 data[info->regs->regs_count]; 516 u8 data[RTC_MAX_NUM_TIME_REGS];
504 int ret, i; 517 int ret, i;
505 struct rtc_time tm; 518 struct rtc_time tm;
506 519
@@ -545,7 +558,7 @@ static int s5m_rtc_stop_alarm(struct s5m_rtc_info *info)
545static int s5m_rtc_start_alarm(struct s5m_rtc_info *info) 558static int s5m_rtc_start_alarm(struct s5m_rtc_info *info)
546{ 559{
547 int ret; 560 int ret;
548 u8 data[info->regs->regs_count]; 561 u8 data[RTC_MAX_NUM_TIME_REGS];
549 u8 alarm0_conf; 562 u8 alarm0_conf;
550 struct rtc_time tm; 563 struct rtc_time tm;
551 564
@@ -598,7 +611,7 @@ static int s5m_rtc_start_alarm(struct s5m_rtc_info *info)
598static int s5m_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) 611static int s5m_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
599{ 612{
600 struct s5m_rtc_info *info = dev_get_drvdata(dev); 613 struct s5m_rtc_info *info = dev_get_drvdata(dev);
601 u8 data[info->regs->regs_count]; 614 u8 data[RTC_MAX_NUM_TIME_REGS];
602 int ret; 615 int ret;
603 616
604 switch (info->device_type) { 617 switch (info->device_type) {
diff --git a/drivers/rtc/rtc-sc27xx.c b/drivers/rtc/rtc-sc27xx.c
index d544d5268757..00d87d138984 100644
--- a/drivers/rtc/rtc-sc27xx.c
+++ b/drivers/rtc/rtc-sc27xx.c
@@ -376,7 +376,7 @@ static int sprd_rtc_read_time(struct device *dev, struct rtc_time *tm)
376 return ret; 376 return ret;
377 377
378 rtc_time64_to_tm(secs, tm); 378 rtc_time64_to_tm(secs, tm);
379 return rtc_valid_tm(tm); 379 return 0;
380} 380}
381 381
382static int sprd_rtc_set_time(struct device *dev, struct rtc_time *tm) 382static int sprd_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c
index 6c2d3989f967..4e8ab370ce63 100644
--- a/drivers/rtc/rtc-sh.c
+++ b/drivers/rtc/rtc-sh.c
@@ -414,7 +414,7 @@ static int sh_rtc_read_time(struct device *dev, struct rtc_time *tm)
414 tm->tm_sec, tm->tm_min, tm->tm_hour, 414 tm->tm_sec, tm->tm_min, tm->tm_hour,
415 tm->tm_mday, tm->tm_mon + 1, tm->tm_year, tm->tm_wday); 415 tm->tm_mday, tm->tm_mon + 1, tm->tm_year, tm->tm_wday);
416 416
417 return rtc_valid_tm(tm); 417 return 0;
418} 418}
419 419
420static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm) 420static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-sirfsoc.c b/drivers/rtc/rtc-sirfsoc.c
index 7367f617145c..2a9e151cae99 100644
--- a/drivers/rtc/rtc-sirfsoc.c
+++ b/drivers/rtc/rtc-sirfsoc.c
@@ -204,23 +204,6 @@ static int sirfsoc_rtc_set_time(struct device *dev,
204 return 0; 204 return 0;
205} 205}
206 206
207static int sirfsoc_rtc_ioctl(struct device *dev, unsigned int cmd,
208 unsigned long arg)
209{
210 switch (cmd) {
211 case RTC_PIE_ON:
212 case RTC_PIE_OFF:
213 case RTC_UIE_ON:
214 case RTC_UIE_OFF:
215 case RTC_AIE_ON:
216 case RTC_AIE_OFF:
217 return 0;
218
219 default:
220 return -ENOIOCTLCMD;
221 }
222}
223
224static int sirfsoc_rtc_alarm_irq_enable(struct device *dev, 207static int sirfsoc_rtc_alarm_irq_enable(struct device *dev,
225 unsigned int enabled) 208 unsigned int enabled)
226{ 209{
@@ -250,7 +233,6 @@ static const struct rtc_class_ops sirfsoc_rtc_ops = {
250 .set_time = sirfsoc_rtc_set_time, 233 .set_time = sirfsoc_rtc_set_time,
251 .read_alarm = sirfsoc_rtc_read_alarm, 234 .read_alarm = sirfsoc_rtc_read_alarm,
252 .set_alarm = sirfsoc_rtc_set_alarm, 235 .set_alarm = sirfsoc_rtc_set_alarm,
253 .ioctl = sirfsoc_rtc_ioctl,
254 .alarm_irq_enable = sirfsoc_rtc_alarm_irq_enable 236 .alarm_irq_enable = sirfsoc_rtc_alarm_irq_enable
255}; 237};
256 238
diff --git a/drivers/rtc/rtc-snvs.c b/drivers/rtc/rtc-snvs.c
index d8ef9e052c4f..9af591d5223c 100644
--- a/drivers/rtc/rtc-snvs.c
+++ b/drivers/rtc/rtc-snvs.c
@@ -132,20 +132,23 @@ static int snvs_rtc_set_time(struct device *dev, struct rtc_time *tm)
132{ 132{
133 struct snvs_rtc_data *data = dev_get_drvdata(dev); 133 struct snvs_rtc_data *data = dev_get_drvdata(dev);
134 unsigned long time; 134 unsigned long time;
135 int ret;
135 136
136 rtc_tm_to_time(tm, &time); 137 rtc_tm_to_time(tm, &time);
137 138
138 /* Disable RTC first */ 139 /* Disable RTC first */
139 snvs_rtc_enable(data, false); 140 ret = snvs_rtc_enable(data, false);
141 if (ret)
142 return ret;
140 143
141 /* Write 32-bit time to 47-bit timer, leaving 15 LSBs blank */ 144 /* Write 32-bit time to 47-bit timer, leaving 15 LSBs blank */
142 regmap_write(data->regmap, data->offset + SNVS_LPSRTCLR, time << CNTR_TO_SECS_SH); 145 regmap_write(data->regmap, data->offset + SNVS_LPSRTCLR, time << CNTR_TO_SECS_SH);
143 regmap_write(data->regmap, data->offset + SNVS_LPSRTCMR, time >> (32 - CNTR_TO_SECS_SH)); 146 regmap_write(data->regmap, data->offset + SNVS_LPSRTCMR, time >> (32 - CNTR_TO_SECS_SH));
144 147
145 /* Enable RTC again */ 148 /* Enable RTC again */
146 snvs_rtc_enable(data, true); 149 ret = snvs_rtc_enable(data, true);
147 150
148 return 0; 151 return ret;
149} 152}
150 153
151static int snvs_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) 154static int snvs_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
@@ -288,7 +291,11 @@ static int snvs_rtc_probe(struct platform_device *pdev)
288 regmap_write(data->regmap, data->offset + SNVS_LPSR, 0xffffffff); 291 regmap_write(data->regmap, data->offset + SNVS_LPSR, 0xffffffff);
289 292
290 /* Enable RTC */ 293 /* Enable RTC */
291 snvs_rtc_enable(data, true); 294 ret = snvs_rtc_enable(data, true);
295 if (ret) {
296 dev_err(&pdev->dev, "failed to enable rtc %d\n", ret);
297 goto error_rtc_device_register;
298 }
292 299
293 device_init_wakeup(&pdev->dev, true); 300 device_init_wakeup(&pdev->dev, true);
294 301
diff --git a/drivers/rtc/rtc-spear.c b/drivers/rtc/rtc-spear.c
index e377f42abae7..0567944fd4f8 100644
--- a/drivers/rtc/rtc-spear.c
+++ b/drivers/rtc/rtc-spear.c
@@ -170,18 +170,14 @@ static irqreturn_t spear_rtc_irq(int irq, void *dev_id)
170 170
171} 171}
172 172
173static int tm2bcd(struct rtc_time *tm) 173static void tm2bcd(struct rtc_time *tm)
174{ 174{
175 if (rtc_valid_tm(tm) != 0)
176 return -EINVAL;
177 tm->tm_sec = bin2bcd(tm->tm_sec); 175 tm->tm_sec = bin2bcd(tm->tm_sec);
178 tm->tm_min = bin2bcd(tm->tm_min); 176 tm->tm_min = bin2bcd(tm->tm_min);
179 tm->tm_hour = bin2bcd(tm->tm_hour); 177 tm->tm_hour = bin2bcd(tm->tm_hour);
180 tm->tm_mday = bin2bcd(tm->tm_mday); 178 tm->tm_mday = bin2bcd(tm->tm_mday);
181 tm->tm_mon = bin2bcd(tm->tm_mon + 1); 179 tm->tm_mon = bin2bcd(tm->tm_mon + 1);
182 tm->tm_year = bin2bcd(tm->tm_year); 180 tm->tm_year = bin2bcd(tm->tm_year);
183
184 return 0;
185} 181}
186 182
187static void bcd2tm(struct rtc_time *tm) 183static void bcd2tm(struct rtc_time *tm)
@@ -237,8 +233,7 @@ static int spear_rtc_set_time(struct device *dev, struct rtc_time *tm)
237 struct spear_rtc_config *config = dev_get_drvdata(dev); 233 struct spear_rtc_config *config = dev_get_drvdata(dev);
238 unsigned int time, date; 234 unsigned int time, date;
239 235
240 if (tm2bcd(tm) < 0) 236 tm2bcd(tm);
241 return -EINVAL;
242 237
243 rtc_wait_not_busy(config); 238 rtc_wait_not_busy(config);
244 time = (tm->tm_sec << SECOND_SHIFT) | (tm->tm_min << MINUTE_SHIFT) | 239 time = (tm->tm_sec << SECOND_SHIFT) | (tm->tm_min << MINUTE_SHIFT) |
@@ -295,8 +290,7 @@ static int spear_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
295 unsigned int time, date; 290 unsigned int time, date;
296 int err; 291 int err;
297 292
298 if (tm2bcd(&alm->time) < 0) 293 tm2bcd(&alm->time);
299 return -EINVAL;
300 294
301 rtc_wait_not_busy(config); 295 rtc_wait_not_busy(config);
302 296
diff --git a/drivers/rtc/rtc-st-lpc.c b/drivers/rtc/rtc-st-lpc.c
index 82b0af159a28..d5222667f892 100644
--- a/drivers/rtc/rtc-st-lpc.c
+++ b/drivers/rtc/rtc-st-lpc.c
@@ -195,7 +195,6 @@ static int st_rtc_probe(struct platform_device *pdev)
195 struct device_node *np = pdev->dev.of_node; 195 struct device_node *np = pdev->dev.of_node;
196 struct st_rtc *rtc; 196 struct st_rtc *rtc;
197 struct resource *res; 197 struct resource *res;
198 struct rtc_time tm_check;
199 uint32_t mode; 198 uint32_t mode;
200 int ret = 0; 199 int ret = 0;
201 200
@@ -254,21 +253,6 @@ static int st_rtc_probe(struct platform_device *pdev)
254 253
255 platform_set_drvdata(pdev, rtc); 254 platform_set_drvdata(pdev, rtc);
256 255
257 /*
258 * The RTC-LPC is able to manage date.year > 2038
259 * but currently the kernel can not manage this date!
260 * If the RTC-LPC has a date.year > 2038 then
261 * it's set to the epoch "Jan 1st 2000"
262 */
263 st_rtc_read_time(&pdev->dev, &tm_check);
264
265 if (tm_check.tm_year >= (2038 - 1900)) {
266 memset(&tm_check, 0, sizeof(tm_check));
267 tm_check.tm_year = 100;
268 tm_check.tm_mday = 1;
269 st_rtc_set_time(&pdev->dev, &tm_check);
270 }
271
272 rtc->rtc_dev = rtc_device_register("st-lpc-rtc", &pdev->dev, 256 rtc->rtc_dev = rtc_device_register("st-lpc-rtc", &pdev->dev,
273 &st_rtc_ops, THIS_MODULE); 257 &st_rtc_ops, THIS_MODULE);
274 if (IS_ERR(rtc->rtc_dev)) { 258 if (IS_ERR(rtc->rtc_dev)) {
diff --git a/drivers/rtc/rtc-starfire.c b/drivers/rtc/rtc-starfire.c
index 7fc36973fa33..a7d49329d626 100644
--- a/drivers/rtc/rtc-starfire.c
+++ b/drivers/rtc/rtc-starfire.c
@@ -28,7 +28,7 @@ static u32 starfire_get_time(void)
28static int starfire_read_time(struct device *dev, struct rtc_time *tm) 28static int starfire_read_time(struct device *dev, struct rtc_time *tm)
29{ 29{
30 rtc_time_to_tm(starfire_get_time(), tm); 30 rtc_time_to_tm(starfire_get_time(), tm);
31 return rtc_valid_tm(tm); 31 return 0;
32} 32}
33 33
34static const struct rtc_class_ops starfire_rtc_ops = { 34static const struct rtc_class_ops starfire_rtc_ops = {
diff --git a/drivers/rtc/rtc-stk17ta8.c b/drivers/rtc/rtc-stk17ta8.c
index a456cb6177ea..e70b78d17a98 100644
--- a/drivers/rtc/rtc-stk17ta8.c
+++ b/drivers/rtc/rtc-stk17ta8.c
@@ -129,10 +129,6 @@ static int stk17ta8_rtc_read_time(struct device *dev, struct rtc_time *tm)
129 /* year is 1900 + tm->tm_year */ 129 /* year is 1900 + tm->tm_year */
130 tm->tm_year = bcd2bin(year) + bcd2bin(century) * 100 - 1900; 130 tm->tm_year = bcd2bin(year) + bcd2bin(century) * 100 - 1900;
131 131
132 if (rtc_valid_tm(tm) < 0) {
133 dev_err(dev, "retrieved date/time is not valid.\n");
134 rtc_time_to_tm(0, tm);
135 }
136 return 0; 132 return 0;
137} 133}
138 134
@@ -242,46 +238,30 @@ static const struct rtc_class_ops stk17ta8_rtc_ops = {
242 .alarm_irq_enable = stk17ta8_rtc_alarm_irq_enable, 238 .alarm_irq_enable = stk17ta8_rtc_alarm_irq_enable,
243}; 239};
244 240
245static ssize_t stk17ta8_nvram_read(struct file *filp, struct kobject *kobj, 241static int stk17ta8_nvram_read(void *priv, unsigned int pos, void *val,
246 struct bin_attribute *attr, char *buf, 242 size_t bytes)
247 loff_t pos, size_t size)
248{ 243{
249 struct device *dev = container_of(kobj, struct device, kobj); 244 struct rtc_plat_data *pdata = priv;
250 struct platform_device *pdev = to_platform_device(dev);
251 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
252 void __iomem *ioaddr = pdata->ioaddr; 245 void __iomem *ioaddr = pdata->ioaddr;
253 ssize_t count; 246 u8 *buf = val;
254 247
255 for (count = 0; count < size; count++) 248 for (; bytes; bytes--)
256 *buf++ = readb(ioaddr + pos++); 249 *buf++ = readb(ioaddr + pos++);
257 return count; 250 return 0;
258} 251}
259 252
260static ssize_t stk17ta8_nvram_write(struct file *filp, struct kobject *kobj, 253static int stk17ta8_nvram_write(void *priv, unsigned int pos, void *val,
261 struct bin_attribute *attr, char *buf, 254 size_t bytes)
262 loff_t pos, size_t size)
263{ 255{
264 struct device *dev = container_of(kobj, struct device, kobj); 256 struct rtc_plat_data *pdata = priv;
265 struct platform_device *pdev = to_platform_device(dev);
266 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
267 void __iomem *ioaddr = pdata->ioaddr; 257 void __iomem *ioaddr = pdata->ioaddr;
268 ssize_t count; 258 u8 *buf = val;
269 259
270 for (count = 0; count < size; count++) 260 for (; bytes; bytes--)
271 writeb(*buf++, ioaddr + pos++); 261 writeb(*buf++, ioaddr + pos++);
272 return count; 262 return 0;
273} 263}
274 264
275static struct bin_attribute stk17ta8_nvram_attr = {
276 .attr = {
277 .name = "nvram",
278 .mode = S_IRUGO | S_IWUSR,
279 },
280 .size = RTC_OFFSET,
281 .read = stk17ta8_nvram_read,
282 .write = stk17ta8_nvram_write,
283};
284
285static int stk17ta8_rtc_probe(struct platform_device *pdev) 265static int stk17ta8_rtc_probe(struct platform_device *pdev)
286{ 266{
287 struct resource *res; 267 struct resource *res;
@@ -290,6 +270,14 @@ static int stk17ta8_rtc_probe(struct platform_device *pdev)
290 struct rtc_plat_data *pdata; 270 struct rtc_plat_data *pdata;
291 void __iomem *ioaddr; 271 void __iomem *ioaddr;
292 int ret = 0; 272 int ret = 0;
273 struct nvmem_config nvmem_cfg = {
274 .name = "stk17ta8_nvram",
275 .word_size = 1,
276 .stride = 1,
277 .size = RTC_OFFSET,
278 .reg_read = stk17ta8_nvram_read,
279 .reg_write = stk17ta8_nvram_write,
280 };
293 281
294 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); 282 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
295 if (!pdata) 283 if (!pdata)
@@ -328,24 +316,19 @@ static int stk17ta8_rtc_probe(struct platform_device *pdev)
328 } 316 }
329 } 317 }
330 318
331 pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 319 pdata->rtc = devm_rtc_allocate_device(&pdev->dev);
332 &stk17ta8_rtc_ops, THIS_MODULE);
333 if (IS_ERR(pdata->rtc)) 320 if (IS_ERR(pdata->rtc))
334 return PTR_ERR(pdata->rtc); 321 return PTR_ERR(pdata->rtc);
335 322
336 ret = sysfs_create_bin_file(&pdev->dev.kobj, &stk17ta8_nvram_attr); 323 pdata->rtc->ops = &stk17ta8_rtc_ops;
324 pdata->rtc->nvram_old_abi = true;
337 325
338 return ret; 326 nvmem_cfg.priv = pdata;
339} 327 ret = rtc_nvmem_register(pdata->rtc, &nvmem_cfg);
328 if (ret)
329 return ret;
340 330
341static int stk17ta8_rtc_remove(struct platform_device *pdev) 331 return rtc_register_device(pdata->rtc);
342{
343 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
344
345 sysfs_remove_bin_file(&pdev->dev.kobj, &stk17ta8_nvram_attr);
346 if (pdata->irq > 0)
347 writeb(0, pdata->ioaddr + RTC_INTERRUPTS);
348 return 0;
349} 332}
350 333
351/* work with hotplug and coldplug */ 334/* work with hotplug and coldplug */
@@ -353,7 +336,6 @@ MODULE_ALIAS("platform:stk17ta8");
353 336
354static struct platform_driver stk17ta8_rtc_driver = { 337static struct platform_driver stk17ta8_rtc_driver = {
355 .probe = stk17ta8_rtc_probe, 338 .probe = stk17ta8_rtc_probe,
356 .remove = stk17ta8_rtc_remove,
357 .driver = { 339 .driver = {
358 .name = "stk17ta8", 340 .name = "stk17ta8",
359 }, 341 },
diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c
index 5bc28eed1adf..2e6fb275acc8 100644
--- a/drivers/rtc/rtc-sun6i.c
+++ b/drivers/rtc/rtc-sun6i.c
@@ -349,7 +349,7 @@ static int sun6i_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
349 */ 349 */
350 rtc_tm->tm_year += SUN6I_YEAR_OFF; 350 rtc_tm->tm_year += SUN6I_YEAR_OFF;
351 351
352 return rtc_valid_tm(rtc_tm); 352 return 0;
353} 353}
354 354
355static int sun6i_rtc_getalarm(struct device *dev, struct rtc_wkalrm *wkalrm) 355static int sun6i_rtc_getalarm(struct device *dev, struct rtc_wkalrm *wkalrm)
diff --git a/drivers/rtc/rtc-sunxi.c b/drivers/rtc/rtc-sunxi.c
index abada609ddc7..dadbf8b324ad 100644
--- a/drivers/rtc/rtc-sunxi.c
+++ b/drivers/rtc/rtc-sunxi.c
@@ -261,7 +261,7 @@ static int sunxi_rtc_gettime(struct device *dev, struct rtc_time *rtc_tm)
261 */ 261 */
262 rtc_tm->tm_year += SUNXI_YEAR_OFF(chip->data_year); 262 rtc_tm->tm_year += SUNXI_YEAR_OFF(chip->data_year);
263 263
264 return rtc_valid_tm(rtc_tm); 264 return 0;
265} 265}
266 266
267static int sunxi_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm) 267static int sunxi_rtc_setalarm(struct device *dev, struct rtc_wkalrm *wkalrm)
diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c
index 92ff2edb86a6..454da38c6012 100644
--- a/drivers/rtc/rtc-sysfs.c
+++ b/drivers/rtc/rtc-sysfs.c
@@ -248,6 +248,14 @@ offset_store(struct device *dev, struct device_attribute *attr,
248} 248}
249static DEVICE_ATTR_RW(offset); 249static DEVICE_ATTR_RW(offset);
250 250
251static ssize_t
252range_show(struct device *dev, struct device_attribute *attr, char *buf)
253{
254 return sprintf(buf, "[%lld,%llu]\n", to_rtc_device(dev)->range_min,
255 to_rtc_device(dev)->range_max);
256}
257static DEVICE_ATTR_RO(range);
258
251static struct attribute *rtc_attrs[] = { 259static struct attribute *rtc_attrs[] = {
252 &dev_attr_name.attr, 260 &dev_attr_name.attr,
253 &dev_attr_date.attr, 261 &dev_attr_date.attr,
@@ -257,6 +265,7 @@ static struct attribute *rtc_attrs[] = {
257 &dev_attr_hctosys.attr, 265 &dev_attr_hctosys.attr,
258 &dev_attr_wakealarm.attr, 266 &dev_attr_wakealarm.attr,
259 &dev_attr_offset.attr, 267 &dev_attr_offset.attr,
268 &dev_attr_range.attr,
260 NULL, 269 NULL,
261}; 270};
262 271
@@ -286,6 +295,9 @@ static umode_t rtc_attr_is_visible(struct kobject *kobj,
286 } else if (attr == &dev_attr_offset.attr) { 295 } else if (attr == &dev_attr_offset.attr) {
287 if (!rtc->ops->set_offset) 296 if (!rtc->ops->set_offset)
288 mode = 0; 297 mode = 0;
298 } else if (attr == &dev_attr_range.attr) {
299 if (!(rtc->range_max - rtc->range_min))
300 mode = 0;
289 } 301 }
290 302
291 return mode; 303 return mode;
diff --git a/drivers/rtc/rtc-tegra.c b/drivers/rtc/rtc-tegra.c
index d30d57b048d3..66efff60c4d5 100644
--- a/drivers/rtc/rtc-tegra.c
+++ b/drivers/rtc/rtc-tegra.c
@@ -144,10 +144,6 @@ static int tegra_rtc_set_time(struct device *dev, struct rtc_time *tm)
144 int ret; 144 int ret;
145 145
146 /* convert tm to seconds. */ 146 /* convert tm to seconds. */
147 ret = rtc_valid_tm(tm);
148 if (ret)
149 return ret;
150
151 rtc_tm_to_time(tm, &sec); 147 rtc_tm_to_time(tm, &sec);
152 148
153 dev_vdbg(dev, "time set to %lu. %d/%d/%d %d:%02u:%02u\n", 149 dev_vdbg(dev, "time set to %lu. %d/%d/%d %d:%02u:%02u\n",
diff --git a/drivers/rtc/rtc-tps6586x.c b/drivers/rtc/rtc-tps6586x.c
index a3418a8a3796..d7785ae0a2b4 100644
--- a/drivers/rtc/rtc-tps6586x.c
+++ b/drivers/rtc/rtc-tps6586x.c
@@ -90,7 +90,7 @@ static int tps6586x_rtc_read_time(struct device *dev, struct rtc_time *tm)
90 seconds = ticks >> 10; 90 seconds = ticks >> 10;
91 seconds += rtc->epoch_start; 91 seconds += rtc->epoch_start;
92 rtc_time_to_tm(seconds, tm); 92 rtc_time_to_tm(seconds, tm);
93 return rtc_valid_tm(tm); 93 return 0;
94} 94}
95 95
96static int tps6586x_rtc_set_time(struct device *dev, struct rtc_time *tm) 96static int tps6586x_rtc_set_time(struct device *dev, struct rtc_time *tm)
diff --git a/drivers/rtc/rtc-tx4939.c b/drivers/rtc/rtc-tx4939.c
index 560d9a5e0225..08dbefc79520 100644
--- a/drivers/rtc/rtc-tx4939.c
+++ b/drivers/rtc/rtc-tx4939.c
@@ -14,7 +14,30 @@
14#include <linux/module.h> 14#include <linux/module.h>
15#include <linux/io.h> 15#include <linux/io.h>
16#include <linux/gfp.h> 16#include <linux/gfp.h>
17#include <asm/txx9/tx4939.h> 17
18#define TX4939_RTCCTL_ALME 0x00000080
19#define TX4939_RTCCTL_ALMD 0x00000040
20#define TX4939_RTCCTL_BUSY 0x00000020
21
22#define TX4939_RTCCTL_COMMAND 0x00000007
23#define TX4939_RTCCTL_COMMAND_NOP 0x00000000
24#define TX4939_RTCCTL_COMMAND_GETTIME 0x00000001
25#define TX4939_RTCCTL_COMMAND_SETTIME 0x00000002
26#define TX4939_RTCCTL_COMMAND_GETALARM 0x00000003
27#define TX4939_RTCCTL_COMMAND_SETALARM 0x00000004
28
29#define TX4939_RTCTBC_PM 0x00000080
30#define TX4939_RTCTBC_COMP 0x0000007f
31
32#define TX4939_RTC_REG_RAMSIZE 0x00000100
33#define TX4939_RTC_REG_RWBSIZE 0x00000006
34
35struct tx4939_rtc_reg {
36 __u32 ctl;
37 __u32 adr;
38 __u32 dat;
39 __u32 tbc;
40};
18 41
19struct tx4939rtc_plat_data { 42struct tx4939rtc_plat_data {
20 struct rtc_device *rtc; 43 struct rtc_device *rtc;
@@ -86,9 +109,10 @@ static int tx4939_rtc_read_time(struct device *dev, struct rtc_time *tm)
86 for (i = 2; i < 6; i++) 109 for (i = 2; i < 6; i++)
87 buf[i] = __raw_readl(&rtcreg->dat); 110 buf[i] = __raw_readl(&rtcreg->dat);
88 spin_unlock_irq(&pdata->lock); 111 spin_unlock_irq(&pdata->lock);
89 sec = (buf[5] << 24) | (buf[4] << 16) | (buf[3] << 8) | buf[2]; 112 sec = ((unsigned long)buf[5] << 24) | (buf[4] << 16) |
113 (buf[3] << 8) | buf[2];
90 rtc_time_to_tm(sec, tm); 114 rtc_time_to_tm(sec, tm);
91 return rtc_valid_tm(tm); 115 return 0;
92} 116}
93 117
94static int tx4939_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) 118static int tx4939_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
@@ -147,7 +171,8 @@ static int tx4939_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
147 alrm->enabled = (ctl & TX4939_RTCCTL_ALME) ? 1 : 0; 171 alrm->enabled = (ctl & TX4939_RTCCTL_ALME) ? 1 : 0;
148 alrm->pending = (ctl & TX4939_RTCCTL_ALMD) ? 1 : 0; 172 alrm->pending = (ctl & TX4939_RTCCTL_ALMD) ? 1 : 0;
149 spin_unlock_irq(&pdata->lock); 173 spin_unlock_irq(&pdata->lock);
150 sec = (buf[5] << 24) | (buf[4] << 16) | (buf[3] << 8) | buf[2]; 174 sec = ((unsigned long)buf[5] << 24) | (buf[4] << 16) |
175 (buf[3] << 8) | buf[2];
151 rtc_time_to_tm(sec, &alrm->time); 176 rtc_time_to_tm(sec, &alrm->time);
152 return rtc_valid_tm(&alrm->time); 177 return rtc_valid_tm(&alrm->time);
153} 178}
@@ -189,58 +214,52 @@ static const struct rtc_class_ops tx4939_rtc_ops = {
189 .alarm_irq_enable = tx4939_rtc_alarm_irq_enable, 214 .alarm_irq_enable = tx4939_rtc_alarm_irq_enable,
190}; 215};
191 216
192static ssize_t tx4939_rtc_nvram_read(struct file *filp, struct kobject *kobj, 217static int tx4939_nvram_read(void *priv, unsigned int pos, void *val,
193 struct bin_attribute *bin_attr, 218 size_t bytes)
194 char *buf, loff_t pos, size_t size)
195{ 219{
196 struct device *dev = container_of(kobj, struct device, kobj); 220 struct tx4939rtc_plat_data *pdata = priv;
197 struct tx4939rtc_plat_data *pdata = get_tx4939rtc_plat_data(dev);
198 struct tx4939_rtc_reg __iomem *rtcreg = pdata->rtcreg; 221 struct tx4939_rtc_reg __iomem *rtcreg = pdata->rtcreg;
199 ssize_t count; 222 u8 *buf = val;
200 223
201 spin_lock_irq(&pdata->lock); 224 spin_lock_irq(&pdata->lock);
202 for (count = 0; count < size; count++) { 225 for (; bytes; bytes--) {
203 __raw_writel(pos++, &rtcreg->adr); 226 __raw_writel(pos++, &rtcreg->adr);
204 *buf++ = __raw_readl(&rtcreg->dat); 227 *buf++ = __raw_readl(&rtcreg->dat);
205 } 228 }
206 spin_unlock_irq(&pdata->lock); 229 spin_unlock_irq(&pdata->lock);
207 return count; 230 return 0;
208} 231}
209 232
210static ssize_t tx4939_rtc_nvram_write(struct file *filp, struct kobject *kobj, 233static int tx4939_nvram_write(void *priv, unsigned int pos, void *val,
211 struct bin_attribute *bin_attr, 234 size_t bytes)
212 char *buf, loff_t pos, size_t size)
213{ 235{
214 struct device *dev = container_of(kobj, struct device, kobj); 236 struct tx4939rtc_plat_data *pdata = priv;
215 struct tx4939rtc_plat_data *pdata = get_tx4939rtc_plat_data(dev);
216 struct tx4939_rtc_reg __iomem *rtcreg = pdata->rtcreg; 237 struct tx4939_rtc_reg __iomem *rtcreg = pdata->rtcreg;
217 ssize_t count; 238 u8 *buf = val;
218 239
219 spin_lock_irq(&pdata->lock); 240 spin_lock_irq(&pdata->lock);
220 for (count = 0; count < size; count++) { 241 for (; bytes; bytes--) {
221 __raw_writel(pos++, &rtcreg->adr); 242 __raw_writel(pos++, &rtcreg->adr);
222 __raw_writel(*buf++, &rtcreg->dat); 243 __raw_writel(*buf++, &rtcreg->dat);
223 } 244 }
224 spin_unlock_irq(&pdata->lock); 245 spin_unlock_irq(&pdata->lock);
225 return count; 246 return 0;
226} 247}
227 248
228static struct bin_attribute tx4939_rtc_nvram_attr = {
229 .attr = {
230 .name = "nvram",
231 .mode = S_IRUGO | S_IWUSR,
232 },
233 .size = TX4939_RTC_REG_RAMSIZE,
234 .read = tx4939_rtc_nvram_read,
235 .write = tx4939_rtc_nvram_write,
236};
237
238static int __init tx4939_rtc_probe(struct platform_device *pdev) 249static int __init tx4939_rtc_probe(struct platform_device *pdev)
239{ 250{
240 struct rtc_device *rtc; 251 struct rtc_device *rtc;
241 struct tx4939rtc_plat_data *pdata; 252 struct tx4939rtc_plat_data *pdata;
242 struct resource *res; 253 struct resource *res;
243 int irq, ret; 254 int irq, ret;
255 struct nvmem_config nvmem_cfg = {
256 .name = "rv8803_nvram",
257 .word_size = 4,
258 .stride = 4,
259 .size = TX4939_RTC_REG_RAMSIZE,
260 .reg_read = tx4939_nvram_read,
261 .reg_write = tx4939_nvram_write,
262 };
244 263
245 irq = platform_get_irq(pdev, 0); 264 irq = platform_get_irq(pdev, 0);
246 if (irq < 0) 265 if (irq < 0)
@@ -260,21 +279,27 @@ static int __init tx4939_rtc_probe(struct platform_device *pdev)
260 if (devm_request_irq(&pdev->dev, irq, tx4939_rtc_interrupt, 279 if (devm_request_irq(&pdev->dev, irq, tx4939_rtc_interrupt,
261 0, pdev->name, &pdev->dev) < 0) 280 0, pdev->name, &pdev->dev) < 0)
262 return -EBUSY; 281 return -EBUSY;
263 rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 282 rtc = devm_rtc_allocate_device(&pdev->dev);
264 &tx4939_rtc_ops, THIS_MODULE);
265 if (IS_ERR(rtc)) 283 if (IS_ERR(rtc))
266 return PTR_ERR(rtc); 284 return PTR_ERR(rtc);
285
286 rtc->ops = &tx4939_rtc_ops;
287 rtc->nvram_old_abi = true;
288
267 pdata->rtc = rtc; 289 pdata->rtc = rtc;
268 ret = sysfs_create_bin_file(&pdev->dev.kobj, &tx4939_rtc_nvram_attr);
269 290
270 return ret; 291 nvmem_cfg.priv = pdata;
292 ret = rtc_nvmem_register(rtc, &nvmem_cfg);
293 if (ret)
294 return ret;
295
296 return rtc_register_device(rtc);
271} 297}
272 298
273static int __exit tx4939_rtc_remove(struct platform_device *pdev) 299static int __exit tx4939_rtc_remove(struct platform_device *pdev)
274{ 300{
275 struct tx4939rtc_plat_data *pdata = platform_get_drvdata(pdev); 301 struct tx4939rtc_plat_data *pdata = platform_get_drvdata(pdev);
276 302
277 sysfs_remove_bin_file(&pdev->dev.kobj, &tx4939_rtc_nvram_attr);
278 spin_lock_irq(&pdata->lock); 303 spin_lock_irq(&pdata->lock);
279 tx4939_rtc_cmd(pdata->rtcreg, TX4939_RTCCTL_COMMAND_NOP); 304 tx4939_rtc_cmd(pdata->rtcreg, TX4939_RTCCTL_COMMAND_NOP);
280 spin_unlock_irq(&pdata->lock); 305 spin_unlock_irq(&pdata->lock);
diff --git a/drivers/rtc/rtc-wm831x.c b/drivers/rtc/rtc-wm831x.c
index 75aea4c4d334..7b824dabf104 100644
--- a/drivers/rtc/rtc-wm831x.c
+++ b/drivers/rtc/rtc-wm831x.c
@@ -156,7 +156,7 @@ static int wm831x_rtc_readtime(struct device *dev, struct rtc_time *tm)
156 u32 time = (time1[0] << 16) | time1[1]; 156 u32 time = (time1[0] << 16) | time1[1];
157 157
158 rtc_time_to_tm(time, tm); 158 rtc_time_to_tm(time, tm);
159 return rtc_valid_tm(tm); 159 return 0;
160 } 160 }
161 161
162 } while (++count < WM831X_GET_TIME_RETRIES); 162 } while (++count < WM831X_GET_TIME_RETRIES);
diff --git a/drivers/rtc/rtc-xgene.c b/drivers/rtc/rtc-xgene.c
index 0c34d3b81279..153820876a82 100644
--- a/drivers/rtc/rtc-xgene.c
+++ b/drivers/rtc/rtc-xgene.c
@@ -60,7 +60,7 @@ static int xgene_rtc_read_time(struct device *dev, struct rtc_time *tm)
60 struct xgene_rtc_dev *pdata = dev_get_drvdata(dev); 60 struct xgene_rtc_dev *pdata = dev_get_drvdata(dev);
61 61
62 rtc_time_to_tm(readl(pdata->csr_base + RTC_CCVR), tm); 62 rtc_time_to_tm(readl(pdata->csr_base + RTC_CCVR), tm);
63 return rtc_valid_tm(tm); 63 return 0;
64} 64}
65 65
66static int xgene_rtc_set_mmss(struct device *dev, unsigned long secs) 66static int xgene_rtc_set_mmss(struct device *dev, unsigned long secs)
diff --git a/drivers/rtc/rtc-zynqmp.c b/drivers/rtc/rtc-zynqmp.c
index da18a8ae3c1d..fba994dc31eb 100644
--- a/drivers/rtc/rtc-zynqmp.c
+++ b/drivers/rtc/rtc-zynqmp.c
@@ -122,7 +122,7 @@ static int xlnx_rtc_read_time(struct device *dev, struct rtc_time *tm)
122 rtc_time64_to_tm(read_time, tm); 122 rtc_time64_to_tm(read_time, tm);
123 } 123 }
124 124
125 return rtc_valid_tm(tm); 125 return 0;
126} 126}
127 127
128static int xlnx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) 128static int xlnx_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
diff --git a/drivers/rtc/systohc.c b/drivers/rtc/systohc.c
index 0c177647ea6c..718293d72426 100644
--- a/drivers/rtc/systohc.c
+++ b/drivers/rtc/systohc.c
@@ -20,7 +20,7 @@
20 * cases. 20 * cases.
21 * 21 *
22 * -EPROTO is returned if now.tv_nsec is not close enough to *target_nsec. 22 * -EPROTO is returned if now.tv_nsec is not close enough to *target_nsec.
23 ( 23 *
24 * If temporary failure is indicated the caller should try again 'soon' 24 * If temporary failure is indicated the caller should try again 'soon'
25 */ 25 */
26int rtc_set_ntp_time(struct timespec64 now, unsigned long *target_nsec) 26int rtc_set_ntp_time(struct timespec64 now, unsigned long *target_nsec)
diff --git a/include/linux/mfd/samsung/rtc.h b/include/linux/mfd/samsung/rtc.h
index 48c3c5be7eb1..9ed2871ea335 100644
--- a/include/linux/mfd/samsung/rtc.h
+++ b/include/linux/mfd/samsung/rtc.h
@@ -141,15 +141,4 @@ enum s2mps_rtc_reg {
141#define WTSR_ENABLE_SHIFT 6 141#define WTSR_ENABLE_SHIFT 6
142#define WTSR_ENABLE_MASK (1 << WTSR_ENABLE_SHIFT) 142#define WTSR_ENABLE_MASK (1 << WTSR_ENABLE_SHIFT)
143 143
144enum {
145 RTC_SEC = 0,
146 RTC_MIN,
147 RTC_HOUR,
148 RTC_WEEKDAY,
149 RTC_DATE,
150 RTC_MONTH,
151 RTC_YEAR1,
152 RTC_YEAR2,
153};
154
155#endif /* __LINUX_MFD_SEC_RTC_H */ 144#endif /* __LINUX_MFD_SEC_RTC_H */
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index fc6c90b57be0..4c007f69082f 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -145,12 +145,17 @@ struct rtc_device {
145 145
146 bool registered; 146 bool registered;
147 147
148 struct nvmem_config *nvmem_config;
149 struct nvmem_device *nvmem; 148 struct nvmem_device *nvmem;
150 /* Old ABI support */ 149 /* Old ABI support */
151 bool nvram_old_abi; 150 bool nvram_old_abi;
152 struct bin_attribute *nvram; 151 struct bin_attribute *nvram;
153 152
153 time64_t range_min;
154 timeu64_t range_max;
155 time64_t start_secs;
156 time64_t offset_secs;
157 bool set_start_time;
158
154#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL 159#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
155 struct work_struct uie_task; 160 struct work_struct uie_task;
156 struct timer_list uie_timer; 161 struct timer_list uie_timer;
@@ -164,6 +169,11 @@ struct rtc_device {
164}; 169};
165#define to_rtc_device(d) container_of(d, struct rtc_device, dev) 170#define to_rtc_device(d) container_of(d, struct rtc_device, dev)
166 171
172/* useful timestamps */
173#define RTC_TIMESTAMP_BEGIN_1900 -2208989361LL /* 1900-01-01 00:00:00 */
174#define RTC_TIMESTAMP_BEGIN_2000 946684800LL /* 2000-01-01 00:00:00 */
175#define RTC_TIMESTAMP_END_2099 4102444799LL /* 2099-12-31 23:59:59 */
176
167extern struct rtc_device *rtc_device_register(const char *name, 177extern struct rtc_device *rtc_device_register(const char *name,
168 struct device *dev, 178 struct device *dev,
169 const struct rtc_class_ops *ops, 179 const struct rtc_class_ops *ops,
@@ -212,10 +222,6 @@ void rtc_aie_update_irq(void *private);
212void rtc_uie_update_irq(void *private); 222void rtc_uie_update_irq(void *private);
213enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer); 223enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer);
214 224
215int rtc_register(rtc_task_t *task);
216int rtc_unregister(rtc_task_t *task);
217int rtc_control(rtc_task_t *t, unsigned int cmd, unsigned long arg);
218
219void rtc_timer_init(struct rtc_timer *timer, void (*f)(void *p), void *data); 225void rtc_timer_init(struct rtc_timer *timer, void (*f)(void *p), void *data);
220int rtc_timer_start(struct rtc_device *rtc, struct rtc_timer *timer, 226int rtc_timer_start(struct rtc_device *rtc, struct rtc_timer *timer,
221 ktime_t expires, ktime_t period); 227 ktime_t expires, ktime_t period);
@@ -271,4 +277,17 @@ extern int rtc_hctosys_ret;
271#define rtc_hctosys_ret -ENODEV 277#define rtc_hctosys_ret -ENODEV
272#endif 278#endif
273 279
280#ifdef CONFIG_RTC_NVMEM
281int rtc_nvmem_register(struct rtc_device *rtc,
282 struct nvmem_config *nvmem_config);
283void rtc_nvmem_unregister(struct rtc_device *rtc);
284#else
285static inline int rtc_nvmem_register(struct rtc_device *rtc,
286 struct nvmem_config *nvmem_config)
287{
288 return -ENODEV;
289}
290static inline void rtc_nvmem_unregister(struct rtc_device *rtc) {}
291#endif
292
274#endif /* _LINUX_RTC_H_ */ 293#endif /* _LINUX_RTC_H_ */
diff --git a/include/trace/events/rtc.h b/include/trace/events/rtc.h
new file mode 100644
index 000000000000..621333f1c890
--- /dev/null
+++ b/include/trace/events/rtc.h
@@ -0,0 +1,206 @@
1#undef TRACE_SYSTEM
2#define TRACE_SYSTEM rtc
3
4#if !defined(_TRACE_RTC_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_RTC_H
6
7#include <linux/rtc.h>
8#include <linux/tracepoint.h>
9
10DECLARE_EVENT_CLASS(rtc_time_alarm_class,
11
12 TP_PROTO(time64_t secs, int err),
13
14 TP_ARGS(secs, err),
15
16 TP_STRUCT__entry(
17 __field(time64_t, secs)
18 __field(int, err)
19 ),
20
21 TP_fast_assign(
22 __entry->secs = secs;
23 __entry->err = err;
24 ),
25
26 TP_printk("UTC (%lld) (%d)",
27 __entry->secs, __entry->err
28 )
29);
30
31DEFINE_EVENT(rtc_time_alarm_class, rtc_set_time,
32
33 TP_PROTO(time64_t secs, int err),
34
35 TP_ARGS(secs, err)
36);
37
38DEFINE_EVENT(rtc_time_alarm_class, rtc_read_time,
39
40 TP_PROTO(time64_t secs, int err),
41
42 TP_ARGS(secs, err)
43);
44
45DEFINE_EVENT(rtc_time_alarm_class, rtc_set_alarm,
46
47 TP_PROTO(time64_t secs, int err),
48
49 TP_ARGS(secs, err)
50);
51
52DEFINE_EVENT(rtc_time_alarm_class, rtc_read_alarm,
53
54 TP_PROTO(time64_t secs, int err),
55
56 TP_ARGS(secs, err)
57);
58
59TRACE_EVENT(rtc_irq_set_freq,
60
61 TP_PROTO(int freq, int err),
62
63 TP_ARGS(freq, err),
64
65 TP_STRUCT__entry(
66 __field(int, freq)
67 __field(int, err)
68 ),
69
70 TP_fast_assign(
71 __entry->freq = freq;
72 __entry->err = err;
73 ),
74
75 TP_printk("set RTC periodic IRQ frequency:%u (%d)",
76 __entry->freq, __entry->err
77 )
78);
79
80TRACE_EVENT(rtc_irq_set_state,
81
82 TP_PROTO(int enabled, int err),
83
84 TP_ARGS(enabled, err),
85
86 TP_STRUCT__entry(
87 __field(int, enabled)
88 __field(int, err)
89 ),
90
91 TP_fast_assign(
92 __entry->enabled = enabled;
93 __entry->err = err;
94 ),
95
96 TP_printk("%s RTC 2^N Hz periodic IRQs (%d)",
97 __entry->enabled ? "enable" : "disable",
98 __entry->err
99 )
100);
101
102TRACE_EVENT(rtc_alarm_irq_enable,
103
104 TP_PROTO(unsigned int enabled, int err),
105
106 TP_ARGS(enabled, err),
107
108 TP_STRUCT__entry(
109 __field(unsigned int, enabled)
110 __field(int, err)
111 ),
112
113 TP_fast_assign(
114 __entry->enabled = enabled;
115 __entry->err = err;
116 ),
117
118 TP_printk("%s RTC alarm IRQ (%d)",
119 __entry->enabled ? "enable" : "disable",
120 __entry->err
121 )
122);
123
124DECLARE_EVENT_CLASS(rtc_offset_class,
125
126 TP_PROTO(long offset, int err),
127
128 TP_ARGS(offset, err),
129
130 TP_STRUCT__entry(
131 __field(long, offset)
132 __field(int, err)
133 ),
134
135 TP_fast_assign(
136 __entry->offset = offset;
137 __entry->err = err;
138 ),
139
140 TP_printk("RTC offset: %ld (%d)",
141 __entry->offset, __entry->err
142 )
143);
144
145DEFINE_EVENT(rtc_offset_class, rtc_set_offset,
146
147 TP_PROTO(long offset, int err),
148
149 TP_ARGS(offset, err)
150);
151
152DEFINE_EVENT(rtc_offset_class, rtc_read_offset,
153
154 TP_PROTO(long offset, int err),
155
156 TP_ARGS(offset, err)
157);
158
159DECLARE_EVENT_CLASS(rtc_timer_class,
160
161 TP_PROTO(struct rtc_timer *timer),
162
163 TP_ARGS(timer),
164
165 TP_STRUCT__entry(
166 __field(struct rtc_timer *, timer)
167 __field(ktime_t, expires)
168 __field(ktime_t, period)
169 ),
170
171 TP_fast_assign(
172 __entry->timer = timer;
173 __entry->expires = timer->node.expires;
174 __entry->period = timer->period;
175 ),
176
177 TP_printk("RTC timer:(%p) expires:%lld period:%lld",
178 __entry->timer, __entry->expires, __entry->period
179 )
180);
181
182DEFINE_EVENT(rtc_timer_class, rtc_timer_enqueue,
183
184 TP_PROTO(struct rtc_timer *timer),
185
186 TP_ARGS(timer)
187);
188
189DEFINE_EVENT(rtc_timer_class, rtc_timer_dequeue,
190
191 TP_PROTO(struct rtc_timer *timer),
192
193 TP_ARGS(timer)
194);
195
196DEFINE_EVENT(rtc_timer_class, rtc_timer_fired,
197
198 TP_PROTO(struct rtc_timer *timer),
199
200 TP_ARGS(timer)
201);
202
203#endif /* _TRACE_RTC_H */
204
205/* This part must be outside protection */
206#include <trace/define_trace.h>