This source file includes following definitions.
- ds1685_read
- ds1685_write
- ds1685_rtc_bcd2bin
- ds1685_rtc_bin2bcd
- ds1685_rtc_check_mday
- ds1685_rtc_switch_to_bank0
- ds1685_rtc_switch_to_bank1
- ds1685_rtc_begin_data_access
- ds1685_rtc_end_data_access
- ds1685_rtc_get_ssn
- ds1685_rtc_read_time
- ds1685_rtc_set_time
- ds1685_rtc_read_alarm
- ds1685_rtc_set_alarm
- ds1685_rtc_alarm_irq_enable
- ds1685_rtc_extended_irq
- ds1685_rtc_irq_handler
- ds1685_rtc_proc
- ds1685_nvram_read
- ds1685_nvram_write
- ds1685_rtc_sysfs_battery_show
- ds1685_rtc_sysfs_auxbatt_show
- ds1685_rtc_sysfs_serial_show
- ds1685_rtc_probe
- ds1685_rtc_remove
- ds1685_rtc_poweroff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
17
18 #include <linux/bcd.h>
19 #include <linux/delay.h>
20 #include <linux/io.h>
21 #include <linux/module.h>
22 #include <linux/platform_device.h>
23 #include <linux/rtc.h>
24 #include <linux/workqueue.h>
25
26 #include <linux/rtc/ds1685.h>
27
28 #ifdef CONFIG_PROC_FS
29 #include <linux/proc_fs.h>
30 #endif
31
32
33
34
35
36
37
38
39
40
41 static u8
42 ds1685_read(struct ds1685_priv *rtc, int reg)
43 {
44 return readb((u8 __iomem *)rtc->regs +
45 (reg * rtc->regstep));
46 }
47
48
49
50
51
52
53
54 static void
55 ds1685_write(struct ds1685_priv *rtc, int reg, u8 value)
56 {
57 writeb(value, ((u8 __iomem *)rtc->regs +
58 (reg * rtc->regstep)));
59 }
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 static inline u8
76 ds1685_rtc_bcd2bin(struct ds1685_priv *rtc, u8 val, u8 bcd_mask, u8 bin_mask)
77 {
78 if (rtc->bcd_mode)
79 return (bcd2bin(val) & bcd_mask);
80
81 return (val & bin_mask);
82 }
83
84
85
86
87
88
89
90
91
92
93 static inline u8
94 ds1685_rtc_bin2bcd(struct ds1685_priv *rtc, u8 val, u8 bin_mask, u8 bcd_mask)
95 {
96 if (rtc->bcd_mode)
97 return (bin2bcd(val) & bcd_mask);
98
99 return (val & bin_mask);
100 }
101
102
103
104
105
106
107
108
109 static inline int
110 ds1685_rtc_check_mday(struct ds1685_priv *rtc, u8 mday)
111 {
112 if (rtc->bcd_mode) {
113 if (mday < 0x01 || mday > 0x31 || (mday & 0x0f) > 0x09)
114 return -EDOM;
115 } else {
116 if (mday < 1 || mday > 31)
117 return -EDOM;
118 }
119 return 0;
120 }
121
122
123
124
125
126 static inline void
127 ds1685_rtc_switch_to_bank0(struct ds1685_priv *rtc)
128 {
129 rtc->write(rtc, RTC_CTRL_A,
130 (rtc->read(rtc, RTC_CTRL_A) & ~(RTC_CTRL_A_DV0)));
131 }
132
133
134
135
136
137 static inline void
138 ds1685_rtc_switch_to_bank1(struct ds1685_priv *rtc)
139 {
140 rtc->write(rtc, RTC_CTRL_A,
141 (rtc->read(rtc, RTC_CTRL_A) | RTC_CTRL_A_DV0));
142 }
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157 static inline void
158 ds1685_rtc_begin_data_access(struct ds1685_priv *rtc)
159 {
160
161 rtc->write(rtc, RTC_CTRL_B,
162 (rtc->read(rtc, RTC_CTRL_B) | RTC_CTRL_B_SET));
163
164
165 while (rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_INCR)
166 cpu_relax();
167
168
169 ds1685_rtc_switch_to_bank1(rtc);
170 }
171
172
173
174
175
176
177
178
179
180 static inline void
181 ds1685_rtc_end_data_access(struct ds1685_priv *rtc)
182 {
183
184 ds1685_rtc_switch_to_bank1(rtc);
185
186
187 rtc->write(rtc, RTC_CTRL_B,
188 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_SET)));
189 }
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205 static inline void
206 ds1685_rtc_get_ssn(struct ds1685_priv *rtc, u8 *ssn)
207 {
208 ssn[0] = rtc->read(rtc, RTC_BANK1_SSN_MODEL);
209 ssn[1] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_1);
210 ssn[2] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_2);
211 ssn[3] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_3);
212 ssn[4] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_4);
213 ssn[5] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_5);
214 ssn[6] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_6);
215 ssn[7] = rtc->read(rtc, RTC_BANK1_SSN_CRC);
216 }
217
218
219
220
221
222
223
224
225
226
227
228 static int
229 ds1685_rtc_read_time(struct device *dev, struct rtc_time *tm)
230 {
231 struct ds1685_priv *rtc = dev_get_drvdata(dev);
232 u8 ctrlb, century;
233 u8 seconds, minutes, hours, wday, mday, month, years;
234
235
236 ds1685_rtc_begin_data_access(rtc);
237 seconds = rtc->read(rtc, RTC_SECS);
238 minutes = rtc->read(rtc, RTC_MINS);
239 hours = rtc->read(rtc, RTC_HRS);
240 wday = rtc->read(rtc, RTC_WDAY);
241 mday = rtc->read(rtc, RTC_MDAY);
242 month = rtc->read(rtc, RTC_MONTH);
243 years = rtc->read(rtc, RTC_YEAR);
244 century = rtc->read(rtc, RTC_CENTURY);
245 ctrlb = rtc->read(rtc, RTC_CTRL_B);
246 ds1685_rtc_end_data_access(rtc);
247
248
249 years = ds1685_rtc_bcd2bin(rtc, years, RTC_YEAR_BCD_MASK,
250 RTC_YEAR_BIN_MASK);
251 century = ds1685_rtc_bcd2bin(rtc, century, RTC_CENTURY_MASK,
252 RTC_CENTURY_MASK);
253 tm->tm_sec = ds1685_rtc_bcd2bin(rtc, seconds, RTC_SECS_BCD_MASK,
254 RTC_SECS_BIN_MASK);
255 tm->tm_min = ds1685_rtc_bcd2bin(rtc, minutes, RTC_MINS_BCD_MASK,
256 RTC_MINS_BIN_MASK);
257 tm->tm_hour = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_24_BCD_MASK,
258 RTC_HRS_24_BIN_MASK);
259 tm->tm_wday = (ds1685_rtc_bcd2bin(rtc, wday, RTC_WDAY_MASK,
260 RTC_WDAY_MASK) - 1);
261 tm->tm_mday = ds1685_rtc_bcd2bin(rtc, mday, RTC_MDAY_BCD_MASK,
262 RTC_MDAY_BIN_MASK);
263 tm->tm_mon = (ds1685_rtc_bcd2bin(rtc, month, RTC_MONTH_BCD_MASK,
264 RTC_MONTH_BIN_MASK) - 1);
265 tm->tm_year = ((years + (century * 100)) - 1900);
266 tm->tm_yday = rtc_year_days(tm->tm_mday, tm->tm_mon, tm->tm_year);
267 tm->tm_isdst = 0;
268
269 return 0;
270 }
271
272
273
274
275
276
277 static int
278 ds1685_rtc_set_time(struct device *dev, struct rtc_time *tm)
279 {
280 struct ds1685_priv *rtc = dev_get_drvdata(dev);
281 u8 ctrlb, seconds, minutes, hours, wday, mday, month, years, century;
282
283
284 seconds = ds1685_rtc_bin2bcd(rtc, tm->tm_sec, RTC_SECS_BIN_MASK,
285 RTC_SECS_BCD_MASK);
286 minutes = ds1685_rtc_bin2bcd(rtc, tm->tm_min, RTC_MINS_BIN_MASK,
287 RTC_MINS_BCD_MASK);
288 hours = ds1685_rtc_bin2bcd(rtc, tm->tm_hour, RTC_HRS_24_BIN_MASK,
289 RTC_HRS_24_BCD_MASK);
290 wday = ds1685_rtc_bin2bcd(rtc, (tm->tm_wday + 1), RTC_WDAY_MASK,
291 RTC_WDAY_MASK);
292 mday = ds1685_rtc_bin2bcd(rtc, tm->tm_mday, RTC_MDAY_BIN_MASK,
293 RTC_MDAY_BCD_MASK);
294 month = ds1685_rtc_bin2bcd(rtc, (tm->tm_mon + 1), RTC_MONTH_BIN_MASK,
295 RTC_MONTH_BCD_MASK);
296 years = ds1685_rtc_bin2bcd(rtc, (tm->tm_year % 100),
297 RTC_YEAR_BIN_MASK, RTC_YEAR_BCD_MASK);
298 century = ds1685_rtc_bin2bcd(rtc, ((tm->tm_year + 1900) / 100),
299 RTC_CENTURY_MASK, RTC_CENTURY_MASK);
300
301
302
303
304
305
306
307 if ((tm->tm_mon > 11) || (mday == 0))
308 return -EDOM;
309
310 if (tm->tm_mday > rtc_month_days(tm->tm_mon, tm->tm_year))
311 return -EDOM;
312
313 if ((tm->tm_hour >= 24) || (tm->tm_min >= 60) ||
314 (tm->tm_sec >= 60) || (wday > 7))
315 return -EDOM;
316
317
318
319
320
321 ds1685_rtc_begin_data_access(rtc);
322 ctrlb = rtc->read(rtc, RTC_CTRL_B);
323 if (rtc->bcd_mode)
324 ctrlb &= ~(RTC_CTRL_B_DM);
325 else
326 ctrlb |= RTC_CTRL_B_DM;
327 rtc->write(rtc, RTC_CTRL_B, ctrlb);
328 rtc->write(rtc, RTC_SECS, seconds);
329 rtc->write(rtc, RTC_MINS, minutes);
330 rtc->write(rtc, RTC_HRS, hours);
331 rtc->write(rtc, RTC_WDAY, wday);
332 rtc->write(rtc, RTC_MDAY, mday);
333 rtc->write(rtc, RTC_MONTH, month);
334 rtc->write(rtc, RTC_YEAR, years);
335 rtc->write(rtc, RTC_CENTURY, century);
336 ds1685_rtc_end_data_access(rtc);
337
338 return 0;
339 }
340
341
342
343
344
345
346
347
348
349
350
351
352
353 static int
354 ds1685_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
355 {
356 struct ds1685_priv *rtc = dev_get_drvdata(dev);
357 u8 seconds, minutes, hours, mday, ctrlb, ctrlc;
358 int ret;
359
360
361 ds1685_rtc_begin_data_access(rtc);
362 seconds = rtc->read(rtc, RTC_SECS_ALARM);
363 minutes = rtc->read(rtc, RTC_MINS_ALARM);
364 hours = rtc->read(rtc, RTC_HRS_ALARM);
365 mday = rtc->read(rtc, RTC_MDAY_ALARM);
366 ctrlb = rtc->read(rtc, RTC_CTRL_B);
367 ctrlc = rtc->read(rtc, RTC_CTRL_C);
368 ds1685_rtc_end_data_access(rtc);
369
370
371 ret = ds1685_rtc_check_mday(rtc, mday);
372 if (ret)
373 return ret;
374
375
376
377
378
379
380
381
382 if (likely(seconds < 0xc0))
383 alrm->time.tm_sec = ds1685_rtc_bcd2bin(rtc, seconds,
384 RTC_SECS_BCD_MASK,
385 RTC_SECS_BIN_MASK);
386
387 if (likely(minutes < 0xc0))
388 alrm->time.tm_min = ds1685_rtc_bcd2bin(rtc, minutes,
389 RTC_MINS_BCD_MASK,
390 RTC_MINS_BIN_MASK);
391
392 if (likely(hours < 0xc0))
393 alrm->time.tm_hour = ds1685_rtc_bcd2bin(rtc, hours,
394 RTC_HRS_24_BCD_MASK,
395 RTC_HRS_24_BIN_MASK);
396
397
398 alrm->time.tm_mday = ds1685_rtc_bcd2bin(rtc, mday, RTC_MDAY_BCD_MASK,
399 RTC_MDAY_BIN_MASK);
400 alrm->enabled = !!(ctrlb & RTC_CTRL_B_AIE);
401 alrm->pending = !!(ctrlc & RTC_CTRL_C_AF);
402
403 return 0;
404 }
405
406
407
408
409
410
411 static int
412 ds1685_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
413 {
414 struct ds1685_priv *rtc = dev_get_drvdata(dev);
415 u8 ctrlb, seconds, minutes, hours, mday;
416 int ret;
417
418
419 seconds = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_sec,
420 RTC_SECS_BIN_MASK,
421 RTC_SECS_BCD_MASK);
422 minutes = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_min,
423 RTC_MINS_BIN_MASK,
424 RTC_MINS_BCD_MASK);
425 hours = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_hour,
426 RTC_HRS_24_BIN_MASK,
427 RTC_HRS_24_BCD_MASK);
428 mday = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_mday,
429 RTC_MDAY_BIN_MASK,
430 RTC_MDAY_BCD_MASK);
431
432
433 ret = ds1685_rtc_check_mday(rtc, mday);
434 if (ret)
435 return ret;
436
437
438
439
440
441
442
443
444
445 if (unlikely(seconds >= 0xc0))
446 seconds = 0xff;
447
448 if (unlikely(minutes >= 0xc0))
449 minutes = 0xff;
450
451 if (unlikely(hours >= 0xc0))
452 hours = 0xff;
453
454 alrm->time.tm_mon = -1;
455 alrm->time.tm_year = -1;
456 alrm->time.tm_wday = -1;
457 alrm->time.tm_yday = -1;
458 alrm->time.tm_isdst = -1;
459
460
461 ds1685_rtc_begin_data_access(rtc);
462 ctrlb = rtc->read(rtc, RTC_CTRL_B);
463 rtc->write(rtc, RTC_CTRL_B, (ctrlb & ~(RTC_CTRL_B_AIE)));
464
465
466 rtc->read(rtc, RTC_CTRL_C);
467
468
469
470
471
472 ctrlb = rtc->read(rtc, RTC_CTRL_B);
473 if (rtc->bcd_mode)
474 ctrlb &= ~(RTC_CTRL_B_DM);
475 else
476 ctrlb |= RTC_CTRL_B_DM;
477 rtc->write(rtc, RTC_CTRL_B, ctrlb);
478 rtc->write(rtc, RTC_SECS_ALARM, seconds);
479 rtc->write(rtc, RTC_MINS_ALARM, minutes);
480 rtc->write(rtc, RTC_HRS_ALARM, hours);
481 rtc->write(rtc, RTC_MDAY_ALARM, mday);
482
483
484 if (alrm->enabled) {
485 ctrlb = rtc->read(rtc, RTC_CTRL_B);
486 ctrlb |= RTC_CTRL_B_AIE;
487 rtc->write(rtc, RTC_CTRL_B, ctrlb);
488 }
489
490
491 ds1685_rtc_end_data_access(rtc);
492
493 return 0;
494 }
495
496
497
498
499
500
501
502
503
504
505
506 static int
507 ds1685_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
508 {
509 struct ds1685_priv *rtc = dev_get_drvdata(dev);
510
511
512 if (enabled)
513 rtc->write(rtc, RTC_CTRL_B, (rtc->read(rtc, RTC_CTRL_B) |
514 RTC_CTRL_B_AIE));
515 else
516 rtc->write(rtc, RTC_CTRL_B, (rtc->read(rtc, RTC_CTRL_B) &
517 ~(RTC_CTRL_B_AIE)));
518
519
520 rtc->read(rtc, RTC_CTRL_C);
521
522 return 0;
523 }
524
525
526
527
528
529
530
531
532
533
534
535 static void
536 ds1685_rtc_extended_irq(struct ds1685_priv *rtc, struct platform_device *pdev)
537 {
538 u8 ctrl4a, ctrl4b;
539
540 ds1685_rtc_switch_to_bank1(rtc);
541 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
542 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
543
544
545
546
547
548
549 if ((ctrl4b & RTC_CTRL_4B_KSE) && (ctrl4a & RTC_CTRL_4A_KF)) {
550
551 rtc->write(rtc, RTC_EXT_CTRL_4B,
552 (rtc->read(rtc, RTC_EXT_CTRL_4B) &
553 ~(RTC_CTRL_4B_KSE)));
554
555
556 rtc->write(rtc, RTC_EXT_CTRL_4A,
557 (ctrl4a & ~(RTC_CTRL_4A_KF)));
558
559
560
561
562
563
564
565 msleep(500);
566 rtc->write(rtc, RTC_EXT_CTRL_4B,
567 (rtc->read(rtc, RTC_EXT_CTRL_4B) |
568 RTC_CTRL_4B_KSE));
569
570
571 if (rtc->prepare_poweroff != NULL)
572 rtc->prepare_poweroff();
573 else
574 ds1685_rtc_poweroff(pdev);
575 }
576
577
578
579
580
581
582
583 if ((ctrl4b & RTC_CTRL_4B_WIE) && (ctrl4a & RTC_CTRL_4A_WF)) {
584 rtc->write(rtc, RTC_EXT_CTRL_4A,
585 (ctrl4a & ~(RTC_CTRL_4A_WF)));
586
587
588 if (rtc->wake_alarm != NULL)
589 rtc->wake_alarm();
590 else
591 dev_warn(&pdev->dev,
592 "Wake Alarm IRQ just occurred!\n");
593 }
594
595
596
597
598
599
600
601
602
603
604
605 if ((ctrl4b & RTC_CTRL_4B_RIE) && (ctrl4a & RTC_CTRL_4A_RF)) {
606 rtc->write(rtc, RTC_EXT_CTRL_4A,
607 (ctrl4a & ~(RTC_CTRL_4A_RF)));
608 msleep(150);
609
610
611 if (rtc->post_ram_clear != NULL)
612 rtc->post_ram_clear();
613 else
614 dev_warn(&pdev->dev,
615 "RAM-Clear IRQ just occurred!\n");
616 }
617 ds1685_rtc_switch_to_bank0(rtc);
618 }
619
620
621
622
623
624
625 static irqreturn_t
626 ds1685_rtc_irq_handler(int irq, void *dev_id)
627 {
628 struct platform_device *pdev = dev_id;
629 struct ds1685_priv *rtc = platform_get_drvdata(pdev);
630 struct mutex *rtc_mutex;
631 u8 ctrlb, ctrlc;
632 unsigned long events = 0;
633 u8 num_irqs = 0;
634
635
636 if (unlikely(!rtc))
637 return IRQ_HANDLED;
638
639 rtc_mutex = &rtc->dev->ops_lock;
640 mutex_lock(rtc_mutex);
641
642
643 ctrlb = rtc->read(rtc, RTC_CTRL_B);
644 ctrlc = rtc->read(rtc, RTC_CTRL_C);
645
646
647 if (likely(ctrlc & RTC_CTRL_C_IRQF)) {
648
649
650
651
652
653 if (likely(ctrlc & RTC_CTRL_B_PAU_MASK)) {
654 events = RTC_IRQF;
655
656
657 if ((ctrlb & RTC_CTRL_B_PIE) &&
658 (ctrlc & RTC_CTRL_C_PF)) {
659 events |= RTC_PF;
660 num_irqs++;
661 }
662
663
664 if ((ctrlb & RTC_CTRL_B_AIE) &&
665 (ctrlc & RTC_CTRL_C_AF)) {
666 events |= RTC_AF;
667 num_irqs++;
668 }
669
670
671 if ((ctrlb & RTC_CTRL_B_UIE) &&
672 (ctrlc & RTC_CTRL_C_UF)) {
673 events |= RTC_UF;
674 num_irqs++;
675 }
676 } else {
677
678
679
680
681 ds1685_rtc_extended_irq(rtc, pdev);
682 }
683 }
684 rtc_update_irq(rtc->dev, num_irqs, events);
685 mutex_unlock(rtc_mutex);
686
687 return events ? IRQ_HANDLED : IRQ_NONE;
688 }
689
690
691
692
693
694
695 #ifdef CONFIG_PROC_FS
696 #define NUM_REGS 6
697 #define NUM_BITS 8
698 #define NUM_SPACES 4
699
700
701
702
703 static const char *ds1685_rtc_pirq_rate[16] = {
704 "none", "3.90625ms", "7.8125ms", "0.122070ms", "0.244141ms",
705 "0.488281ms", "0.9765625ms", "1.953125ms", "3.90625ms", "7.8125ms",
706 "15.625ms", "31.25ms", "62.5ms", "125ms", "250ms", "500ms"
707 };
708
709
710
711
712 static const char *ds1685_rtc_sqw_freq[16] = {
713 "none", "256Hz", "128Hz", "8192Hz", "4096Hz", "2048Hz", "1024Hz",
714 "512Hz", "256Hz", "128Hz", "64Hz", "32Hz", "16Hz", "8Hz", "4Hz", "2Hz"
715 };
716
717
718
719
720
721
722 static int
723 ds1685_rtc_proc(struct device *dev, struct seq_file *seq)
724 {
725 struct ds1685_priv *rtc = dev_get_drvdata(dev);
726 u8 ctrla, ctrlb, ctrlc, ctrld, ctrl4a, ctrl4b, ssn[8];
727 char *model;
728
729
730 ds1685_rtc_switch_to_bank1(rtc);
731 ds1685_rtc_get_ssn(rtc, ssn);
732 ctrla = rtc->read(rtc, RTC_CTRL_A);
733 ctrlb = rtc->read(rtc, RTC_CTRL_B);
734 ctrlc = rtc->read(rtc, RTC_CTRL_C);
735 ctrld = rtc->read(rtc, RTC_CTRL_D);
736 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
737 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
738 ds1685_rtc_switch_to_bank0(rtc);
739
740
741 switch (ssn[0]) {
742 case RTC_MODEL_DS1685:
743 model = "DS1685/DS1687\0";
744 break;
745 case RTC_MODEL_DS1689:
746 model = "DS1689/DS1693\0";
747 break;
748 case RTC_MODEL_DS17285:
749 model = "DS17285/DS17287\0";
750 break;
751 case RTC_MODEL_DS17485:
752 model = "DS17485/DS17487\0";
753 break;
754 case RTC_MODEL_DS17885:
755 model = "DS17885/DS17887\0";
756 break;
757 default:
758 model = "Unknown\0";
759 break;
760 }
761
762
763 seq_printf(seq,
764 "Model\t\t: %s\n"
765 "Oscillator\t: %s\n"
766 "12/24hr\t\t: %s\n"
767 "DST\t\t: %s\n"
768 "Data mode\t: %s\n"
769 "Battery\t\t: %s\n"
770 "Aux batt\t: %s\n"
771 "Update IRQ\t: %s\n"
772 "Periodic IRQ\t: %s\n"
773 "Periodic Rate\t: %s\n"
774 "SQW Freq\t: %s\n"
775 "Serial #\t: %8phC\n",
776 model,
777 ((ctrla & RTC_CTRL_A_DV1) ? "enabled" : "disabled"),
778 ((ctrlb & RTC_CTRL_B_2412) ? "24-hour" : "12-hour"),
779 ((ctrlb & RTC_CTRL_B_DSE) ? "enabled" : "disabled"),
780 ((ctrlb & RTC_CTRL_B_DM) ? "binary" : "BCD"),
781 ((ctrld & RTC_CTRL_D_VRT) ? "ok" : "exhausted or n/a"),
782 ((ctrl4a & RTC_CTRL_4A_VRT2) ? "ok" : "exhausted or n/a"),
783 ((ctrlb & RTC_CTRL_B_UIE) ? "yes" : "no"),
784 ((ctrlb & RTC_CTRL_B_PIE) ? "yes" : "no"),
785 (!(ctrl4b & RTC_CTRL_4B_E32K) ?
786 ds1685_rtc_pirq_rate[(ctrla & RTC_CTRL_A_RS_MASK)] : "none"),
787 (!((ctrl4b & RTC_CTRL_4B_E32K)) ?
788 ds1685_rtc_sqw_freq[(ctrla & RTC_CTRL_A_RS_MASK)] : "32768Hz"),
789 ssn);
790 return 0;
791 }
792 #else
793 #define ds1685_rtc_proc NULL
794 #endif
795
796
797
798
799
800
801 static const struct rtc_class_ops
802 ds1685_rtc_ops = {
803 .proc = ds1685_rtc_proc,
804 .read_time = ds1685_rtc_read_time,
805 .set_time = ds1685_rtc_set_time,
806 .read_alarm = ds1685_rtc_read_alarm,
807 .set_alarm = ds1685_rtc_set_alarm,
808 .alarm_irq_enable = ds1685_rtc_alarm_irq_enable,
809 };
810
811
812 static int ds1685_nvram_read(void *priv, unsigned int pos, void *val,
813 size_t size)
814 {
815 struct ds1685_priv *rtc = priv;
816 struct mutex *rtc_mutex = &rtc->dev->ops_lock;
817 ssize_t count;
818 u8 *buf = val;
819 int err;
820
821 err = mutex_lock_interruptible(rtc_mutex);
822 if (err)
823 return err;
824
825 ds1685_rtc_switch_to_bank0(rtc);
826
827
828 for (count = 0; size > 0 && pos < NVRAM_TOTAL_SZ_BANK0;
829 count++, size--) {
830 if (count < NVRAM_SZ_TIME)
831 *buf++ = rtc->read(rtc, (NVRAM_TIME_BASE + pos++));
832 else
833 *buf++ = rtc->read(rtc, (NVRAM_BANK0_BASE + pos++));
834 }
835
836 #ifndef CONFIG_RTC_DRV_DS1689
837 if (size > 0) {
838 ds1685_rtc_switch_to_bank1(rtc);
839
840 #ifndef CONFIG_RTC_DRV_DS1685
841
842 rtc->write(rtc, RTC_EXT_CTRL_4A,
843 (rtc->read(rtc, RTC_EXT_CTRL_4A) |
844 RTC_CTRL_4A_BME));
845
846
847
848 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB,
849 (pos - NVRAM_TOTAL_SZ_BANK0));
850 #endif
851
852
853 for (count = 0; size > 0 && pos < NVRAM_TOTAL_SZ;
854 count++, size--) {
855 #ifdef CONFIG_RTC_DRV_DS1685
856
857
858 rtc->write(rtc, RTC_BANK1_RAM_ADDR,
859 (pos - NVRAM_TOTAL_SZ_BANK0));
860 #endif
861 *buf++ = rtc->read(rtc, RTC_BANK1_RAM_DATA_PORT);
862 pos++;
863 }
864
865 #ifndef CONFIG_RTC_DRV_DS1685
866
867 rtc->write(rtc, RTC_EXT_CTRL_4A,
868 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
869 ~(RTC_CTRL_4A_BME)));
870 #endif
871 ds1685_rtc_switch_to_bank0(rtc);
872 }
873 #endif
874 mutex_unlock(rtc_mutex);
875
876 return 0;
877 }
878
879 static int ds1685_nvram_write(void *priv, unsigned int pos, void *val,
880 size_t size)
881 {
882 struct ds1685_priv *rtc = priv;
883 struct mutex *rtc_mutex = &rtc->dev->ops_lock;
884 ssize_t count;
885 u8 *buf = val;
886 int err;
887
888 err = mutex_lock_interruptible(rtc_mutex);
889 if (err)
890 return err;
891
892 ds1685_rtc_switch_to_bank0(rtc);
893
894
895 for (count = 0; size > 0 && pos < NVRAM_TOTAL_SZ_BANK0;
896 count++, size--)
897 if (count < NVRAM_SZ_TIME)
898 rtc->write(rtc, (NVRAM_TIME_BASE + pos++),
899 *buf++);
900 else
901 rtc->write(rtc, (NVRAM_BANK0_BASE), *buf++);
902
903 #ifndef CONFIG_RTC_DRV_DS1689
904 if (size > 0) {
905 ds1685_rtc_switch_to_bank1(rtc);
906
907 #ifndef CONFIG_RTC_DRV_DS1685
908
909 rtc->write(rtc, RTC_EXT_CTRL_4A,
910 (rtc->read(rtc, RTC_EXT_CTRL_4A) |
911 RTC_CTRL_4A_BME));
912
913
914
915 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB,
916 (pos - NVRAM_TOTAL_SZ_BANK0));
917 #endif
918
919
920 for (count = 0; size > 0 && pos < NVRAM_TOTAL_SZ;
921 count++, size--) {
922 #ifdef CONFIG_RTC_DRV_DS1685
923
924
925 rtc->write(rtc, RTC_BANK1_RAM_ADDR,
926 (pos - NVRAM_TOTAL_SZ_BANK0));
927 #endif
928 rtc->write(rtc, RTC_BANK1_RAM_DATA_PORT, *buf++);
929 pos++;
930 }
931
932 #ifndef CONFIG_RTC_DRV_DS1685
933
934 rtc->write(rtc, RTC_EXT_CTRL_4A,
935 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
936 ~(RTC_CTRL_4A_BME)));
937 #endif
938 ds1685_rtc_switch_to_bank0(rtc);
939 }
940 #endif
941 mutex_unlock(rtc_mutex);
942
943 return 0;
944 }
945
946
947
948
949
950
951
952
953
954
955 static ssize_t
956 ds1685_rtc_sysfs_battery_show(struct device *dev,
957 struct device_attribute *attr, char *buf)
958 {
959 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
960 u8 ctrld;
961
962 ctrld = rtc->read(rtc, RTC_CTRL_D);
963
964 return sprintf(buf, "%s\n",
965 (ctrld & RTC_CTRL_D_VRT) ? "ok" : "not ok or N/A");
966 }
967 static DEVICE_ATTR(battery, S_IRUGO, ds1685_rtc_sysfs_battery_show, NULL);
968
969
970
971
972
973
974
975 static ssize_t
976 ds1685_rtc_sysfs_auxbatt_show(struct device *dev,
977 struct device_attribute *attr, char *buf)
978 {
979 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
980 u8 ctrl4a;
981
982 ds1685_rtc_switch_to_bank1(rtc);
983 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
984 ds1685_rtc_switch_to_bank0(rtc);
985
986 return sprintf(buf, "%s\n",
987 (ctrl4a & RTC_CTRL_4A_VRT2) ? "ok" : "not ok or N/A");
988 }
989 static DEVICE_ATTR(auxbatt, S_IRUGO, ds1685_rtc_sysfs_auxbatt_show, NULL);
990
991
992
993
994
995
996
997 static ssize_t
998 ds1685_rtc_sysfs_serial_show(struct device *dev,
999 struct device_attribute *attr, char *buf)
1000 {
1001 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
1002 u8 ssn[8];
1003
1004 ds1685_rtc_switch_to_bank1(rtc);
1005 ds1685_rtc_get_ssn(rtc, ssn);
1006 ds1685_rtc_switch_to_bank0(rtc);
1007
1008 return sprintf(buf, "%8phC\n", ssn);
1009 }
1010 static DEVICE_ATTR(serial, S_IRUGO, ds1685_rtc_sysfs_serial_show, NULL);
1011
1012
1013
1014
1015 static struct attribute*
1016 ds1685_rtc_sysfs_misc_attrs[] = {
1017 &dev_attr_battery.attr,
1018 &dev_attr_auxbatt.attr,
1019 &dev_attr_serial.attr,
1020 NULL,
1021 };
1022
1023
1024
1025
1026 static const struct attribute_group
1027 ds1685_rtc_sysfs_misc_grp = {
1028 .name = "misc",
1029 .attrs = ds1685_rtc_sysfs_misc_attrs,
1030 };
1031
1032
1033
1034
1035
1036
1037
1038
1039 static int
1040 ds1685_rtc_probe(struct platform_device *pdev)
1041 {
1042 struct rtc_device *rtc_dev;
1043 struct resource *res;
1044 struct ds1685_priv *rtc;
1045 struct ds1685_rtc_platform_data *pdata;
1046 u8 ctrla, ctrlb, hours;
1047 unsigned char am_pm;
1048 int ret = 0;
1049 struct nvmem_config nvmem_cfg = {
1050 .name = "ds1685_nvram",
1051 .size = NVRAM_TOTAL_SZ,
1052 .reg_read = ds1685_nvram_read,
1053 .reg_write = ds1685_nvram_write,
1054 };
1055
1056
1057 pdata = (struct ds1685_rtc_platform_data *) pdev->dev.platform_data;
1058 if (!pdata)
1059 return -ENODEV;
1060
1061
1062 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
1063 if (!rtc)
1064 return -ENOMEM;
1065
1066
1067
1068
1069
1070
1071
1072 if (pdata->alloc_io_resources) {
1073
1074 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1075 if (!res)
1076 return -ENXIO;
1077 rtc->size = resource_size(res);
1078
1079
1080
1081 if (!devm_request_mem_region(&pdev->dev, res->start, rtc->size,
1082 pdev->name))
1083 return -EBUSY;
1084
1085
1086
1087
1088
1089 rtc->baseaddr = res->start;
1090 rtc->regs = devm_ioremap(&pdev->dev, res->start, rtc->size);
1091 if (!rtc->regs)
1092 return -ENOMEM;
1093 }
1094 rtc->alloc_io_resources = pdata->alloc_io_resources;
1095
1096
1097 if (pdata->regstep > 0)
1098 rtc->regstep = pdata->regstep;
1099 else
1100 rtc->regstep = 1;
1101
1102
1103 if (pdata->plat_read)
1104 rtc->read = pdata->plat_read;
1105 else
1106 if (pdata->alloc_io_resources)
1107 rtc->read = ds1685_read;
1108 else
1109 return -ENXIO;
1110
1111
1112 if (pdata->plat_write)
1113 rtc->write = pdata->plat_write;
1114 else
1115 if (pdata->alloc_io_resources)
1116 rtc->write = ds1685_write;
1117 else
1118 return -ENXIO;
1119
1120
1121 if (pdata->plat_prepare_poweroff)
1122 rtc->prepare_poweroff = pdata->plat_prepare_poweroff;
1123
1124
1125 if (pdata->plat_wake_alarm)
1126 rtc->wake_alarm = pdata->plat_wake_alarm;
1127
1128
1129 if (pdata->plat_post_ram_clear)
1130 rtc->post_ram_clear = pdata->plat_post_ram_clear;
1131
1132
1133 platform_set_drvdata(pdev, rtc);
1134
1135
1136 ctrla = rtc->read(rtc, RTC_CTRL_A);
1137 if (!(ctrla & RTC_CTRL_A_DV1))
1138 ctrla |= RTC_CTRL_A_DV1;
1139
1140
1141 ctrla &= ~(RTC_CTRL_A_DV2);
1142
1143
1144 ctrla &= ~(RTC_CTRL_A_RS_MASK);
1145
1146
1147
1148
1149
1150 ctrla |= RTC_CTRL_A_DV0;
1151 rtc->write(rtc, RTC_CTRL_A, ctrla);
1152
1153
1154 rtc->write(rtc, RTC_EXT_CTRL_4B,
1155 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_E32K));
1156
1157
1158 rtc->write(rtc, RTC_CTRL_B,
1159 (rtc->read(rtc, RTC_CTRL_B) | RTC_CTRL_B_SET));
1160
1161
1162 while (rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_INCR)
1163 cpu_relax();
1164
1165
1166
1167
1168
1169 ctrlb = rtc->read(rtc, RTC_CTRL_B);
1170 if (pdata->bcd_mode)
1171 ctrlb &= ~(RTC_CTRL_B_DM);
1172 else
1173 ctrlb |= RTC_CTRL_B_DM;
1174 rtc->bcd_mode = pdata->bcd_mode;
1175
1176
1177
1178
1179
1180
1181 if (ctrlb & RTC_CTRL_B_DSE)
1182 ctrlb &= ~(RTC_CTRL_B_DSE);
1183
1184
1185 if (!(ctrlb & RTC_CTRL_B_2412)) {
1186
1187 hours = rtc->read(rtc, RTC_HRS);
1188 am_pm = hours & RTC_HRS_AMPM_MASK;
1189 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK,
1190 RTC_HRS_12_BIN_MASK);
1191 hours = ((hours == 12) ? 0 : ((am_pm) ? hours + 12 : hours));
1192
1193
1194 ctrlb |= RTC_CTRL_B_2412;
1195
1196
1197 rtc->write(rtc, RTC_CTRL_B, ctrlb);
1198
1199
1200 rtc->write(rtc, RTC_HRS,
1201 ds1685_rtc_bin2bcd(rtc, hours,
1202 RTC_HRS_24_BIN_MASK,
1203 RTC_HRS_24_BCD_MASK));
1204
1205
1206 hours = rtc->read(rtc, RTC_HRS_ALARM);
1207 am_pm = hours & RTC_HRS_AMPM_MASK;
1208 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK,
1209 RTC_HRS_12_BIN_MASK);
1210 hours = ((hours == 12) ? 0 : ((am_pm) ? hours + 12 : hours));
1211
1212
1213 rtc->write(rtc, RTC_HRS_ALARM,
1214 ds1685_rtc_bin2bcd(rtc, hours,
1215 RTC_HRS_24_BIN_MASK,
1216 RTC_HRS_24_BCD_MASK));
1217 } else {
1218
1219 rtc->write(rtc, RTC_CTRL_B, ctrlb);
1220 }
1221
1222
1223 rtc->write(rtc, RTC_CTRL_B,
1224 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_SET)));
1225
1226
1227 if (!(rtc->read(rtc, RTC_CTRL_D) & RTC_CTRL_D_VRT))
1228 dev_warn(&pdev->dev,
1229 "Main battery is exhausted! RTC may be invalid!\n");
1230
1231
1232 if (!(rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_VRT2))
1233 dev_warn(&pdev->dev,
1234 "Aux battery is exhausted or not available.\n");
1235
1236
1237 rtc->write(rtc, RTC_CTRL_B,
1238 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_PAU_MASK)));
1239
1240
1241 rtc->read(rtc, RTC_CTRL_C);
1242
1243
1244 rtc->write(rtc, RTC_EXT_CTRL_4B,
1245 (rtc->read(rtc, RTC_EXT_CTRL_4B) & ~(RTC_CTRL_4B_RWK_MASK)));
1246
1247
1248 rtc->write(rtc, RTC_EXT_CTRL_4A,
1249 (rtc->read(rtc, RTC_EXT_CTRL_4A) & ~(RTC_CTRL_4A_RWK_MASK)));
1250
1251
1252
1253
1254
1255 rtc->write(rtc, RTC_EXT_CTRL_4B,
1256 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_KSE));
1257
1258 rtc_dev = devm_rtc_allocate_device(&pdev->dev);
1259 if (IS_ERR(rtc_dev))
1260 return PTR_ERR(rtc_dev);
1261
1262 rtc_dev->ops = &ds1685_rtc_ops;
1263
1264
1265 rtc_dev->range_min = RTC_TIMESTAMP_BEGIN_2000;
1266 rtc_dev->range_max = RTC_TIMESTAMP_END_2099;
1267
1268
1269 rtc_dev->max_user_freq = RTC_MAX_USER_FREQ;
1270
1271
1272 if (pdata->uie_unsupported)
1273 rtc_dev->uie_unsupported = 1;
1274 rtc->uie_unsupported = pdata->uie_unsupported;
1275
1276 rtc->dev = rtc_dev;
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286 if (!pdata->no_irq) {
1287 ret = platform_get_irq(pdev, 0);
1288 if (ret <= 0)
1289 return ret;
1290
1291 rtc->irq_num = ret;
1292
1293
1294 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_num,
1295 NULL, ds1685_rtc_irq_handler,
1296 IRQF_SHARED | IRQF_ONESHOT,
1297 pdev->name, pdev);
1298
1299
1300 if (unlikely(ret)) {
1301 dev_warn(&pdev->dev,
1302 "RTC interrupt not available\n");
1303 rtc->irq_num = 0;
1304 }
1305 }
1306 rtc->no_irq = pdata->no_irq;
1307
1308
1309 ds1685_rtc_switch_to_bank0(rtc);
1310
1311 ret = rtc_add_group(rtc_dev, &ds1685_rtc_sysfs_misc_grp);
1312 if (ret)
1313 return ret;
1314
1315 rtc_dev->nvram_old_abi = true;
1316 nvmem_cfg.priv = rtc;
1317 ret = rtc_nvmem_register(rtc_dev, &nvmem_cfg);
1318 if (ret)
1319 return ret;
1320
1321 return rtc_register_device(rtc_dev);
1322 }
1323
1324
1325
1326
1327
1328 static int
1329 ds1685_rtc_remove(struct platform_device *pdev)
1330 {
1331 struct ds1685_priv *rtc = platform_get_drvdata(pdev);
1332
1333
1334 rtc->write(rtc, RTC_CTRL_B,
1335 (rtc->read(rtc, RTC_CTRL_B) &
1336 ~(RTC_CTRL_B_PAU_MASK)));
1337
1338
1339 rtc->read(rtc, RTC_CTRL_C);
1340
1341
1342 rtc->write(rtc, RTC_EXT_CTRL_4B,
1343 (rtc->read(rtc, RTC_EXT_CTRL_4B) &
1344 ~(RTC_CTRL_4B_RWK_MASK)));
1345
1346
1347 rtc->write(rtc, RTC_EXT_CTRL_4A,
1348 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
1349 ~(RTC_CTRL_4A_RWK_MASK)));
1350
1351 return 0;
1352 }
1353
1354
1355
1356
1357 static struct platform_driver ds1685_rtc_driver = {
1358 .driver = {
1359 .name = "rtc-ds1685",
1360 },
1361 .probe = ds1685_rtc_probe,
1362 .remove = ds1685_rtc_remove,
1363 };
1364 module_platform_driver(ds1685_rtc_driver);
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375 void __noreturn
1376 ds1685_rtc_poweroff(struct platform_device *pdev)
1377 {
1378 u8 ctrla, ctrl4a, ctrl4b;
1379 struct ds1685_priv *rtc;
1380
1381
1382 if (unlikely(!pdev)) {
1383 pr_emerg("platform device data not available, spinning forever ...\n");
1384 while(1);
1385 unreachable();
1386 } else {
1387
1388 rtc = platform_get_drvdata(pdev);
1389
1390
1391
1392
1393
1394
1395
1396 if (!rtc->no_irq)
1397 disable_irq_nosync(rtc->irq_num);
1398
1399
1400 ctrla = rtc->read(rtc, RTC_CTRL_A);
1401 ctrla |= RTC_CTRL_A_DV1;
1402 ctrla &= ~(RTC_CTRL_A_DV2);
1403 rtc->write(rtc, RTC_CTRL_A, ctrla);
1404
1405
1406
1407
1408
1409
1410 ds1685_rtc_switch_to_bank1(rtc);
1411 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
1412 if (ctrl4a & RTC_CTRL_4A_VRT2) {
1413
1414 ctrl4a &= ~(RTC_CTRL_4A_RWK_MASK);
1415 rtc->write(rtc, RTC_EXT_CTRL_4A, ctrl4a);
1416
1417
1418
1419
1420
1421
1422
1423 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
1424 ctrl4b |= (RTC_CTRL_4B_ABE | RTC_CTRL_4B_WIE |
1425 RTC_CTRL_4B_KSE);
1426 rtc->write(rtc, RTC_EXT_CTRL_4B, ctrl4b);
1427 }
1428
1429
1430 dev_warn(&pdev->dev, "Powerdown.\n");
1431 msleep(20);
1432 rtc->write(rtc, RTC_EXT_CTRL_4A,
1433 (ctrl4a | RTC_CTRL_4A_PAB));
1434
1435
1436 while(1);
1437 unreachable();
1438 }
1439 }
1440 EXPORT_SYMBOL(ds1685_rtc_poweroff);
1441
1442
1443
1444 MODULE_AUTHOR("Joshua Kinard <kumba@gentoo.org>");
1445 MODULE_AUTHOR("Matthias Fuchs <matthias.fuchs@esd-electronics.com>");
1446 MODULE_DESCRIPTION("Dallas/Maxim DS1685/DS1687-series RTC driver");
1447 MODULE_LICENSE("GPL");
1448 MODULE_ALIAS("platform:rtc-ds1685");