Loading...
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) STMicroelectronics 2017
4 * Author: Amelie Delaunay <amelie.delaunay@st.com>
5 */
6
7#include <linux/bcd.h>
8#include <linux/clk.h>
9#include <linux/errno.h>
10#include <linux/iopoll.h>
11#include <linux/ioport.h>
12#include <linux/mfd/syscon.h>
13#include <linux/module.h>
14#include <linux/of.h>
15#include <linux/platform_device.h>
16#include <linux/pm_wakeirq.h>
17#include <linux/regmap.h>
18#include <linux/rtc.h>
19
20#define DRIVER_NAME "stm32_rtc"
21
22/* STM32_RTC_TR bit fields */
23#define STM32_RTC_TR_SEC_SHIFT 0
24#define STM32_RTC_TR_SEC GENMASK(6, 0)
25#define STM32_RTC_TR_MIN_SHIFT 8
26#define STM32_RTC_TR_MIN GENMASK(14, 8)
27#define STM32_RTC_TR_HOUR_SHIFT 16
28#define STM32_RTC_TR_HOUR GENMASK(21, 16)
29
30/* STM32_RTC_DR bit fields */
31#define STM32_RTC_DR_DATE_SHIFT 0
32#define STM32_RTC_DR_DATE GENMASK(5, 0)
33#define STM32_RTC_DR_MONTH_SHIFT 8
34#define STM32_RTC_DR_MONTH GENMASK(12, 8)
35#define STM32_RTC_DR_WDAY_SHIFT 13
36#define STM32_RTC_DR_WDAY GENMASK(15, 13)
37#define STM32_RTC_DR_YEAR_SHIFT 16
38#define STM32_RTC_DR_YEAR GENMASK(23, 16)
39
40/* STM32_RTC_CR bit fields */
41#define STM32_RTC_CR_FMT BIT(6)
42#define STM32_RTC_CR_ALRAE BIT(8)
43#define STM32_RTC_CR_ALRAIE BIT(12)
44
45/* STM32_RTC_ISR/STM32_RTC_ICSR bit fields */
46#define STM32_RTC_ISR_ALRAWF BIT(0)
47#define STM32_RTC_ISR_INITS BIT(4)
48#define STM32_RTC_ISR_RSF BIT(5)
49#define STM32_RTC_ISR_INITF BIT(6)
50#define STM32_RTC_ISR_INIT BIT(7)
51#define STM32_RTC_ISR_ALRAF BIT(8)
52
53/* STM32_RTC_PRER bit fields */
54#define STM32_RTC_PRER_PRED_S_SHIFT 0
55#define STM32_RTC_PRER_PRED_S GENMASK(14, 0)
56#define STM32_RTC_PRER_PRED_A_SHIFT 16
57#define STM32_RTC_PRER_PRED_A GENMASK(22, 16)
58
59/* STM32_RTC_ALRMAR and STM32_RTC_ALRMBR bit fields */
60#define STM32_RTC_ALRMXR_SEC_SHIFT 0
61#define STM32_RTC_ALRMXR_SEC GENMASK(6, 0)
62#define STM32_RTC_ALRMXR_SEC_MASK BIT(7)
63#define STM32_RTC_ALRMXR_MIN_SHIFT 8
64#define STM32_RTC_ALRMXR_MIN GENMASK(14, 8)
65#define STM32_RTC_ALRMXR_MIN_MASK BIT(15)
66#define STM32_RTC_ALRMXR_HOUR_SHIFT 16
67#define STM32_RTC_ALRMXR_HOUR GENMASK(21, 16)
68#define STM32_RTC_ALRMXR_PM BIT(22)
69#define STM32_RTC_ALRMXR_HOUR_MASK BIT(23)
70#define STM32_RTC_ALRMXR_DATE_SHIFT 24
71#define STM32_RTC_ALRMXR_DATE GENMASK(29, 24)
72#define STM32_RTC_ALRMXR_WDSEL BIT(30)
73#define STM32_RTC_ALRMXR_WDAY_SHIFT 24
74#define STM32_RTC_ALRMXR_WDAY GENMASK(27, 24)
75#define STM32_RTC_ALRMXR_DATE_MASK BIT(31)
76
77/* STM32_RTC_SR/_SCR bit fields */
78#define STM32_RTC_SR_ALRA BIT(0)
79
80/* STM32_RTC_VERR bit fields */
81#define STM32_RTC_VERR_MINREV_SHIFT 0
82#define STM32_RTC_VERR_MINREV GENMASK(3, 0)
83#define STM32_RTC_VERR_MAJREV_SHIFT 4
84#define STM32_RTC_VERR_MAJREV GENMASK(7, 4)
85
86/* STM32_RTC_WPR key constants */
87#define RTC_WPR_1ST_KEY 0xCA
88#define RTC_WPR_2ND_KEY 0x53
89#define RTC_WPR_WRONG_KEY 0xFF
90
91/* Max STM32 RTC register offset is 0x3FC */
92#define UNDEF_REG 0xFFFF
93
94/* STM32 RTC driver time helpers */
95#define SEC_PER_DAY (24 * 60 * 60)
96
97struct stm32_rtc;
98
99struct stm32_rtc_registers {
100 u16 tr;
101 u16 dr;
102 u16 cr;
103 u16 isr;
104 u16 prer;
105 u16 alrmar;
106 u16 wpr;
107 u16 sr;
108 u16 scr;
109 u16 verr;
110};
111
112struct stm32_rtc_events {
113 u32 alra;
114};
115
116struct stm32_rtc_data {
117 const struct stm32_rtc_registers regs;
118 const struct stm32_rtc_events events;
119 void (*clear_events)(struct stm32_rtc *rtc, unsigned int flags);
120 bool has_pclk;
121 bool need_dbp;
122 bool need_accuracy;
123};
124
125struct stm32_rtc {
126 struct rtc_device *rtc_dev;
127 void __iomem *base;
128 struct regmap *dbp;
129 unsigned int dbp_reg;
130 unsigned int dbp_mask;
131 struct clk *pclk;
132 struct clk *rtc_ck;
133 const struct stm32_rtc_data *data;
134 int irq_alarm;
135};
136
137static void stm32_rtc_wpr_unlock(struct stm32_rtc *rtc)
138{
139 const struct stm32_rtc_registers *regs = &rtc->data->regs;
140
141 writel_relaxed(RTC_WPR_1ST_KEY, rtc->base + regs->wpr);
142 writel_relaxed(RTC_WPR_2ND_KEY, rtc->base + regs->wpr);
143}
144
145static void stm32_rtc_wpr_lock(struct stm32_rtc *rtc)
146{
147 const struct stm32_rtc_registers *regs = &rtc->data->regs;
148
149 writel_relaxed(RTC_WPR_WRONG_KEY, rtc->base + regs->wpr);
150}
151
152static int stm32_rtc_enter_init_mode(struct stm32_rtc *rtc)
153{
154 const struct stm32_rtc_registers *regs = &rtc->data->regs;
155 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
156
157 if (!(isr & STM32_RTC_ISR_INITF)) {
158 isr |= STM32_RTC_ISR_INIT;
159 writel_relaxed(isr, rtc->base + regs->isr);
160
161 /*
162 * It takes around 2 rtc_ck clock cycles to enter in
163 * initialization phase mode (and have INITF flag set). As
164 * slowest rtc_ck frequency may be 32kHz and highest should be
165 * 1MHz, we poll every 10 us with a timeout of 100ms.
166 */
167 return readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr, isr,
168 (isr & STM32_RTC_ISR_INITF),
169 10, 100000);
170 }
171
172 return 0;
173}
174
175static void stm32_rtc_exit_init_mode(struct stm32_rtc *rtc)
176{
177 const struct stm32_rtc_registers *regs = &rtc->data->regs;
178 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
179
180 isr &= ~STM32_RTC_ISR_INIT;
181 writel_relaxed(isr, rtc->base + regs->isr);
182}
183
184static int stm32_rtc_wait_sync(struct stm32_rtc *rtc)
185{
186 const struct stm32_rtc_registers *regs = &rtc->data->regs;
187 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
188
189 isr &= ~STM32_RTC_ISR_RSF;
190 writel_relaxed(isr, rtc->base + regs->isr);
191
192 /*
193 * Wait for RSF to be set to ensure the calendar registers are
194 * synchronised, it takes around 2 rtc_ck clock cycles
195 */
196 return readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
197 isr,
198 (isr & STM32_RTC_ISR_RSF),
199 10, 100000);
200}
201
202static void stm32_rtc_clear_event_flags(struct stm32_rtc *rtc,
203 unsigned int flags)
204{
205 rtc->data->clear_events(rtc, flags);
206}
207
208static irqreturn_t stm32_rtc_alarm_irq(int irq, void *dev_id)
209{
210 struct stm32_rtc *rtc = (struct stm32_rtc *)dev_id;
211 const struct stm32_rtc_registers *regs = &rtc->data->regs;
212 const struct stm32_rtc_events *evts = &rtc->data->events;
213 unsigned int status, cr;
214
215 rtc_lock(rtc->rtc_dev);
216
217 status = readl_relaxed(rtc->base + regs->sr);
218 cr = readl_relaxed(rtc->base + regs->cr);
219
220 if ((status & evts->alra) &&
221 (cr & STM32_RTC_CR_ALRAIE)) {
222 /* Alarm A flag - Alarm interrupt */
223 dev_dbg(&rtc->rtc_dev->dev, "Alarm occurred\n");
224
225 /* Pass event to the kernel */
226 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
227
228 /* Clear event flags, otherwise new events won't be received */
229 stm32_rtc_clear_event_flags(rtc, evts->alra);
230 }
231
232 rtc_unlock(rtc->rtc_dev);
233
234 return IRQ_HANDLED;
235}
236
237/* Convert rtc_time structure from bin to bcd format */
238static void tm2bcd(struct rtc_time *tm)
239{
240 tm->tm_sec = bin2bcd(tm->tm_sec);
241 tm->tm_min = bin2bcd(tm->tm_min);
242 tm->tm_hour = bin2bcd(tm->tm_hour);
243
244 tm->tm_mday = bin2bcd(tm->tm_mday);
245 tm->tm_mon = bin2bcd(tm->tm_mon + 1);
246 tm->tm_year = bin2bcd(tm->tm_year - 100);
247 /*
248 * Number of days since Sunday
249 * - on kernel side, 0=Sunday...6=Saturday
250 * - on rtc side, 0=invalid,1=Monday...7=Sunday
251 */
252 tm->tm_wday = (!tm->tm_wday) ? 7 : tm->tm_wday;
253}
254
255/* Convert rtc_time structure from bcd to bin format */
256static void bcd2tm(struct rtc_time *tm)
257{
258 tm->tm_sec = bcd2bin(tm->tm_sec);
259 tm->tm_min = bcd2bin(tm->tm_min);
260 tm->tm_hour = bcd2bin(tm->tm_hour);
261
262 tm->tm_mday = bcd2bin(tm->tm_mday);
263 tm->tm_mon = bcd2bin(tm->tm_mon) - 1;
264 tm->tm_year = bcd2bin(tm->tm_year) + 100;
265 /*
266 * Number of days since Sunday
267 * - on kernel side, 0=Sunday...6=Saturday
268 * - on rtc side, 0=invalid,1=Monday...7=Sunday
269 */
270 tm->tm_wday %= 7;
271}
272
273static int stm32_rtc_read_time(struct device *dev, struct rtc_time *tm)
274{
275 struct stm32_rtc *rtc = dev_get_drvdata(dev);
276 const struct stm32_rtc_registers *regs = &rtc->data->regs;
277 unsigned int tr, dr;
278
279 /* Time and Date in BCD format */
280 tr = readl_relaxed(rtc->base + regs->tr);
281 dr = readl_relaxed(rtc->base + regs->dr);
282
283 tm->tm_sec = (tr & STM32_RTC_TR_SEC) >> STM32_RTC_TR_SEC_SHIFT;
284 tm->tm_min = (tr & STM32_RTC_TR_MIN) >> STM32_RTC_TR_MIN_SHIFT;
285 tm->tm_hour = (tr & STM32_RTC_TR_HOUR) >> STM32_RTC_TR_HOUR_SHIFT;
286
287 tm->tm_mday = (dr & STM32_RTC_DR_DATE) >> STM32_RTC_DR_DATE_SHIFT;
288 tm->tm_mon = (dr & STM32_RTC_DR_MONTH) >> STM32_RTC_DR_MONTH_SHIFT;
289 tm->tm_year = (dr & STM32_RTC_DR_YEAR) >> STM32_RTC_DR_YEAR_SHIFT;
290 tm->tm_wday = (dr & STM32_RTC_DR_WDAY) >> STM32_RTC_DR_WDAY_SHIFT;
291
292 /* We don't report tm_yday and tm_isdst */
293
294 bcd2tm(tm);
295
296 return 0;
297}
298
299static int stm32_rtc_set_time(struct device *dev, struct rtc_time *tm)
300{
301 struct stm32_rtc *rtc = dev_get_drvdata(dev);
302 const struct stm32_rtc_registers *regs = &rtc->data->regs;
303 unsigned int tr, dr;
304 int ret = 0;
305
306 tm2bcd(tm);
307
308 /* Time in BCD format */
309 tr = ((tm->tm_sec << STM32_RTC_TR_SEC_SHIFT) & STM32_RTC_TR_SEC) |
310 ((tm->tm_min << STM32_RTC_TR_MIN_SHIFT) & STM32_RTC_TR_MIN) |
311 ((tm->tm_hour << STM32_RTC_TR_HOUR_SHIFT) & STM32_RTC_TR_HOUR);
312
313 /* Date in BCD format */
314 dr = ((tm->tm_mday << STM32_RTC_DR_DATE_SHIFT) & STM32_RTC_DR_DATE) |
315 ((tm->tm_mon << STM32_RTC_DR_MONTH_SHIFT) & STM32_RTC_DR_MONTH) |
316 ((tm->tm_year << STM32_RTC_DR_YEAR_SHIFT) & STM32_RTC_DR_YEAR) |
317 ((tm->tm_wday << STM32_RTC_DR_WDAY_SHIFT) & STM32_RTC_DR_WDAY);
318
319 stm32_rtc_wpr_unlock(rtc);
320
321 ret = stm32_rtc_enter_init_mode(rtc);
322 if (ret) {
323 dev_err(dev, "Can't enter in init mode. Set time aborted.\n");
324 goto end;
325 }
326
327 writel_relaxed(tr, rtc->base + regs->tr);
328 writel_relaxed(dr, rtc->base + regs->dr);
329
330 stm32_rtc_exit_init_mode(rtc);
331
332 ret = stm32_rtc_wait_sync(rtc);
333end:
334 stm32_rtc_wpr_lock(rtc);
335
336 return ret;
337}
338
339static int stm32_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
340{
341 struct stm32_rtc *rtc = dev_get_drvdata(dev);
342 const struct stm32_rtc_registers *regs = &rtc->data->regs;
343 const struct stm32_rtc_events *evts = &rtc->data->events;
344 struct rtc_time *tm = &alrm->time;
345 unsigned int alrmar, cr, status;
346
347 alrmar = readl_relaxed(rtc->base + regs->alrmar);
348 cr = readl_relaxed(rtc->base + regs->cr);
349 status = readl_relaxed(rtc->base + regs->sr);
350
351 if (alrmar & STM32_RTC_ALRMXR_DATE_MASK) {
352 /*
353 * Date/day doesn't matter in Alarm comparison so alarm
354 * triggers every day
355 */
356 tm->tm_mday = -1;
357 tm->tm_wday = -1;
358 } else {
359 if (alrmar & STM32_RTC_ALRMXR_WDSEL) {
360 /* Alarm is set to a day of week */
361 tm->tm_mday = -1;
362 tm->tm_wday = (alrmar & STM32_RTC_ALRMXR_WDAY) >>
363 STM32_RTC_ALRMXR_WDAY_SHIFT;
364 tm->tm_wday %= 7;
365 } else {
366 /* Alarm is set to a day of month */
367 tm->tm_wday = -1;
368 tm->tm_mday = (alrmar & STM32_RTC_ALRMXR_DATE) >>
369 STM32_RTC_ALRMXR_DATE_SHIFT;
370 }
371 }
372
373 if (alrmar & STM32_RTC_ALRMXR_HOUR_MASK) {
374 /* Hours don't matter in Alarm comparison */
375 tm->tm_hour = -1;
376 } else {
377 tm->tm_hour = (alrmar & STM32_RTC_ALRMXR_HOUR) >>
378 STM32_RTC_ALRMXR_HOUR_SHIFT;
379 if (alrmar & STM32_RTC_ALRMXR_PM)
380 tm->tm_hour += 12;
381 }
382
383 if (alrmar & STM32_RTC_ALRMXR_MIN_MASK) {
384 /* Minutes don't matter in Alarm comparison */
385 tm->tm_min = -1;
386 } else {
387 tm->tm_min = (alrmar & STM32_RTC_ALRMXR_MIN) >>
388 STM32_RTC_ALRMXR_MIN_SHIFT;
389 }
390
391 if (alrmar & STM32_RTC_ALRMXR_SEC_MASK) {
392 /* Seconds don't matter in Alarm comparison */
393 tm->tm_sec = -1;
394 } else {
395 tm->tm_sec = (alrmar & STM32_RTC_ALRMXR_SEC) >>
396 STM32_RTC_ALRMXR_SEC_SHIFT;
397 }
398
399 bcd2tm(tm);
400
401 alrm->enabled = (cr & STM32_RTC_CR_ALRAE) ? 1 : 0;
402 alrm->pending = (status & evts->alra) ? 1 : 0;
403
404 return 0;
405}
406
407static int stm32_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
408{
409 struct stm32_rtc *rtc = dev_get_drvdata(dev);
410 const struct stm32_rtc_registers *regs = &rtc->data->regs;
411 const struct stm32_rtc_events *evts = &rtc->data->events;
412 unsigned int cr;
413
414 cr = readl_relaxed(rtc->base + regs->cr);
415
416 stm32_rtc_wpr_unlock(rtc);
417
418 /* We expose Alarm A to the kernel */
419 if (enabled)
420 cr |= (STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
421 else
422 cr &= ~(STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
423 writel_relaxed(cr, rtc->base + regs->cr);
424
425 /* Clear event flags, otherwise new events won't be received */
426 stm32_rtc_clear_event_flags(rtc, evts->alra);
427
428 stm32_rtc_wpr_lock(rtc);
429
430 return 0;
431}
432
433static int stm32_rtc_valid_alrm(struct device *dev, struct rtc_time *tm)
434{
435 static struct rtc_time now;
436 time64_t max_alarm_time64;
437 int max_day_forward;
438 int next_month;
439 int next_year;
440
441 /*
442 * Assuming current date is M-D-Y H:M:S.
443 * RTC alarm can't be set on a specific month and year.
444 * So the valid alarm range is:
445 * M-D-Y H:M:S < alarm <= (M+1)-D-Y H:M:S
446 */
447 stm32_rtc_read_time(dev, &now);
448
449 /*
450 * Find the next month and the year of the next month.
451 * Note: tm_mon and next_month are from 0 to 11
452 */
453 next_month = now.tm_mon + 1;
454 if (next_month == 12) {
455 next_month = 0;
456 next_year = now.tm_year + 1;
457 } else {
458 next_year = now.tm_year;
459 }
460
461 /* Find the maximum limit of alarm in days. */
462 max_day_forward = rtc_month_days(now.tm_mon, now.tm_year)
463 - now.tm_mday
464 + min(rtc_month_days(next_month, next_year), now.tm_mday);
465
466 /* Convert to timestamp and compare the alarm time and its upper limit */
467 max_alarm_time64 = rtc_tm_to_time64(&now) + max_day_forward * SEC_PER_DAY;
468 return rtc_tm_to_time64(tm) <= max_alarm_time64 ? 0 : -EINVAL;
469}
470
471static int stm32_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
472{
473 struct stm32_rtc *rtc = dev_get_drvdata(dev);
474 const struct stm32_rtc_registers *regs = &rtc->data->regs;
475 struct rtc_time *tm = &alrm->time;
476 unsigned int cr, isr, alrmar;
477 int ret = 0;
478
479 /*
480 * RTC alarm can't be set on a specific date, unless this date is
481 * up to the same day of month next month.
482 */
483 if (stm32_rtc_valid_alrm(dev, tm) < 0) {
484 dev_err(dev, "Alarm can be set only on upcoming month.\n");
485 return -EINVAL;
486 }
487
488 tm2bcd(tm);
489
490 alrmar = 0;
491 /* tm_year and tm_mon are not used because not supported by RTC */
492 alrmar |= (tm->tm_mday << STM32_RTC_ALRMXR_DATE_SHIFT) &
493 STM32_RTC_ALRMXR_DATE;
494 /* 24-hour format */
495 alrmar &= ~STM32_RTC_ALRMXR_PM;
496 alrmar |= (tm->tm_hour << STM32_RTC_ALRMXR_HOUR_SHIFT) &
497 STM32_RTC_ALRMXR_HOUR;
498 alrmar |= (tm->tm_min << STM32_RTC_ALRMXR_MIN_SHIFT) &
499 STM32_RTC_ALRMXR_MIN;
500 alrmar |= (tm->tm_sec << STM32_RTC_ALRMXR_SEC_SHIFT) &
501 STM32_RTC_ALRMXR_SEC;
502
503 stm32_rtc_wpr_unlock(rtc);
504
505 /* Disable Alarm */
506 cr = readl_relaxed(rtc->base + regs->cr);
507 cr &= ~STM32_RTC_CR_ALRAE;
508 writel_relaxed(cr, rtc->base + regs->cr);
509
510 /*
511 * Poll Alarm write flag to be sure that Alarm update is allowed: it
512 * takes around 2 rtc_ck clock cycles
513 */
514 ret = readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
515 isr,
516 (isr & STM32_RTC_ISR_ALRAWF),
517 10, 100000);
518
519 if (ret) {
520 dev_err(dev, "Alarm update not allowed\n");
521 goto end;
522 }
523
524 /* Write to Alarm register */
525 writel_relaxed(alrmar, rtc->base + regs->alrmar);
526
527 stm32_rtc_alarm_irq_enable(dev, alrm->enabled);
528end:
529 stm32_rtc_wpr_lock(rtc);
530
531 return ret;
532}
533
534static const struct rtc_class_ops stm32_rtc_ops = {
535 .read_time = stm32_rtc_read_time,
536 .set_time = stm32_rtc_set_time,
537 .read_alarm = stm32_rtc_read_alarm,
538 .set_alarm = stm32_rtc_set_alarm,
539 .alarm_irq_enable = stm32_rtc_alarm_irq_enable,
540};
541
542static void stm32_rtc_clear_events(struct stm32_rtc *rtc,
543 unsigned int flags)
544{
545 const struct stm32_rtc_registers *regs = &rtc->data->regs;
546
547 /* Flags are cleared by writing 0 in RTC_ISR */
548 writel_relaxed(readl_relaxed(rtc->base + regs->isr) & ~flags,
549 rtc->base + regs->isr);
550}
551
552static const struct stm32_rtc_data stm32_rtc_data = {
553 .has_pclk = false,
554 .need_dbp = true,
555 .need_accuracy = false,
556 .regs = {
557 .tr = 0x00,
558 .dr = 0x04,
559 .cr = 0x08,
560 .isr = 0x0C,
561 .prer = 0x10,
562 .alrmar = 0x1C,
563 .wpr = 0x24,
564 .sr = 0x0C, /* set to ISR offset to ease alarm management */
565 .scr = UNDEF_REG,
566 .verr = UNDEF_REG,
567 },
568 .events = {
569 .alra = STM32_RTC_ISR_ALRAF,
570 },
571 .clear_events = stm32_rtc_clear_events,
572};
573
574static const struct stm32_rtc_data stm32h7_rtc_data = {
575 .has_pclk = true,
576 .need_dbp = true,
577 .need_accuracy = false,
578 .regs = {
579 .tr = 0x00,
580 .dr = 0x04,
581 .cr = 0x08,
582 .isr = 0x0C,
583 .prer = 0x10,
584 .alrmar = 0x1C,
585 .wpr = 0x24,
586 .sr = 0x0C, /* set to ISR offset to ease alarm management */
587 .scr = UNDEF_REG,
588 .verr = UNDEF_REG,
589 },
590 .events = {
591 .alra = STM32_RTC_ISR_ALRAF,
592 },
593 .clear_events = stm32_rtc_clear_events,
594};
595
596static void stm32mp1_rtc_clear_events(struct stm32_rtc *rtc,
597 unsigned int flags)
598{
599 struct stm32_rtc_registers regs = rtc->data->regs;
600
601 /* Flags are cleared by writing 1 in RTC_SCR */
602 writel_relaxed(flags, rtc->base + regs.scr);
603}
604
605static const struct stm32_rtc_data stm32mp1_data = {
606 .has_pclk = true,
607 .need_dbp = false,
608 .need_accuracy = true,
609 .regs = {
610 .tr = 0x00,
611 .dr = 0x04,
612 .cr = 0x18,
613 .isr = 0x0C, /* named RTC_ICSR on stm32mp1 */
614 .prer = 0x10,
615 .alrmar = 0x40,
616 .wpr = 0x24,
617 .sr = 0x50,
618 .scr = 0x5C,
619 .verr = 0x3F4,
620 },
621 .events = {
622 .alra = STM32_RTC_SR_ALRA,
623 },
624 .clear_events = stm32mp1_rtc_clear_events,
625};
626
627static const struct of_device_id stm32_rtc_of_match[] = {
628 { .compatible = "st,stm32-rtc", .data = &stm32_rtc_data },
629 { .compatible = "st,stm32h7-rtc", .data = &stm32h7_rtc_data },
630 { .compatible = "st,stm32mp1-rtc", .data = &stm32mp1_data },
631 {}
632};
633MODULE_DEVICE_TABLE(of, stm32_rtc_of_match);
634
635static int stm32_rtc_init(struct platform_device *pdev,
636 struct stm32_rtc *rtc)
637{
638 const struct stm32_rtc_registers *regs = &rtc->data->regs;
639 unsigned int prer, pred_a, pred_s, pred_a_max, pred_s_max, cr;
640 unsigned int rate;
641 int ret;
642
643 rate = clk_get_rate(rtc->rtc_ck);
644
645 /* Find prediv_a and prediv_s to obtain the 1Hz calendar clock */
646 pred_a_max = STM32_RTC_PRER_PRED_A >> STM32_RTC_PRER_PRED_A_SHIFT;
647 pred_s_max = STM32_RTC_PRER_PRED_S >> STM32_RTC_PRER_PRED_S_SHIFT;
648
649 if (rate > (pred_a_max + 1) * (pred_s_max + 1)) {
650 dev_err(&pdev->dev, "rtc_ck rate is too high: %dHz\n", rate);
651 return -EINVAL;
652 }
653
654 if (rtc->data->need_accuracy) {
655 for (pred_a = 0; pred_a <= pred_a_max; pred_a++) {
656 pred_s = (rate / (pred_a + 1)) - 1;
657
658 if (pred_s <= pred_s_max && ((pred_s + 1) * (pred_a + 1)) == rate)
659 break;
660 }
661 } else {
662 for (pred_a = pred_a_max; pred_a + 1 > 0; pred_a--) {
663 pred_s = (rate / (pred_a + 1)) - 1;
664
665 if (((pred_s + 1) * (pred_a + 1)) == rate)
666 break;
667 }
668 }
669
670 /*
671 * Can't find a 1Hz, so give priority to RTC power consumption
672 * by choosing the higher possible value for prediv_a
673 */
674 if (pred_s > pred_s_max || pred_a > pred_a_max) {
675 pred_a = pred_a_max;
676 pred_s = (rate / (pred_a + 1)) - 1;
677
678 dev_warn(&pdev->dev, "rtc_ck is %s\n",
679 (rate < ((pred_a + 1) * (pred_s + 1))) ?
680 "fast" : "slow");
681 }
682
683 cr = readl_relaxed(rtc->base + regs->cr);
684
685 prer = readl_relaxed(rtc->base + regs->prer);
686 prer &= STM32_RTC_PRER_PRED_S | STM32_RTC_PRER_PRED_A;
687
688 pred_s = (pred_s << STM32_RTC_PRER_PRED_S_SHIFT) &
689 STM32_RTC_PRER_PRED_S;
690 pred_a = (pred_a << STM32_RTC_PRER_PRED_A_SHIFT) &
691 STM32_RTC_PRER_PRED_A;
692
693 /* quit if there is nothing to initialize */
694 if ((cr & STM32_RTC_CR_FMT) == 0 && prer == (pred_s | pred_a))
695 return 0;
696
697 stm32_rtc_wpr_unlock(rtc);
698
699 ret = stm32_rtc_enter_init_mode(rtc);
700 if (ret) {
701 dev_err(&pdev->dev,
702 "Can't enter in init mode. Prescaler config failed.\n");
703 goto end;
704 }
705
706 writel_relaxed(pred_s, rtc->base + regs->prer);
707 writel_relaxed(pred_a | pred_s, rtc->base + regs->prer);
708
709 /* Force 24h time format */
710 cr &= ~STM32_RTC_CR_FMT;
711 writel_relaxed(cr, rtc->base + regs->cr);
712
713 stm32_rtc_exit_init_mode(rtc);
714
715 ret = stm32_rtc_wait_sync(rtc);
716end:
717 stm32_rtc_wpr_lock(rtc);
718
719 return ret;
720}
721
722static int stm32_rtc_probe(struct platform_device *pdev)
723{
724 struct stm32_rtc *rtc;
725 const struct stm32_rtc_registers *regs;
726 int ret;
727
728 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
729 if (!rtc)
730 return -ENOMEM;
731
732 rtc->base = devm_platform_ioremap_resource(pdev, 0);
733 if (IS_ERR(rtc->base))
734 return PTR_ERR(rtc->base);
735
736 rtc->data = (struct stm32_rtc_data *)
737 of_device_get_match_data(&pdev->dev);
738 regs = &rtc->data->regs;
739
740 if (rtc->data->need_dbp) {
741 rtc->dbp = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
742 "st,syscfg");
743 if (IS_ERR(rtc->dbp)) {
744 dev_err(&pdev->dev, "no st,syscfg\n");
745 return PTR_ERR(rtc->dbp);
746 }
747
748 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
749 1, &rtc->dbp_reg);
750 if (ret) {
751 dev_err(&pdev->dev, "can't read DBP register offset\n");
752 return ret;
753 }
754
755 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
756 2, &rtc->dbp_mask);
757 if (ret) {
758 dev_err(&pdev->dev, "can't read DBP register mask\n");
759 return ret;
760 }
761 }
762
763 if (!rtc->data->has_pclk) {
764 rtc->pclk = NULL;
765 rtc->rtc_ck = devm_clk_get(&pdev->dev, NULL);
766 } else {
767 rtc->pclk = devm_clk_get(&pdev->dev, "pclk");
768 if (IS_ERR(rtc->pclk))
769 return dev_err_probe(&pdev->dev, PTR_ERR(rtc->pclk), "no pclk clock");
770
771 rtc->rtc_ck = devm_clk_get(&pdev->dev, "rtc_ck");
772 }
773 if (IS_ERR(rtc->rtc_ck))
774 return dev_err_probe(&pdev->dev, PTR_ERR(rtc->rtc_ck), "no rtc_ck clock");
775
776 if (rtc->data->has_pclk) {
777 ret = clk_prepare_enable(rtc->pclk);
778 if (ret)
779 return ret;
780 }
781
782 ret = clk_prepare_enable(rtc->rtc_ck);
783 if (ret)
784 goto err_no_rtc_ck;
785
786 if (rtc->data->need_dbp)
787 regmap_update_bits(rtc->dbp, rtc->dbp_reg,
788 rtc->dbp_mask, rtc->dbp_mask);
789
790 /*
791 * After a system reset, RTC_ISR.INITS flag can be read to check if
792 * the calendar has been initialized or not. INITS flag is reset by a
793 * power-on reset (no vbat, no power-supply). It is not reset if
794 * rtc_ck parent clock has changed (so RTC prescalers need to be
795 * changed). That's why we cannot rely on this flag to know if RTC
796 * init has to be done.
797 */
798 ret = stm32_rtc_init(pdev, rtc);
799 if (ret)
800 goto err;
801
802 rtc->irq_alarm = platform_get_irq(pdev, 0);
803 if (rtc->irq_alarm <= 0) {
804 ret = rtc->irq_alarm;
805 goto err;
806 }
807
808 ret = device_init_wakeup(&pdev->dev, true);
809 if (ret)
810 goto err;
811
812 ret = dev_pm_set_wake_irq(&pdev->dev, rtc->irq_alarm);
813 if (ret)
814 goto err;
815
816 platform_set_drvdata(pdev, rtc);
817
818 rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name,
819 &stm32_rtc_ops, THIS_MODULE);
820 if (IS_ERR(rtc->rtc_dev)) {
821 ret = PTR_ERR(rtc->rtc_dev);
822 dev_err(&pdev->dev, "rtc device registration failed, err=%d\n",
823 ret);
824 goto err;
825 }
826
827 /* Handle RTC alarm interrupts */
828 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_alarm, NULL,
829 stm32_rtc_alarm_irq, IRQF_ONESHOT,
830 pdev->name, rtc);
831 if (ret) {
832 dev_err(&pdev->dev, "IRQ%d (alarm interrupt) already claimed\n",
833 rtc->irq_alarm);
834 goto err;
835 }
836
837 /*
838 * If INITS flag is reset (calendar year field set to 0x00), calendar
839 * must be initialized
840 */
841 if (!(readl_relaxed(rtc->base + regs->isr) & STM32_RTC_ISR_INITS))
842 dev_warn(&pdev->dev, "Date/Time must be initialized\n");
843
844 if (regs->verr != UNDEF_REG) {
845 u32 ver = readl_relaxed(rtc->base + regs->verr);
846
847 dev_info(&pdev->dev, "registered rev:%d.%d\n",
848 (ver >> STM32_RTC_VERR_MAJREV_SHIFT) & 0xF,
849 (ver >> STM32_RTC_VERR_MINREV_SHIFT) & 0xF);
850 }
851
852 return 0;
853
854err:
855 clk_disable_unprepare(rtc->rtc_ck);
856err_no_rtc_ck:
857 if (rtc->data->has_pclk)
858 clk_disable_unprepare(rtc->pclk);
859
860 if (rtc->data->need_dbp)
861 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
862
863 dev_pm_clear_wake_irq(&pdev->dev);
864 device_init_wakeup(&pdev->dev, false);
865
866 return ret;
867}
868
869static void stm32_rtc_remove(struct platform_device *pdev)
870{
871 struct stm32_rtc *rtc = platform_get_drvdata(pdev);
872 const struct stm32_rtc_registers *regs = &rtc->data->regs;
873 unsigned int cr;
874
875 /* Disable interrupts */
876 stm32_rtc_wpr_unlock(rtc);
877 cr = readl_relaxed(rtc->base + regs->cr);
878 cr &= ~STM32_RTC_CR_ALRAIE;
879 writel_relaxed(cr, rtc->base + regs->cr);
880 stm32_rtc_wpr_lock(rtc);
881
882 clk_disable_unprepare(rtc->rtc_ck);
883 if (rtc->data->has_pclk)
884 clk_disable_unprepare(rtc->pclk);
885
886 /* Enable backup domain write protection if needed */
887 if (rtc->data->need_dbp)
888 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
889
890 dev_pm_clear_wake_irq(&pdev->dev);
891 device_init_wakeup(&pdev->dev, false);
892}
893
894static int stm32_rtc_suspend(struct device *dev)
895{
896 struct stm32_rtc *rtc = dev_get_drvdata(dev);
897
898 if (rtc->data->has_pclk)
899 clk_disable_unprepare(rtc->pclk);
900
901 return 0;
902}
903
904static int stm32_rtc_resume(struct device *dev)
905{
906 struct stm32_rtc *rtc = dev_get_drvdata(dev);
907 int ret = 0;
908
909 if (rtc->data->has_pclk) {
910 ret = clk_prepare_enable(rtc->pclk);
911 if (ret)
912 return ret;
913 }
914
915 ret = stm32_rtc_wait_sync(rtc);
916 if (ret < 0) {
917 if (rtc->data->has_pclk)
918 clk_disable_unprepare(rtc->pclk);
919 return ret;
920 }
921
922 return ret;
923}
924
925static const struct dev_pm_ops stm32_rtc_pm_ops = {
926 NOIRQ_SYSTEM_SLEEP_PM_OPS(stm32_rtc_suspend, stm32_rtc_resume)
927};
928
929static struct platform_driver stm32_rtc_driver = {
930 .probe = stm32_rtc_probe,
931 .remove_new = stm32_rtc_remove,
932 .driver = {
933 .name = DRIVER_NAME,
934 .pm = &stm32_rtc_pm_ops,
935 .of_match_table = stm32_rtc_of_match,
936 },
937};
938
939module_platform_driver(stm32_rtc_driver);
940
941MODULE_ALIAS("platform:" DRIVER_NAME);
942MODULE_AUTHOR("Amelie Delaunay <amelie.delaunay@st.com>");
943MODULE_DESCRIPTION("STMicroelectronics STM32 Real Time Clock driver");
944MODULE_LICENSE("GPL v2");
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) STMicroelectronics 2017
4 * Author: Amelie Delaunay <amelie.delaunay@st.com>
5 */
6
7#include <linux/bcd.h>
8#include <linux/clk.h>
9#include <linux/iopoll.h>
10#include <linux/ioport.h>
11#include <linux/mfd/syscon.h>
12#include <linux/module.h>
13#include <linux/of_device.h>
14#include <linux/pm_wakeirq.h>
15#include <linux/regmap.h>
16#include <linux/rtc.h>
17
18#define DRIVER_NAME "stm32_rtc"
19
20/* STM32_RTC_TR bit fields */
21#define STM32_RTC_TR_SEC_SHIFT 0
22#define STM32_RTC_TR_SEC GENMASK(6, 0)
23#define STM32_RTC_TR_MIN_SHIFT 8
24#define STM32_RTC_TR_MIN GENMASK(14, 8)
25#define STM32_RTC_TR_HOUR_SHIFT 16
26#define STM32_RTC_TR_HOUR GENMASK(21, 16)
27
28/* STM32_RTC_DR bit fields */
29#define STM32_RTC_DR_DATE_SHIFT 0
30#define STM32_RTC_DR_DATE GENMASK(5, 0)
31#define STM32_RTC_DR_MONTH_SHIFT 8
32#define STM32_RTC_DR_MONTH GENMASK(12, 8)
33#define STM32_RTC_DR_WDAY_SHIFT 13
34#define STM32_RTC_DR_WDAY GENMASK(15, 13)
35#define STM32_RTC_DR_YEAR_SHIFT 16
36#define STM32_RTC_DR_YEAR GENMASK(23, 16)
37
38/* STM32_RTC_CR bit fields */
39#define STM32_RTC_CR_FMT BIT(6)
40#define STM32_RTC_CR_ALRAE BIT(8)
41#define STM32_RTC_CR_ALRAIE BIT(12)
42
43/* STM32_RTC_ISR/STM32_RTC_ICSR bit fields */
44#define STM32_RTC_ISR_ALRAWF BIT(0)
45#define STM32_RTC_ISR_INITS BIT(4)
46#define STM32_RTC_ISR_RSF BIT(5)
47#define STM32_RTC_ISR_INITF BIT(6)
48#define STM32_RTC_ISR_INIT BIT(7)
49#define STM32_RTC_ISR_ALRAF BIT(8)
50
51/* STM32_RTC_PRER bit fields */
52#define STM32_RTC_PRER_PRED_S_SHIFT 0
53#define STM32_RTC_PRER_PRED_S GENMASK(14, 0)
54#define STM32_RTC_PRER_PRED_A_SHIFT 16
55#define STM32_RTC_PRER_PRED_A GENMASK(22, 16)
56
57/* STM32_RTC_ALRMAR and STM32_RTC_ALRMBR bit fields */
58#define STM32_RTC_ALRMXR_SEC_SHIFT 0
59#define STM32_RTC_ALRMXR_SEC GENMASK(6, 0)
60#define STM32_RTC_ALRMXR_SEC_MASK BIT(7)
61#define STM32_RTC_ALRMXR_MIN_SHIFT 8
62#define STM32_RTC_ALRMXR_MIN GENMASK(14, 8)
63#define STM32_RTC_ALRMXR_MIN_MASK BIT(15)
64#define STM32_RTC_ALRMXR_HOUR_SHIFT 16
65#define STM32_RTC_ALRMXR_HOUR GENMASK(21, 16)
66#define STM32_RTC_ALRMXR_PM BIT(22)
67#define STM32_RTC_ALRMXR_HOUR_MASK BIT(23)
68#define STM32_RTC_ALRMXR_DATE_SHIFT 24
69#define STM32_RTC_ALRMXR_DATE GENMASK(29, 24)
70#define STM32_RTC_ALRMXR_WDSEL BIT(30)
71#define STM32_RTC_ALRMXR_WDAY_SHIFT 24
72#define STM32_RTC_ALRMXR_WDAY GENMASK(27, 24)
73#define STM32_RTC_ALRMXR_DATE_MASK BIT(31)
74
75/* STM32_RTC_SR/_SCR bit fields */
76#define STM32_RTC_SR_ALRA BIT(0)
77
78/* STM32_RTC_VERR bit fields */
79#define STM32_RTC_VERR_MINREV_SHIFT 0
80#define STM32_RTC_VERR_MINREV GENMASK(3, 0)
81#define STM32_RTC_VERR_MAJREV_SHIFT 4
82#define STM32_RTC_VERR_MAJREV GENMASK(7, 4)
83
84/* STM32_RTC_WPR key constants */
85#define RTC_WPR_1ST_KEY 0xCA
86#define RTC_WPR_2ND_KEY 0x53
87#define RTC_WPR_WRONG_KEY 0xFF
88
89/* Max STM32 RTC register offset is 0x3FC */
90#define UNDEF_REG 0xFFFF
91
92struct stm32_rtc;
93
94struct stm32_rtc_registers {
95 u16 tr;
96 u16 dr;
97 u16 cr;
98 u16 isr;
99 u16 prer;
100 u16 alrmar;
101 u16 wpr;
102 u16 sr;
103 u16 scr;
104 u16 verr;
105};
106
107struct stm32_rtc_events {
108 u32 alra;
109};
110
111struct stm32_rtc_data {
112 const struct stm32_rtc_registers regs;
113 const struct stm32_rtc_events events;
114 void (*clear_events)(struct stm32_rtc *rtc, unsigned int flags);
115 bool has_pclk;
116 bool need_dbp;
117 bool has_wakeirq;
118};
119
120struct stm32_rtc {
121 struct rtc_device *rtc_dev;
122 void __iomem *base;
123 struct regmap *dbp;
124 unsigned int dbp_reg;
125 unsigned int dbp_mask;
126 struct clk *pclk;
127 struct clk *rtc_ck;
128 const struct stm32_rtc_data *data;
129 int irq_alarm;
130 int wakeirq_alarm;
131};
132
133static void stm32_rtc_wpr_unlock(struct stm32_rtc *rtc)
134{
135 const struct stm32_rtc_registers *regs = &rtc->data->regs;
136
137 writel_relaxed(RTC_WPR_1ST_KEY, rtc->base + regs->wpr);
138 writel_relaxed(RTC_WPR_2ND_KEY, rtc->base + regs->wpr);
139}
140
141static void stm32_rtc_wpr_lock(struct stm32_rtc *rtc)
142{
143 const struct stm32_rtc_registers *regs = &rtc->data->regs;
144
145 writel_relaxed(RTC_WPR_WRONG_KEY, rtc->base + regs->wpr);
146}
147
148static int stm32_rtc_enter_init_mode(struct stm32_rtc *rtc)
149{
150 const struct stm32_rtc_registers *regs = &rtc->data->regs;
151 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
152
153 if (!(isr & STM32_RTC_ISR_INITF)) {
154 isr |= STM32_RTC_ISR_INIT;
155 writel_relaxed(isr, rtc->base + regs->isr);
156
157 /*
158 * It takes around 2 rtc_ck clock cycles to enter in
159 * initialization phase mode (and have INITF flag set). As
160 * slowest rtc_ck frequency may be 32kHz and highest should be
161 * 1MHz, we poll every 10 us with a timeout of 100ms.
162 */
163 return readl_relaxed_poll_timeout_atomic(
164 rtc->base + regs->isr,
165 isr, (isr & STM32_RTC_ISR_INITF),
166 10, 100000);
167 }
168
169 return 0;
170}
171
172static void stm32_rtc_exit_init_mode(struct stm32_rtc *rtc)
173{
174 const struct stm32_rtc_registers *regs = &rtc->data->regs;
175 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
176
177 isr &= ~STM32_RTC_ISR_INIT;
178 writel_relaxed(isr, rtc->base + regs->isr);
179}
180
181static int stm32_rtc_wait_sync(struct stm32_rtc *rtc)
182{
183 const struct stm32_rtc_registers *regs = &rtc->data->regs;
184 unsigned int isr = readl_relaxed(rtc->base + regs->isr);
185
186 isr &= ~STM32_RTC_ISR_RSF;
187 writel_relaxed(isr, rtc->base + regs->isr);
188
189 /*
190 * Wait for RSF to be set to ensure the calendar registers are
191 * synchronised, it takes around 2 rtc_ck clock cycles
192 */
193 return readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
194 isr,
195 (isr & STM32_RTC_ISR_RSF),
196 10, 100000);
197}
198
199static void stm32_rtc_clear_event_flags(struct stm32_rtc *rtc,
200 unsigned int flags)
201{
202 rtc->data->clear_events(rtc, flags);
203}
204
205static irqreturn_t stm32_rtc_alarm_irq(int irq, void *dev_id)
206{
207 struct stm32_rtc *rtc = (struct stm32_rtc *)dev_id;
208 const struct stm32_rtc_registers *regs = &rtc->data->regs;
209 const struct stm32_rtc_events *evts = &rtc->data->events;
210 unsigned int status, cr;
211
212 mutex_lock(&rtc->rtc_dev->ops_lock);
213
214 status = readl_relaxed(rtc->base + regs->sr);
215 cr = readl_relaxed(rtc->base + regs->cr);
216
217 if ((status & evts->alra) &&
218 (cr & STM32_RTC_CR_ALRAIE)) {
219 /* Alarm A flag - Alarm interrupt */
220 dev_dbg(&rtc->rtc_dev->dev, "Alarm occurred\n");
221
222 /* Pass event to the kernel */
223 rtc_update_irq(rtc->rtc_dev, 1, RTC_IRQF | RTC_AF);
224
225 /* Clear event flags, otherwise new events won't be received */
226 stm32_rtc_clear_event_flags(rtc, evts->alra);
227 }
228
229 mutex_unlock(&rtc->rtc_dev->ops_lock);
230
231 return IRQ_HANDLED;
232}
233
234/* Convert rtc_time structure from bin to bcd format */
235static void tm2bcd(struct rtc_time *tm)
236{
237 tm->tm_sec = bin2bcd(tm->tm_sec);
238 tm->tm_min = bin2bcd(tm->tm_min);
239 tm->tm_hour = bin2bcd(tm->tm_hour);
240
241 tm->tm_mday = bin2bcd(tm->tm_mday);
242 tm->tm_mon = bin2bcd(tm->tm_mon + 1);
243 tm->tm_year = bin2bcd(tm->tm_year - 100);
244 /*
245 * Number of days since Sunday
246 * - on kernel side, 0=Sunday...6=Saturday
247 * - on rtc side, 0=invalid,1=Monday...7=Sunday
248 */
249 tm->tm_wday = (!tm->tm_wday) ? 7 : tm->tm_wday;
250}
251
252/* Convert rtc_time structure from bcd to bin format */
253static void bcd2tm(struct rtc_time *tm)
254{
255 tm->tm_sec = bcd2bin(tm->tm_sec);
256 tm->tm_min = bcd2bin(tm->tm_min);
257 tm->tm_hour = bcd2bin(tm->tm_hour);
258
259 tm->tm_mday = bcd2bin(tm->tm_mday);
260 tm->tm_mon = bcd2bin(tm->tm_mon) - 1;
261 tm->tm_year = bcd2bin(tm->tm_year) + 100;
262 /*
263 * Number of days since Sunday
264 * - on kernel side, 0=Sunday...6=Saturday
265 * - on rtc side, 0=invalid,1=Monday...7=Sunday
266 */
267 tm->tm_wday %= 7;
268}
269
270static int stm32_rtc_read_time(struct device *dev, struct rtc_time *tm)
271{
272 struct stm32_rtc *rtc = dev_get_drvdata(dev);
273 const struct stm32_rtc_registers *regs = &rtc->data->regs;
274 unsigned int tr, dr;
275
276 /* Time and Date in BCD format */
277 tr = readl_relaxed(rtc->base + regs->tr);
278 dr = readl_relaxed(rtc->base + regs->dr);
279
280 tm->tm_sec = (tr & STM32_RTC_TR_SEC) >> STM32_RTC_TR_SEC_SHIFT;
281 tm->tm_min = (tr & STM32_RTC_TR_MIN) >> STM32_RTC_TR_MIN_SHIFT;
282 tm->tm_hour = (tr & STM32_RTC_TR_HOUR) >> STM32_RTC_TR_HOUR_SHIFT;
283
284 tm->tm_mday = (dr & STM32_RTC_DR_DATE) >> STM32_RTC_DR_DATE_SHIFT;
285 tm->tm_mon = (dr & STM32_RTC_DR_MONTH) >> STM32_RTC_DR_MONTH_SHIFT;
286 tm->tm_year = (dr & STM32_RTC_DR_YEAR) >> STM32_RTC_DR_YEAR_SHIFT;
287 tm->tm_wday = (dr & STM32_RTC_DR_WDAY) >> STM32_RTC_DR_WDAY_SHIFT;
288
289 /* We don't report tm_yday and tm_isdst */
290
291 bcd2tm(tm);
292
293 return 0;
294}
295
296static int stm32_rtc_set_time(struct device *dev, struct rtc_time *tm)
297{
298 struct stm32_rtc *rtc = dev_get_drvdata(dev);
299 const struct stm32_rtc_registers *regs = &rtc->data->regs;
300 unsigned int tr, dr;
301 int ret = 0;
302
303 tm2bcd(tm);
304
305 /* Time in BCD format */
306 tr = ((tm->tm_sec << STM32_RTC_TR_SEC_SHIFT) & STM32_RTC_TR_SEC) |
307 ((tm->tm_min << STM32_RTC_TR_MIN_SHIFT) & STM32_RTC_TR_MIN) |
308 ((tm->tm_hour << STM32_RTC_TR_HOUR_SHIFT) & STM32_RTC_TR_HOUR);
309
310 /* Date in BCD format */
311 dr = ((tm->tm_mday << STM32_RTC_DR_DATE_SHIFT) & STM32_RTC_DR_DATE) |
312 ((tm->tm_mon << STM32_RTC_DR_MONTH_SHIFT) & STM32_RTC_DR_MONTH) |
313 ((tm->tm_year << STM32_RTC_DR_YEAR_SHIFT) & STM32_RTC_DR_YEAR) |
314 ((tm->tm_wday << STM32_RTC_DR_WDAY_SHIFT) & STM32_RTC_DR_WDAY);
315
316 stm32_rtc_wpr_unlock(rtc);
317
318 ret = stm32_rtc_enter_init_mode(rtc);
319 if (ret) {
320 dev_err(dev, "Can't enter in init mode. Set time aborted.\n");
321 goto end;
322 }
323
324 writel_relaxed(tr, rtc->base + regs->tr);
325 writel_relaxed(dr, rtc->base + regs->dr);
326
327 stm32_rtc_exit_init_mode(rtc);
328
329 ret = stm32_rtc_wait_sync(rtc);
330end:
331 stm32_rtc_wpr_lock(rtc);
332
333 return ret;
334}
335
336static int stm32_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
337{
338 struct stm32_rtc *rtc = dev_get_drvdata(dev);
339 const struct stm32_rtc_registers *regs = &rtc->data->regs;
340 const struct stm32_rtc_events *evts = &rtc->data->events;
341 struct rtc_time *tm = &alrm->time;
342 unsigned int alrmar, cr, status;
343
344 alrmar = readl_relaxed(rtc->base + regs->alrmar);
345 cr = readl_relaxed(rtc->base + regs->cr);
346 status = readl_relaxed(rtc->base + regs->sr);
347
348 if (alrmar & STM32_RTC_ALRMXR_DATE_MASK) {
349 /*
350 * Date/day doesn't matter in Alarm comparison so alarm
351 * triggers every day
352 */
353 tm->tm_mday = -1;
354 tm->tm_wday = -1;
355 } else {
356 if (alrmar & STM32_RTC_ALRMXR_WDSEL) {
357 /* Alarm is set to a day of week */
358 tm->tm_mday = -1;
359 tm->tm_wday = (alrmar & STM32_RTC_ALRMXR_WDAY) >>
360 STM32_RTC_ALRMXR_WDAY_SHIFT;
361 tm->tm_wday %= 7;
362 } else {
363 /* Alarm is set to a day of month */
364 tm->tm_wday = -1;
365 tm->tm_mday = (alrmar & STM32_RTC_ALRMXR_DATE) >>
366 STM32_RTC_ALRMXR_DATE_SHIFT;
367 }
368 }
369
370 if (alrmar & STM32_RTC_ALRMXR_HOUR_MASK) {
371 /* Hours don't matter in Alarm comparison */
372 tm->tm_hour = -1;
373 } else {
374 tm->tm_hour = (alrmar & STM32_RTC_ALRMXR_HOUR) >>
375 STM32_RTC_ALRMXR_HOUR_SHIFT;
376 if (alrmar & STM32_RTC_ALRMXR_PM)
377 tm->tm_hour += 12;
378 }
379
380 if (alrmar & STM32_RTC_ALRMXR_MIN_MASK) {
381 /* Minutes don't matter in Alarm comparison */
382 tm->tm_min = -1;
383 } else {
384 tm->tm_min = (alrmar & STM32_RTC_ALRMXR_MIN) >>
385 STM32_RTC_ALRMXR_MIN_SHIFT;
386 }
387
388 if (alrmar & STM32_RTC_ALRMXR_SEC_MASK) {
389 /* Seconds don't matter in Alarm comparison */
390 tm->tm_sec = -1;
391 } else {
392 tm->tm_sec = (alrmar & STM32_RTC_ALRMXR_SEC) >>
393 STM32_RTC_ALRMXR_SEC_SHIFT;
394 }
395
396 bcd2tm(tm);
397
398 alrm->enabled = (cr & STM32_RTC_CR_ALRAE) ? 1 : 0;
399 alrm->pending = (status & evts->alra) ? 1 : 0;
400
401 return 0;
402}
403
404static int stm32_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
405{
406 struct stm32_rtc *rtc = dev_get_drvdata(dev);
407 const struct stm32_rtc_registers *regs = &rtc->data->regs;
408 const struct stm32_rtc_events *evts = &rtc->data->events;
409 unsigned int cr;
410
411 cr = readl_relaxed(rtc->base + regs->cr);
412
413 stm32_rtc_wpr_unlock(rtc);
414
415 /* We expose Alarm A to the kernel */
416 if (enabled)
417 cr |= (STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
418 else
419 cr &= ~(STM32_RTC_CR_ALRAIE | STM32_RTC_CR_ALRAE);
420 writel_relaxed(cr, rtc->base + regs->cr);
421
422 /* Clear event flags, otherwise new events won't be received */
423 stm32_rtc_clear_event_flags(rtc, evts->alra);
424
425 stm32_rtc_wpr_lock(rtc);
426
427 return 0;
428}
429
430static int stm32_rtc_valid_alrm(struct stm32_rtc *rtc, struct rtc_time *tm)
431{
432 const struct stm32_rtc_registers *regs = &rtc->data->regs;
433 int cur_day, cur_mon, cur_year, cur_hour, cur_min, cur_sec;
434 unsigned int dr = readl_relaxed(rtc->base + regs->dr);
435 unsigned int tr = readl_relaxed(rtc->base + regs->tr);
436
437 cur_day = (dr & STM32_RTC_DR_DATE) >> STM32_RTC_DR_DATE_SHIFT;
438 cur_mon = (dr & STM32_RTC_DR_MONTH) >> STM32_RTC_DR_MONTH_SHIFT;
439 cur_year = (dr & STM32_RTC_DR_YEAR) >> STM32_RTC_DR_YEAR_SHIFT;
440 cur_sec = (tr & STM32_RTC_TR_SEC) >> STM32_RTC_TR_SEC_SHIFT;
441 cur_min = (tr & STM32_RTC_TR_MIN) >> STM32_RTC_TR_MIN_SHIFT;
442 cur_hour = (tr & STM32_RTC_TR_HOUR) >> STM32_RTC_TR_HOUR_SHIFT;
443
444 /*
445 * Assuming current date is M-D-Y H:M:S.
446 * RTC alarm can't be set on a specific month and year.
447 * So the valid alarm range is:
448 * M-D-Y H:M:S < alarm <= (M+1)-D-Y H:M:S
449 * with a specific case for December...
450 */
451 if ((((tm->tm_year > cur_year) &&
452 (tm->tm_mon == 0x1) && (cur_mon == 0x12)) ||
453 ((tm->tm_year == cur_year) &&
454 (tm->tm_mon <= cur_mon + 1))) &&
455 ((tm->tm_mday > cur_day) ||
456 ((tm->tm_mday == cur_day) &&
457 ((tm->tm_hour > cur_hour) ||
458 ((tm->tm_hour == cur_hour) && (tm->tm_min > cur_min)) ||
459 ((tm->tm_hour == cur_hour) && (tm->tm_min == cur_min) &&
460 (tm->tm_sec >= cur_sec))))))
461 return 0;
462
463 return -EINVAL;
464}
465
466static int stm32_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
467{
468 struct stm32_rtc *rtc = dev_get_drvdata(dev);
469 const struct stm32_rtc_registers *regs = &rtc->data->regs;
470 struct rtc_time *tm = &alrm->time;
471 unsigned int cr, isr, alrmar;
472 int ret = 0;
473
474 tm2bcd(tm);
475
476 /*
477 * RTC alarm can't be set on a specific date, unless this date is
478 * up to the same day of month next month.
479 */
480 if (stm32_rtc_valid_alrm(rtc, tm) < 0) {
481 dev_err(dev, "Alarm can be set only on upcoming month.\n");
482 return -EINVAL;
483 }
484
485 alrmar = 0;
486 /* tm_year and tm_mon are not used because not supported by RTC */
487 alrmar |= (tm->tm_mday << STM32_RTC_ALRMXR_DATE_SHIFT) &
488 STM32_RTC_ALRMXR_DATE;
489 /* 24-hour format */
490 alrmar &= ~STM32_RTC_ALRMXR_PM;
491 alrmar |= (tm->tm_hour << STM32_RTC_ALRMXR_HOUR_SHIFT) &
492 STM32_RTC_ALRMXR_HOUR;
493 alrmar |= (tm->tm_min << STM32_RTC_ALRMXR_MIN_SHIFT) &
494 STM32_RTC_ALRMXR_MIN;
495 alrmar |= (tm->tm_sec << STM32_RTC_ALRMXR_SEC_SHIFT) &
496 STM32_RTC_ALRMXR_SEC;
497
498 stm32_rtc_wpr_unlock(rtc);
499
500 /* Disable Alarm */
501 cr = readl_relaxed(rtc->base + regs->cr);
502 cr &= ~STM32_RTC_CR_ALRAE;
503 writel_relaxed(cr, rtc->base + regs->cr);
504
505 /*
506 * Poll Alarm write flag to be sure that Alarm update is allowed: it
507 * takes around 2 rtc_ck clock cycles
508 */
509 ret = readl_relaxed_poll_timeout_atomic(rtc->base + regs->isr,
510 isr,
511 (isr & STM32_RTC_ISR_ALRAWF),
512 10, 100000);
513
514 if (ret) {
515 dev_err(dev, "Alarm update not allowed\n");
516 goto end;
517 }
518
519 /* Write to Alarm register */
520 writel_relaxed(alrmar, rtc->base + regs->alrmar);
521
522 stm32_rtc_alarm_irq_enable(dev, alrm->enabled);
523end:
524 stm32_rtc_wpr_lock(rtc);
525
526 return ret;
527}
528
529static const struct rtc_class_ops stm32_rtc_ops = {
530 .read_time = stm32_rtc_read_time,
531 .set_time = stm32_rtc_set_time,
532 .read_alarm = stm32_rtc_read_alarm,
533 .set_alarm = stm32_rtc_set_alarm,
534 .alarm_irq_enable = stm32_rtc_alarm_irq_enable,
535};
536
537static void stm32_rtc_clear_events(struct stm32_rtc *rtc,
538 unsigned int flags)
539{
540 const struct stm32_rtc_registers *regs = &rtc->data->regs;
541
542 /* Flags are cleared by writing 0 in RTC_ISR */
543 writel_relaxed(readl_relaxed(rtc->base + regs->isr) & ~flags,
544 rtc->base + regs->isr);
545}
546
547static const struct stm32_rtc_data stm32_rtc_data = {
548 .has_pclk = false,
549 .need_dbp = true,
550 .has_wakeirq = false,
551 .regs = {
552 .tr = 0x00,
553 .dr = 0x04,
554 .cr = 0x08,
555 .isr = 0x0C,
556 .prer = 0x10,
557 .alrmar = 0x1C,
558 .wpr = 0x24,
559 .sr = 0x0C, /* set to ISR offset to ease alarm management */
560 .scr = UNDEF_REG,
561 .verr = UNDEF_REG,
562 },
563 .events = {
564 .alra = STM32_RTC_ISR_ALRAF,
565 },
566 .clear_events = stm32_rtc_clear_events,
567};
568
569static const struct stm32_rtc_data stm32h7_rtc_data = {
570 .has_pclk = true,
571 .need_dbp = true,
572 .has_wakeirq = false,
573 .regs = {
574 .tr = 0x00,
575 .dr = 0x04,
576 .cr = 0x08,
577 .isr = 0x0C,
578 .prer = 0x10,
579 .alrmar = 0x1C,
580 .wpr = 0x24,
581 .sr = 0x0C, /* set to ISR offset to ease alarm management */
582 .scr = UNDEF_REG,
583 .verr = UNDEF_REG,
584 },
585 .events = {
586 .alra = STM32_RTC_ISR_ALRAF,
587 },
588 .clear_events = stm32_rtc_clear_events,
589};
590
591static void stm32mp1_rtc_clear_events(struct stm32_rtc *rtc,
592 unsigned int flags)
593{
594 struct stm32_rtc_registers regs = rtc->data->regs;
595
596 /* Flags are cleared by writing 1 in RTC_SCR */
597 writel_relaxed(flags, rtc->base + regs.scr);
598}
599
600static const struct stm32_rtc_data stm32mp1_data = {
601 .has_pclk = true,
602 .need_dbp = false,
603 .has_wakeirq = true,
604 .regs = {
605 .tr = 0x00,
606 .dr = 0x04,
607 .cr = 0x18,
608 .isr = 0x0C, /* named RTC_ICSR on stm32mp1 */
609 .prer = 0x10,
610 .alrmar = 0x40,
611 .wpr = 0x24,
612 .sr = 0x50,
613 .scr = 0x5C,
614 .verr = 0x3F4,
615 },
616 .events = {
617 .alra = STM32_RTC_SR_ALRA,
618 },
619 .clear_events = stm32mp1_rtc_clear_events,
620};
621
622static const struct of_device_id stm32_rtc_of_match[] = {
623 { .compatible = "st,stm32-rtc", .data = &stm32_rtc_data },
624 { .compatible = "st,stm32h7-rtc", .data = &stm32h7_rtc_data },
625 { .compatible = "st,stm32mp1-rtc", .data = &stm32mp1_data },
626 {}
627};
628MODULE_DEVICE_TABLE(of, stm32_rtc_of_match);
629
630static int stm32_rtc_init(struct platform_device *pdev,
631 struct stm32_rtc *rtc)
632{
633 const struct stm32_rtc_registers *regs = &rtc->data->regs;
634 unsigned int prer, pred_a, pred_s, pred_a_max, pred_s_max, cr;
635 unsigned int rate;
636 int ret = 0;
637
638 rate = clk_get_rate(rtc->rtc_ck);
639
640 /* Find prediv_a and prediv_s to obtain the 1Hz calendar clock */
641 pred_a_max = STM32_RTC_PRER_PRED_A >> STM32_RTC_PRER_PRED_A_SHIFT;
642 pred_s_max = STM32_RTC_PRER_PRED_S >> STM32_RTC_PRER_PRED_S_SHIFT;
643
644 for (pred_a = pred_a_max; pred_a + 1 > 0; pred_a--) {
645 pred_s = (rate / (pred_a + 1)) - 1;
646
647 if (((pred_s + 1) * (pred_a + 1)) == rate)
648 break;
649 }
650
651 /*
652 * Can't find a 1Hz, so give priority to RTC power consumption
653 * by choosing the higher possible value for prediv_a
654 */
655 if ((pred_s > pred_s_max) || (pred_a > pred_a_max)) {
656 pred_a = pred_a_max;
657 pred_s = (rate / (pred_a + 1)) - 1;
658
659 dev_warn(&pdev->dev, "rtc_ck is %s\n",
660 (rate < ((pred_a + 1) * (pred_s + 1))) ?
661 "fast" : "slow");
662 }
663
664 stm32_rtc_wpr_unlock(rtc);
665
666 ret = stm32_rtc_enter_init_mode(rtc);
667 if (ret) {
668 dev_err(&pdev->dev,
669 "Can't enter in init mode. Prescaler config failed.\n");
670 goto end;
671 }
672
673 prer = (pred_s << STM32_RTC_PRER_PRED_S_SHIFT) & STM32_RTC_PRER_PRED_S;
674 writel_relaxed(prer, rtc->base + regs->prer);
675 prer |= (pred_a << STM32_RTC_PRER_PRED_A_SHIFT) & STM32_RTC_PRER_PRED_A;
676 writel_relaxed(prer, rtc->base + regs->prer);
677
678 /* Force 24h time format */
679 cr = readl_relaxed(rtc->base + regs->cr);
680 cr &= ~STM32_RTC_CR_FMT;
681 writel_relaxed(cr, rtc->base + regs->cr);
682
683 stm32_rtc_exit_init_mode(rtc);
684
685 ret = stm32_rtc_wait_sync(rtc);
686end:
687 stm32_rtc_wpr_lock(rtc);
688
689 return ret;
690}
691
692static int stm32_rtc_probe(struct platform_device *pdev)
693{
694 struct stm32_rtc *rtc;
695 const struct stm32_rtc_registers *regs;
696 struct resource *res;
697 int ret;
698
699 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
700 if (!rtc)
701 return -ENOMEM;
702
703 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
704 rtc->base = devm_ioremap_resource(&pdev->dev, res);
705 if (IS_ERR(rtc->base))
706 return PTR_ERR(rtc->base);
707
708 rtc->data = (struct stm32_rtc_data *)
709 of_device_get_match_data(&pdev->dev);
710 regs = &rtc->data->regs;
711
712 if (rtc->data->need_dbp) {
713 rtc->dbp = syscon_regmap_lookup_by_phandle(pdev->dev.of_node,
714 "st,syscfg");
715 if (IS_ERR(rtc->dbp)) {
716 dev_err(&pdev->dev, "no st,syscfg\n");
717 return PTR_ERR(rtc->dbp);
718 }
719
720 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
721 1, &rtc->dbp_reg);
722 if (ret) {
723 dev_err(&pdev->dev, "can't read DBP register offset\n");
724 return ret;
725 }
726
727 ret = of_property_read_u32_index(pdev->dev.of_node, "st,syscfg",
728 2, &rtc->dbp_mask);
729 if (ret) {
730 dev_err(&pdev->dev, "can't read DBP register mask\n");
731 return ret;
732 }
733 }
734
735 if (!rtc->data->has_pclk) {
736 rtc->pclk = NULL;
737 rtc->rtc_ck = devm_clk_get(&pdev->dev, NULL);
738 } else {
739 rtc->pclk = devm_clk_get(&pdev->dev, "pclk");
740 if (IS_ERR(rtc->pclk)) {
741 dev_err(&pdev->dev, "no pclk clock");
742 return PTR_ERR(rtc->pclk);
743 }
744 rtc->rtc_ck = devm_clk_get(&pdev->dev, "rtc_ck");
745 }
746 if (IS_ERR(rtc->rtc_ck)) {
747 dev_err(&pdev->dev, "no rtc_ck clock");
748 return PTR_ERR(rtc->rtc_ck);
749 }
750
751 if (rtc->data->has_pclk) {
752 ret = clk_prepare_enable(rtc->pclk);
753 if (ret)
754 return ret;
755 }
756
757 ret = clk_prepare_enable(rtc->rtc_ck);
758 if (ret)
759 goto err;
760
761 if (rtc->data->need_dbp)
762 regmap_update_bits(rtc->dbp, rtc->dbp_reg,
763 rtc->dbp_mask, rtc->dbp_mask);
764
765 /*
766 * After a system reset, RTC_ISR.INITS flag can be read to check if
767 * the calendar has been initialized or not. INITS flag is reset by a
768 * power-on reset (no vbat, no power-supply). It is not reset if
769 * rtc_ck parent clock has changed (so RTC prescalers need to be
770 * changed). That's why we cannot rely on this flag to know if RTC
771 * init has to be done.
772 */
773 ret = stm32_rtc_init(pdev, rtc);
774 if (ret)
775 goto err;
776
777 rtc->irq_alarm = platform_get_irq(pdev, 0);
778 if (rtc->irq_alarm <= 0) {
779 ret = rtc->irq_alarm;
780 goto err;
781 }
782
783 ret = device_init_wakeup(&pdev->dev, true);
784 if (rtc->data->has_wakeirq) {
785 rtc->wakeirq_alarm = platform_get_irq(pdev, 1);
786 if (rtc->wakeirq_alarm > 0) {
787 ret = dev_pm_set_dedicated_wake_irq(&pdev->dev,
788 rtc->wakeirq_alarm);
789 } else {
790 ret = rtc->wakeirq_alarm;
791 if (rtc->wakeirq_alarm == -EPROBE_DEFER)
792 goto err;
793 }
794 }
795 if (ret)
796 dev_warn(&pdev->dev, "alarm can't wake up the system: %d", ret);
797
798 platform_set_drvdata(pdev, rtc);
799
800 rtc->rtc_dev = devm_rtc_device_register(&pdev->dev, pdev->name,
801 &stm32_rtc_ops, THIS_MODULE);
802 if (IS_ERR(rtc->rtc_dev)) {
803 ret = PTR_ERR(rtc->rtc_dev);
804 dev_err(&pdev->dev, "rtc device registration failed, err=%d\n",
805 ret);
806 goto err;
807 }
808
809 /* Handle RTC alarm interrupts */
810 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_alarm, NULL,
811 stm32_rtc_alarm_irq, IRQF_ONESHOT,
812 pdev->name, rtc);
813 if (ret) {
814 dev_err(&pdev->dev, "IRQ%d (alarm interrupt) already claimed\n",
815 rtc->irq_alarm);
816 goto err;
817 }
818
819 /*
820 * If INITS flag is reset (calendar year field set to 0x00), calendar
821 * must be initialized
822 */
823 if (!(readl_relaxed(rtc->base + regs->isr) & STM32_RTC_ISR_INITS))
824 dev_warn(&pdev->dev, "Date/Time must be initialized\n");
825
826 if (regs->verr != UNDEF_REG) {
827 u32 ver = readl_relaxed(rtc->base + regs->verr);
828
829 dev_info(&pdev->dev, "registered rev:%d.%d\n",
830 (ver >> STM32_RTC_VERR_MAJREV_SHIFT) & 0xF,
831 (ver >> STM32_RTC_VERR_MINREV_SHIFT) & 0xF);
832 }
833
834 return 0;
835err:
836 if (rtc->data->has_pclk)
837 clk_disable_unprepare(rtc->pclk);
838 clk_disable_unprepare(rtc->rtc_ck);
839
840 if (rtc->data->need_dbp)
841 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
842
843 dev_pm_clear_wake_irq(&pdev->dev);
844 device_init_wakeup(&pdev->dev, false);
845
846 return ret;
847}
848
849static int stm32_rtc_remove(struct platform_device *pdev)
850{
851 struct stm32_rtc *rtc = platform_get_drvdata(pdev);
852 const struct stm32_rtc_registers *regs = &rtc->data->regs;
853 unsigned int cr;
854
855 /* Disable interrupts */
856 stm32_rtc_wpr_unlock(rtc);
857 cr = readl_relaxed(rtc->base + regs->cr);
858 cr &= ~STM32_RTC_CR_ALRAIE;
859 writel_relaxed(cr, rtc->base + regs->cr);
860 stm32_rtc_wpr_lock(rtc);
861
862 clk_disable_unprepare(rtc->rtc_ck);
863 if (rtc->data->has_pclk)
864 clk_disable_unprepare(rtc->pclk);
865
866 /* Enable backup domain write protection if needed */
867 if (rtc->data->need_dbp)
868 regmap_update_bits(rtc->dbp, rtc->dbp_reg, rtc->dbp_mask, 0);
869
870 dev_pm_clear_wake_irq(&pdev->dev);
871 device_init_wakeup(&pdev->dev, false);
872
873 return 0;
874}
875
876#ifdef CONFIG_PM_SLEEP
877static int stm32_rtc_suspend(struct device *dev)
878{
879 struct stm32_rtc *rtc = dev_get_drvdata(dev);
880
881 if (rtc->data->has_pclk)
882 clk_disable_unprepare(rtc->pclk);
883
884 if (device_may_wakeup(dev))
885 return enable_irq_wake(rtc->irq_alarm);
886
887 return 0;
888}
889
890static int stm32_rtc_resume(struct device *dev)
891{
892 struct stm32_rtc *rtc = dev_get_drvdata(dev);
893 int ret = 0;
894
895 if (rtc->data->has_pclk) {
896 ret = clk_prepare_enable(rtc->pclk);
897 if (ret)
898 return ret;
899 }
900
901 ret = stm32_rtc_wait_sync(rtc);
902 if (ret < 0)
903 return ret;
904
905 if (device_may_wakeup(dev))
906 return disable_irq_wake(rtc->irq_alarm);
907
908 return ret;
909}
910#endif
911
912static SIMPLE_DEV_PM_OPS(stm32_rtc_pm_ops,
913 stm32_rtc_suspend, stm32_rtc_resume);
914
915static struct platform_driver stm32_rtc_driver = {
916 .probe = stm32_rtc_probe,
917 .remove = stm32_rtc_remove,
918 .driver = {
919 .name = DRIVER_NAME,
920 .pm = &stm32_rtc_pm_ops,
921 .of_match_table = stm32_rtc_of_match,
922 },
923};
924
925module_platform_driver(stm32_rtc_driver);
926
927MODULE_ALIAS("platform:" DRIVER_NAME);
928MODULE_AUTHOR("Amelie Delaunay <amelie.delaunay@st.com>");
929MODULE_DESCRIPTION("STMicroelectronics STM32 Real Time Clock driver");
930MODULE_LICENSE("GPL v2");