Lines Matching full:rtc
2 * An rtc driver for the Dallas/Maxim DS1685/DS1687 and related real-time
12 * Application Note 90, Using the Multiplex Bus RTC Extended Features.
26 #include <linux/rtc.h>
29 #include <linux/rtc/ds1685.h>
40 * ds1685_read - read a value from an rtc register.
41 * @rtc: pointer to the ds1685 rtc structure.
45 ds1685_read(struct ds1685_priv *rtc, int reg) in ds1685_read() argument
47 return readb((u8 __iomem *)rtc->regs + in ds1685_read()
48 (reg * rtc->regstep)); in ds1685_read()
52 * ds1685_write - write a value to an rtc register.
53 * @rtc: pointer to the ds1685 rtc structure.
58 ds1685_write(struct ds1685_priv *rtc, int reg, u8 value) in ds1685_write() argument
60 writeb(value, ((u8 __iomem *)rtc->regs + in ds1685_write()
61 (reg * rtc->regstep))); in ds1685_write()
71 * @rtc: pointer to the ds1685 rtc structure.
79 ds1685_rtc_bcd2bin(struct ds1685_priv *rtc, u8 val, u8 bcd_mask, u8 bin_mask) in ds1685_rtc_bcd2bin() argument
81 if (rtc->bcd_mode) in ds1685_rtc_bcd2bin()
89 * @rtc: pointer to the ds1685 rtc structure.
97 ds1685_rtc_bin2bcd(struct ds1685_priv *rtc, u8 val, u8 bin_mask, u8 bcd_mask) in ds1685_rtc_bin2bcd() argument
99 if (rtc->bcd_mode) in ds1685_rtc_bin2bcd()
107 * @rtc: pointer to the ds1685 rtc structure.
113 ds1685_rtc_check_mday(struct ds1685_priv *rtc, u8 mday) in ds1685_rtc_check_mday() argument
115 if (rtc->bcd_mode) { in ds1685_rtc_check_mday()
126 * ds1685_rtc_switch_to_bank0 - switch the rtc to bank 0.
127 * @rtc: pointer to the ds1685 rtc structure.
130 ds1685_rtc_switch_to_bank0(struct ds1685_priv *rtc) in ds1685_rtc_switch_to_bank0() argument
132 rtc->write(rtc, RTC_CTRL_A, in ds1685_rtc_switch_to_bank0()
133 (rtc->read(rtc, RTC_CTRL_A) & ~(RTC_CTRL_A_DV0))); in ds1685_rtc_switch_to_bank0()
137 * ds1685_rtc_switch_to_bank1 - switch the rtc to bank 1.
138 * @rtc: pointer to the ds1685 rtc structure.
141 ds1685_rtc_switch_to_bank1(struct ds1685_priv *rtc) in ds1685_rtc_switch_to_bank1() argument
143 rtc->write(rtc, RTC_CTRL_A, in ds1685_rtc_switch_to_bank1()
144 (rtc->read(rtc, RTC_CTRL_A) | RTC_CTRL_A_DV0)); in ds1685_rtc_switch_to_bank1()
148 * ds1685_rtc_begin_data_access - prepare the rtc for data access.
149 * @rtc: pointer to the ds1685 rtc structure.
151 * This takes several steps to prepare the rtc for access to get/set time
152 * and alarm values from the rtc registers:
157 * - Switches the rtc to bank 1. This allows access to all relevant
158 * data for normal rtc operation, as bank 0 contains only the nvram.
161 ds1685_rtc_begin_data_access(struct ds1685_priv *rtc) in ds1685_rtc_begin_data_access() argument
164 rtc->write(rtc, RTC_CTRL_B, in ds1685_rtc_begin_data_access()
165 (rtc->read(rtc, RTC_CTRL_B) | RTC_CTRL_B_SET)); in ds1685_rtc_begin_data_access()
168 while (rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_INCR) in ds1685_rtc_begin_data_access()
172 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_begin_data_access()
176 * ds1685_rtc_end_data_access - end data access on the rtc.
177 * @rtc: pointer to the ds1685 rtc structure.
180 * - Switches the rtc back to bank 0.
184 ds1685_rtc_end_data_access(struct ds1685_priv *rtc) in ds1685_rtc_end_data_access() argument
187 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_end_data_access()
190 rtc->write(rtc, RTC_CTRL_B, in ds1685_rtc_end_data_access()
191 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_SET))); in ds1685_rtc_end_data_access()
195 * ds1685_rtc_begin_ctrl_access - prepare the rtc for ctrl access.
196 * @rtc: pointer to the ds1685 rtc structure.
199 * This takes several steps to prepare the rtc for access to read just the
201 * - Sets a spinlock on the rtc IRQ.
202 * - Switches the rtc to bank 1. This allows access to the two extended
208 ds1685_rtc_begin_ctrl_access(struct ds1685_priv *rtc, unsigned long *flags) in ds1685_rtc_begin_ctrl_access() argument
210 spin_lock_irqsave(&rtc->lock, *flags); in ds1685_rtc_begin_ctrl_access()
211 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_begin_ctrl_access()
215 * ds1685_rtc_end_ctrl_access - end ctrl access on the rtc.
216 * @rtc: pointer to the ds1685 rtc structure.
220 * - Switches the rtc back to bank 0.
221 * - Unsets the spinlock on the rtc IRQ.
224 ds1685_rtc_end_ctrl_access(struct ds1685_priv *rtc, unsigned long flags) in ds1685_rtc_end_ctrl_access() argument
226 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_end_ctrl_access()
227 spin_unlock_irqrestore(&rtc->lock, flags); in ds1685_rtc_end_ctrl_access()
232 * @rtc: pointer to the ds1685 rtc structure.
245 ds1685_rtc_get_ssn(struct ds1685_priv *rtc, u8 *ssn) in ds1685_rtc_get_ssn() argument
247 ssn[0] = rtc->read(rtc, RTC_BANK1_SSN_MODEL); in ds1685_rtc_get_ssn()
248 ssn[1] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_1); in ds1685_rtc_get_ssn()
249 ssn[2] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_2); in ds1685_rtc_get_ssn()
250 ssn[3] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_3); in ds1685_rtc_get_ssn()
251 ssn[4] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_4); in ds1685_rtc_get_ssn()
252 ssn[5] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_5); in ds1685_rtc_get_ssn()
253 ssn[6] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_6); in ds1685_rtc_get_ssn()
254 ssn[7] = rtc->read(rtc, RTC_BANK1_SSN_CRC); in ds1685_rtc_get_ssn()
270 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_read_time() local
274 /* Fetch the time info from the RTC registers. */ in ds1685_rtc_read_time()
275 ds1685_rtc_begin_data_access(rtc); in ds1685_rtc_read_time()
276 seconds = rtc->read(rtc, RTC_SECS); in ds1685_rtc_read_time()
277 minutes = rtc->read(rtc, RTC_MINS); in ds1685_rtc_read_time()
278 hours = rtc->read(rtc, RTC_HRS); in ds1685_rtc_read_time()
279 wday = rtc->read(rtc, RTC_WDAY); in ds1685_rtc_read_time()
280 mday = rtc->read(rtc, RTC_MDAY); in ds1685_rtc_read_time()
281 month = rtc->read(rtc, RTC_MONTH); in ds1685_rtc_read_time()
282 years = rtc->read(rtc, RTC_YEAR); in ds1685_rtc_read_time()
283 century = rtc->read(rtc, RTC_CENTURY); in ds1685_rtc_read_time()
284 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_read_time()
285 ds1685_rtc_end_data_access(rtc); in ds1685_rtc_read_time()
288 years = ds1685_rtc_bcd2bin(rtc, years, RTC_YEAR_BCD_MASK, in ds1685_rtc_read_time()
290 century = ds1685_rtc_bcd2bin(rtc, century, RTC_CENTURY_MASK, in ds1685_rtc_read_time()
292 tm->tm_sec = ds1685_rtc_bcd2bin(rtc, seconds, RTC_SECS_BCD_MASK, in ds1685_rtc_read_time()
294 tm->tm_min = ds1685_rtc_bcd2bin(rtc, minutes, RTC_MINS_BCD_MASK, in ds1685_rtc_read_time()
296 tm->tm_hour = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_24_BCD_MASK, in ds1685_rtc_read_time()
298 tm->tm_wday = (ds1685_rtc_bcd2bin(rtc, wday, RTC_WDAY_MASK, in ds1685_rtc_read_time()
300 tm->tm_mday = ds1685_rtc_bcd2bin(rtc, mday, RTC_MDAY_BCD_MASK, in ds1685_rtc_read_time()
302 tm->tm_mon = (ds1685_rtc_bcd2bin(rtc, month, RTC_MONTH_BCD_MASK, in ds1685_rtc_read_time()
306 tm->tm_isdst = 0; /* RTC has hardcoded timezone, so don't use. */ in ds1685_rtc_read_time()
319 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_set_time() local
323 seconds = ds1685_rtc_bin2bcd(rtc, tm->tm_sec, RTC_SECS_BIN_MASK, in ds1685_rtc_set_time()
325 minutes = ds1685_rtc_bin2bcd(rtc, tm->tm_min, RTC_MINS_BIN_MASK, in ds1685_rtc_set_time()
327 hours = ds1685_rtc_bin2bcd(rtc, tm->tm_hour, RTC_HRS_24_BIN_MASK, in ds1685_rtc_set_time()
329 wday = ds1685_rtc_bin2bcd(rtc, (tm->tm_wday + 1), RTC_WDAY_MASK, in ds1685_rtc_set_time()
331 mday = ds1685_rtc_bin2bcd(rtc, tm->tm_mday, RTC_MDAY_BIN_MASK, in ds1685_rtc_set_time()
333 month = ds1685_rtc_bin2bcd(rtc, (tm->tm_mon + 1), RTC_MONTH_BIN_MASK, in ds1685_rtc_set_time()
335 years = ds1685_rtc_bin2bcd(rtc, (tm->tm_year % 100), in ds1685_rtc_set_time()
337 century = ds1685_rtc_bin2bcd(rtc, ((tm->tm_year + 1900) / 100), in ds1685_rtc_set_time()
358 * RTC registers. in ds1685_rtc_set_time()
360 ds1685_rtc_begin_data_access(rtc); in ds1685_rtc_set_time()
361 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_set_time()
362 if (rtc->bcd_mode) in ds1685_rtc_set_time()
366 rtc->write(rtc, RTC_CTRL_B, ctrlb); in ds1685_rtc_set_time()
367 rtc->write(rtc, RTC_SECS, seconds); in ds1685_rtc_set_time()
368 rtc->write(rtc, RTC_MINS, minutes); in ds1685_rtc_set_time()
369 rtc->write(rtc, RTC_HRS, hours); in ds1685_rtc_set_time()
370 rtc->write(rtc, RTC_WDAY, wday); in ds1685_rtc_set_time()
371 rtc->write(rtc, RTC_MDAY, mday); in ds1685_rtc_set_time()
372 rtc->write(rtc, RTC_MONTH, month); in ds1685_rtc_set_time()
373 rtc->write(rtc, RTC_YEAR, years); in ds1685_rtc_set_time()
374 rtc->write(rtc, RTC_CENTURY, century); in ds1685_rtc_set_time()
375 ds1685_rtc_end_data_access(rtc); in ds1685_rtc_set_time()
395 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_read_alarm() local
399 /* Fetch the alarm info from the RTC alarm registers. */ in ds1685_rtc_read_alarm()
400 ds1685_rtc_begin_data_access(rtc); in ds1685_rtc_read_alarm()
401 seconds = rtc->read(rtc, RTC_SECS_ALARM); in ds1685_rtc_read_alarm()
402 minutes = rtc->read(rtc, RTC_MINS_ALARM); in ds1685_rtc_read_alarm()
403 hours = rtc->read(rtc, RTC_HRS_ALARM); in ds1685_rtc_read_alarm()
404 mday = rtc->read(rtc, RTC_MDAY_ALARM); in ds1685_rtc_read_alarm()
405 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_read_alarm()
406 ctrlc = rtc->read(rtc, RTC_CTRL_C); in ds1685_rtc_read_alarm()
407 ds1685_rtc_end_data_access(rtc); in ds1685_rtc_read_alarm()
410 ret = ds1685_rtc_check_mday(rtc, mday); in ds1685_rtc_read_alarm()
417 * The Linux RTC system doesn't support the "don't care" capability in ds1685_rtc_read_alarm()
418 * of this RTC chip. We check for it anyways in case support is in ds1685_rtc_read_alarm()
422 alrm->time.tm_sec = ds1685_rtc_bcd2bin(rtc, seconds, in ds1685_rtc_read_alarm()
427 alrm->time.tm_min = ds1685_rtc_bcd2bin(rtc, minutes, in ds1685_rtc_read_alarm()
432 alrm->time.tm_hour = ds1685_rtc_bcd2bin(rtc, hours, in ds1685_rtc_read_alarm()
437 alrm->time.tm_mday = ds1685_rtc_bcd2bin(rtc, mday, RTC_MDAY_BCD_MASK, in ds1685_rtc_read_alarm()
453 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_set_alarm() local
458 seconds = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_sec, in ds1685_rtc_set_alarm()
461 minutes = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_min, in ds1685_rtc_set_alarm()
464 hours = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_hour, in ds1685_rtc_set_alarm()
467 mday = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_mday, in ds1685_rtc_set_alarm()
472 ret = ds1685_rtc_check_mday(rtc, mday); in ds1685_rtc_set_alarm()
479 * The Linux RTC system doesn't support the "don't care" capability in ds1685_rtc_set_alarm()
480 * of this RTC chip because rtc_valid_tm tries to validate every in ds1685_rtc_set_alarm()
500 ds1685_rtc_begin_data_access(rtc); in ds1685_rtc_set_alarm()
501 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_set_alarm()
502 rtc->write(rtc, RTC_CTRL_B, (ctrlb & ~(RTC_CTRL_B_AIE))); in ds1685_rtc_set_alarm()
505 rtc->read(rtc, RTC_CTRL_C); in ds1685_rtc_set_alarm()
509 * RTC registers. in ds1685_rtc_set_alarm()
511 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_set_alarm()
512 if (rtc->bcd_mode) in ds1685_rtc_set_alarm()
516 rtc->write(rtc, RTC_CTRL_B, ctrlb); in ds1685_rtc_set_alarm()
517 rtc->write(rtc, RTC_SECS_ALARM, seconds); in ds1685_rtc_set_alarm()
518 rtc->write(rtc, RTC_MINS_ALARM, minutes); in ds1685_rtc_set_alarm()
519 rtc->write(rtc, RTC_HRS_ALARM, hours); in ds1685_rtc_set_alarm()
520 rtc->write(rtc, RTC_MDAY_ALARM, mday); in ds1685_rtc_set_alarm()
524 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_set_alarm()
526 rtc->write(rtc, RTC_CTRL_B, ctrlb); in ds1685_rtc_set_alarm()
530 ds1685_rtc_end_data_access(rtc); in ds1685_rtc_set_alarm()
548 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_alarm_irq_enable() local
552 spin_lock_irqsave(&rtc->lock, flags); in ds1685_rtc_alarm_irq_enable()
556 rtc->write(rtc, RTC_CTRL_B, (rtc->read(rtc, RTC_CTRL_B) | in ds1685_rtc_alarm_irq_enable()
559 rtc->write(rtc, RTC_CTRL_B, (rtc->read(rtc, RTC_CTRL_B) & in ds1685_rtc_alarm_irq_enable()
563 rtc->read(rtc, RTC_CTRL_C); in ds1685_rtc_alarm_irq_enable()
564 spin_unlock_irqrestore(&rtc->lock, flags); in ds1685_rtc_alarm_irq_enable()
583 struct ds1685_priv *rtc = platform_get_drvdata(pdev); in ds1685_rtc_irq_handler() local
589 if (unlikely(!rtc)) in ds1685_rtc_irq_handler()
593 spin_lock(&rtc->lock); in ds1685_rtc_irq_handler()
594 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_irq_handler()
595 ctrlc = rtc->read(rtc, RTC_CTRL_C); in ds1685_rtc_irq_handler()
602 * update the RTC core. in ds1685_rtc_irq_handler()
628 rtc_update_irq(rtc->dev, num_irqs, events); in ds1685_rtc_irq_handler()
632 * is not recognized by the RTC core. These need to in ds1685_rtc_irq_handler()
636 * and inform the RTC core that the IRQs were handled. in ds1685_rtc_irq_handler()
638 spin_unlock(&rtc->lock); in ds1685_rtc_irq_handler()
639 schedule_work(&rtc->work); in ds1685_rtc_irq_handler()
640 rtc_update_irq(rtc->dev, 0, 0); in ds1685_rtc_irq_handler()
644 spin_unlock(&rtc->lock); in ds1685_rtc_irq_handler()
656 struct ds1685_priv *rtc = container_of(work, in ds1685_rtc_work_queue() local
658 struct platform_device *pdev = to_platform_device(&rtc->dev->dev); in ds1685_rtc_work_queue()
659 struct mutex *rtc_mutex = &rtc->dev->ops_lock; in ds1685_rtc_work_queue()
664 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_work_queue()
665 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A); in ds1685_rtc_work_queue()
666 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B); in ds1685_rtc_work_queue()
675 rtc->write(rtc, RTC_EXT_CTRL_4B, in ds1685_rtc_work_queue()
676 (rtc->read(rtc, RTC_EXT_CTRL_4B) & in ds1685_rtc_work_queue()
680 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_work_queue()
690 rtc->write(rtc, RTC_EXT_CTRL_4B, in ds1685_rtc_work_queue()
691 (rtc->read(rtc, RTC_EXT_CTRL_4B) | in ds1685_rtc_work_queue()
695 if (rtc->prepare_poweroff != NULL) in ds1685_rtc_work_queue()
696 rtc->prepare_poweroff(); in ds1685_rtc_work_queue()
708 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_work_queue()
712 if (rtc->wake_alarm != NULL) in ds1685_rtc_work_queue()
713 rtc->wake_alarm(); in ds1685_rtc_work_queue()
730 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_work_queue()
735 if (rtc->post_ram_clear != NULL) in ds1685_rtc_work_queue()
736 rtc->post_ram_clear(); in ds1685_rtc_work_queue()
741 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_work_queue()
809 struct ds1685_priv *rtc = platform_get_drvdata(pdev); in ds1685_rtc_proc() local
817 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_proc()
818 ds1685_rtc_get_ssn(rtc, ssn); in ds1685_rtc_proc()
819 ctrla = rtc->read(rtc, RTC_CTRL_A); in ds1685_rtc_proc()
820 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_proc()
821 ctrlc = rtc->read(rtc, RTC_CTRL_C); in ds1685_rtc_proc()
822 ctrld = rtc->read(rtc, RTC_CTRL_D); in ds1685_rtc_proc()
823 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A); in ds1685_rtc_proc()
824 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B); in ds1685_rtc_proc()
825 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_proc()
827 /* Determine the RTC model. */ in ds1685_rtc_proc()
917 /* RTC Class operations */
936 * ds1685_rtc_sysfs_nvram_read - reads rtc nvram via sysfs.
951 struct ds1685_priv *rtc = platform_get_drvdata(pdev); in ds1685_rtc_sysfs_nvram_read() local
955 spin_lock_irqsave(&rtc->lock, flags); in ds1685_rtc_sysfs_nvram_read()
956 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_sysfs_nvram_read()
962 *buf++ = rtc->read(rtc, (NVRAM_TIME_BASE + pos++)); in ds1685_rtc_sysfs_nvram_read()
964 *buf++ = rtc->read(rtc, (NVRAM_BANK0_BASE + pos++)); in ds1685_rtc_sysfs_nvram_read()
969 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_sysfs_nvram_read()
973 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_sysfs_nvram_read()
974 (rtc->read(rtc, RTC_EXT_CTRL_4A) | in ds1685_rtc_sysfs_nvram_read()
979 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB, in ds1685_rtc_sysfs_nvram_read()
989 rtc->write(rtc, RTC_BANK1_RAM_ADDR, in ds1685_rtc_sysfs_nvram_read()
992 *buf++ = rtc->read(rtc, RTC_BANK1_RAM_DATA_PORT); in ds1685_rtc_sysfs_nvram_read()
998 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_sysfs_nvram_read()
999 (rtc->read(rtc, RTC_EXT_CTRL_4A) & in ds1685_rtc_sysfs_nvram_read()
1002 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_sysfs_nvram_read()
1005 spin_unlock_irqrestore(&rtc->lock, flags); in ds1685_rtc_sysfs_nvram_read()
1016 * ds1685_rtc_sysfs_nvram_write - writes rtc nvram via sysfs.
1031 struct ds1685_priv *rtc = platform_get_drvdata(pdev); in ds1685_rtc_sysfs_nvram_write() local
1035 spin_lock_irqsave(&rtc->lock, flags); in ds1685_rtc_sysfs_nvram_write()
1036 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_sysfs_nvram_write()
1042 rtc->write(rtc, (NVRAM_TIME_BASE + pos++), in ds1685_rtc_sysfs_nvram_write()
1045 rtc->write(rtc, (NVRAM_BANK0_BASE), *buf++); in ds1685_rtc_sysfs_nvram_write()
1049 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_sysfs_nvram_write()
1053 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_sysfs_nvram_write()
1054 (rtc->read(rtc, RTC_EXT_CTRL_4A) | in ds1685_rtc_sysfs_nvram_write()
1059 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB, in ds1685_rtc_sysfs_nvram_write()
1069 rtc->write(rtc, RTC_BANK1_RAM_ADDR, in ds1685_rtc_sysfs_nvram_write()
1072 rtc->write(rtc, RTC_BANK1_RAM_DATA_PORT, *buf++); in ds1685_rtc_sysfs_nvram_write()
1078 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_sysfs_nvram_write()
1079 (rtc->read(rtc, RTC_EXT_CTRL_4A) & in ds1685_rtc_sysfs_nvram_write()
1082 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_sysfs_nvram_write()
1085 spin_unlock_irqrestore(&rtc->lock, flags); in ds1685_rtc_sysfs_nvram_write()
1091 * struct ds1685_rtc_sysfs_nvram_attr - sysfs attributes for rtc nvram.
1118 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_sysfs_battery_show() local
1121 ctrld = rtc->read(rtc, RTC_CTRL_D); in ds1685_rtc_sysfs_battery_show()
1138 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_sysfs_auxbatt_show() local
1141 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_sysfs_auxbatt_show()
1142 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A); in ds1685_rtc_sysfs_auxbatt_show()
1143 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_sysfs_auxbatt_show()
1160 struct ds1685_priv *rtc = dev_get_drvdata(dev); in ds1685_rtc_sysfs_serial_show() local
1163 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_sysfs_serial_show()
1164 ds1685_rtc_get_ssn(rtc, ssn); in ds1685_rtc_sysfs_serial_show()
1165 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_sysfs_serial_show()
1172 * struct ds1685_rtc_sysfs_misc_attrs - list for misc RTC features.
1183 * struct ds1685_rtc_sysfs_misc_grp - attr group for misc RTC features.
1232 * ds1685_rtc_probe - initializes rtc driver.
1240 struct ds1685_priv *rtc; in ds1685_rtc_probe() local
1251 /* Allocate memory for the rtc device. */ in ds1685_rtc_probe()
1252 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in ds1685_rtc_probe()
1253 if (!rtc) in ds1685_rtc_probe()
1258 * platforms put the RTC in an easy-access place. Like the SGI Octane, in ds1685_rtc_probe()
1259 * which attaches the RTC to a "ByteBus", hooked to a SuperIO chip in ds1685_rtc_probe()
1267 rtc->size = resource_size(res); in ds1685_rtc_probe()
1271 if (!devm_request_mem_region(&pdev->dev, res->start, rtc->size, in ds1685_rtc_probe()
1276 * Set the base address for the rtc, and ioremap its in ds1685_rtc_probe()
1279 rtc->baseaddr = res->start; in ds1685_rtc_probe()
1280 rtc->regs = devm_ioremap(&pdev->dev, res->start, rtc->size); in ds1685_rtc_probe()
1281 if (!rtc->regs) in ds1685_rtc_probe()
1284 rtc->alloc_io_resources = pdata->alloc_io_resources; in ds1685_rtc_probe()
1288 rtc->regstep = pdata->regstep; in ds1685_rtc_probe()
1290 rtc->regstep = 1; in ds1685_rtc_probe()
1294 rtc->read = pdata->plat_read; in ds1685_rtc_probe()
1297 rtc->read = ds1685_read; in ds1685_rtc_probe()
1303 rtc->write = pdata->plat_write; in ds1685_rtc_probe()
1306 rtc->write = ds1685_write; in ds1685_rtc_probe()
1312 rtc->prepare_poweroff = pdata->plat_prepare_poweroff; in ds1685_rtc_probe()
1316 rtc->wake_alarm = pdata->plat_wake_alarm; in ds1685_rtc_probe()
1320 rtc->post_ram_clear = pdata->plat_post_ram_clear; in ds1685_rtc_probe()
1323 spin_lock_init(&rtc->lock); in ds1685_rtc_probe()
1324 INIT_WORK(&rtc->work, ds1685_rtc_work_queue); in ds1685_rtc_probe()
1325 platform_set_drvdata(pdev, rtc); in ds1685_rtc_probe()
1328 ctrla = rtc->read(rtc, RTC_CTRL_A); in ds1685_rtc_probe()
1340 * the RTC setup so we have access to the extended functions. in ds1685_rtc_probe()
1343 rtc->write(rtc, RTC_CTRL_A, ctrla); in ds1685_rtc_probe()
1346 rtc->write(rtc, RTC_EXT_CTRL_4B, in ds1685_rtc_probe()
1347 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_E32K)); in ds1685_rtc_probe()
1350 rtc->write(rtc, RTC_CTRL_B, in ds1685_rtc_probe()
1351 (rtc->read(rtc, RTC_CTRL_B) | RTC_CTRL_B_SET)); in ds1685_rtc_probe()
1354 while (rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_INCR) in ds1685_rtc_probe()
1361 ctrlb = rtc->read(rtc, RTC_CTRL_B); in ds1685_rtc_probe()
1366 rtc->bcd_mode = pdata->bcd_mode; in ds1685_rtc_probe()
1370 * The RTC has hardcoded timezone information that is rendered in ds1685_rtc_probe()
1379 hours = rtc->read(rtc, RTC_HRS); in ds1685_rtc_probe()
1381 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK, in ds1685_rtc_probe()
1389 rtc->write(rtc, RTC_CTRL_B, ctrlb); in ds1685_rtc_probe()
1392 rtc->write(rtc, RTC_HRS, in ds1685_rtc_probe()
1393 ds1685_rtc_bin2bcd(rtc, hours, in ds1685_rtc_probe()
1398 hours = rtc->read(rtc, RTC_HRS_ALARM); in ds1685_rtc_probe()
1400 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK, in ds1685_rtc_probe()
1405 rtc->write(rtc, RTC_HRS_ALARM, in ds1685_rtc_probe()
1406 ds1685_rtc_bin2bcd(rtc, hours, in ds1685_rtc_probe()
1411 rtc->write(rtc, RTC_CTRL_B, ctrlb); in ds1685_rtc_probe()
1414 /* Unset the SET bit in Control B so the RTC can update. */ in ds1685_rtc_probe()
1415 rtc->write(rtc, RTC_CTRL_B, in ds1685_rtc_probe()
1416 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_SET))); in ds1685_rtc_probe()
1419 if (!(rtc->read(rtc, RTC_CTRL_D) & RTC_CTRL_D_VRT)) in ds1685_rtc_probe()
1421 "Main battery is exhausted! RTC may be invalid!\n"); in ds1685_rtc_probe()
1424 if (!(rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_VRT2)) in ds1685_rtc_probe()
1429 rtc->write(rtc, RTC_CTRL_B, in ds1685_rtc_probe()
1430 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_PAU_MASK))); in ds1685_rtc_probe()
1433 rtc->read(rtc, RTC_CTRL_C); in ds1685_rtc_probe()
1436 rtc->write(rtc, RTC_EXT_CTRL_4B, in ds1685_rtc_probe()
1437 (rtc->read(rtc, RTC_EXT_CTRL_4B) & ~(RTC_CTRL_4B_RWK_MASK))); in ds1685_rtc_probe()
1440 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_probe()
1441 (rtc->read(rtc, RTC_EXT_CTRL_4A) & ~(RTC_CTRL_4A_RWK_MASK))); in ds1685_rtc_probe()
1447 rtc->write(rtc, RTC_EXT_CTRL_4B, in ds1685_rtc_probe()
1448 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_KSE)); in ds1685_rtc_probe()
1466 rtc->uie_unsupported = pdata->uie_unsupported; in ds1685_rtc_probe()
1468 rtc->dev = rtc_dev; in ds1685_rtc_probe()
1474 * RTC will still set the *IE / *F flags and raise IRQF in ctrlc, but in ds1685_rtc_probe()
1481 rtc->irq_num = ret; in ds1685_rtc_probe()
1484 ret = devm_request_irq(&pdev->dev, rtc->irq_num, in ds1685_rtc_probe()
1491 "RTC interrupt not available\n"); in ds1685_rtc_probe()
1492 rtc->irq_num = 0; in ds1685_rtc_probe()
1497 rtc->no_irq = pdata->no_irq; in ds1685_rtc_probe()
1500 ds1685_rtc_switch_to_bank0(rtc); in ds1685_rtc_probe()
1512 * ds1685_rtc_remove - removes rtc driver.
1518 struct ds1685_priv *rtc = platform_get_drvdata(pdev); in ds1685_rtc_remove() local
1525 rtc->write(rtc, RTC_CTRL_B, in ds1685_rtc_remove()
1526 (rtc->read(rtc, RTC_CTRL_B) & in ds1685_rtc_remove()
1530 rtc->read(rtc, RTC_CTRL_C); in ds1685_rtc_remove()
1533 rtc->write(rtc, RTC_EXT_CTRL_4B, in ds1685_rtc_remove()
1534 (rtc->read(rtc, RTC_EXT_CTRL_4B) & in ds1685_rtc_remove()
1538 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_remove()
1539 (rtc->read(rtc, RTC_EXT_CTRL_4A) & in ds1685_rtc_remove()
1542 cancel_work_sync(&rtc->work); in ds1685_rtc_remove()
1548 * ds1685_rtc_driver - rtc driver properties.
1552 .name = "rtc-ds1685",
1565 * ds1685_rtc_poweroff - uses the RTC chip to power the system off.
1572 struct ds1685_priv *rtc; in ds1685_rtc_poweroff() local
1574 /* Check for valid RTC data, else, spin forever. */ in ds1685_rtc_poweroff()
1580 /* Get the rtc data. */ in ds1685_rtc_poweroff()
1581 rtc = platform_get_drvdata(pdev); in ds1685_rtc_poweroff()
1589 if (!rtc->no_irq) in ds1685_rtc_poweroff()
1590 disable_irq_nosync(rtc->irq_num); in ds1685_rtc_poweroff()
1593 ctrla = rtc->read(rtc, RTC_CTRL_A); in ds1685_rtc_poweroff()
1596 rtc->write(rtc, RTC_CTRL_A, ctrla); in ds1685_rtc_poweroff()
1603 ds1685_rtc_switch_to_bank1(rtc); in ds1685_rtc_poweroff()
1604 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A); in ds1685_rtc_poweroff()
1608 rtc->write(rtc, RTC_EXT_CTRL_4A, ctrl4a); in ds1685_rtc_poweroff()
1616 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B); in ds1685_rtc_poweroff()
1619 rtc->write(rtc, RTC_EXT_CTRL_4B, ctrl4b); in ds1685_rtc_poweroff()
1625 rtc->write(rtc, RTC_EXT_CTRL_4A, in ds1685_rtc_poweroff()
1639 MODULE_DESCRIPTION("Dallas/Maxim DS1685/DS1687-series RTC driver");
1641 MODULE_ALIAS("platform:rtc-ds1685");