hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/rtc/rtc-stmp3xxx.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0+
12 /*
23 * Freescale STMP37XX/STMP378X Real Time Clock driver
34 *
....@@ -7,15 +8,6 @@
78 * Copyright 2008 Freescale Semiconductor, Inc. All Rights Reserved.
89 * Copyright 2008 Embedded Alley Solutions, Inc All Rights Reserved.
910 * Copyright 2011 Wolfram Sang, Pengutronix e.K.
10
- */
11
-
12
-/*
13
- * The code contained herein is licensed under the GNU General Public
14
- * License. You may obtain a copy of the GNU General Public License
15
- * Version 2 or later at the following locations:
16
- *
17
- * http://www.opensource.org/licenses/gpl-license.html
18
- * http://www.gnu.org/copyleft/gpl.html
1911 */
2012 #include <linux/kernel.h>
2113 #include <linux/module.h>
....@@ -160,15 +152,15 @@
160152 if (ret)
161153 return ret;
162154
163
- rtc_time_to_tm(readl(rtc_data->io + STMP3XXX_RTC_SECONDS), rtc_tm);
155
+ rtc_time64_to_tm(readl(rtc_data->io + STMP3XXX_RTC_SECONDS), rtc_tm);
164156 return 0;
165157 }
166158
167
-static int stmp3xxx_rtc_set_mmss(struct device *dev, unsigned long t)
159
+static int stmp3xxx_rtc_settime(struct device *dev, struct rtc_time *rtc_tm)
168160 {
169161 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
170162
171
- writel(t, rtc_data->io + STMP3XXX_RTC_SECONDS);
163
+ writel(rtc_tm_to_time64(rtc_tm), rtc_data->io + STMP3XXX_RTC_SECONDS);
172164 return stmp3xxx_wait_time(rtc_data);
173165 }
174166
....@@ -214,17 +206,15 @@
214206 {
215207 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
216208
217
- rtc_time_to_tm(readl(rtc_data->io + STMP3XXX_RTC_ALARM), &alm->time);
209
+ rtc_time64_to_tm(readl(rtc_data->io + STMP3XXX_RTC_ALARM), &alm->time);
218210 return 0;
219211 }
220212
221213 static int stmp3xxx_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm)
222214 {
223
- unsigned long t;
224215 struct stmp3xxx_rtc_data *rtc_data = dev_get_drvdata(dev);
225216
226
- rtc_tm_to_time(&alm->time, &t);
227
- writel(t, rtc_data->io + STMP3XXX_RTC_ALARM);
217
+ writel(rtc_tm_to_time64(&alm->time), rtc_data->io + STMP3XXX_RTC_ALARM);
228218
229219 stmp3xxx_alarm_irq_enable(dev, alm->enabled);
230220
....@@ -235,7 +225,7 @@
235225 .alarm_irq_enable =
236226 stmp3xxx_alarm_irq_enable,
237227 .read_time = stmp3xxx_rtc_gettime,
238
- .set_mmss = stmp3xxx_rtc_set_mmss,
228
+ .set_time = stmp3xxx_rtc_settime,
239229 .read_alarm = stmp3xxx_rtc_read_alarm,
240230 .set_alarm = stmp3xxx_rtc_set_alarm,
241231 };
....@@ -341,7 +331,7 @@
341331 default:
342332 dev_warn(&pdev->dev,
343333 "invalid crystal-freq specified in device-tree. Assuming no crystal\n");
344
- /* fall-through */
334
+ fallthrough;
345335 case 0:
346336 /* keep XTAL on in low-power mode */
347337 pers0_set = STMP3XXX_RTC_PERSISTENT0_XTAL24MHZ_PWRUP;
....@@ -361,8 +351,7 @@
361351 STMP3XXX_RTC_CTRL_ALARM_IRQ_EN,
362352 rtc_data->io + STMP3XXX_RTC_CTRL + STMP_OFFSET_REG_CLR);
363353
364
- rtc_data->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
365
- &stmp3xxx_rtc_ops, THIS_MODULE);
354
+ rtc_data->rtc = devm_rtc_allocate_device(&pdev->dev);
366355 if (IS_ERR(rtc_data->rtc))
367356 return PTR_ERR(rtc_data->rtc);
368357
....@@ -373,6 +362,13 @@
373362 rtc_data->irq_alarm);
374363 return err;
375364 }
365
+
366
+ rtc_data->rtc->ops = &stmp3xxx_rtc_ops;
367
+ rtc_data->rtc->range_max = U32_MAX;
368
+
369
+ err = rtc_register_device(rtc_data->rtc);
370
+ if (err)
371
+ return err;
376372
377373 stmp3xxx_wdt_register(pdev);
378374 return 0;
....@@ -420,5 +416,5 @@
420416
421417 MODULE_DESCRIPTION("STMP3xxx RTC Driver");
422418 MODULE_AUTHOR("dmitry pervushin <dpervushin@embeddedalley.com> and "
423
- "Wolfram Sang <w.sang@pengutronix.de>");
419
+ "Wolfram Sang <kernel@pengutronix.de>");
424420 MODULE_LICENSE("GPL");