Lines Matching refs:rtc

3  * An rtc driver for the Dallas/Maxim DS1685/DS1687 and related real-time
23 #include <linux/rtc.h>
26 #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)
47 return readb((u8 __iomem *)rtc->regs +
48 (reg * rtc->regstep));
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)
60 writeb(value, ((u8 __iomem *)rtc->regs +
61 (reg * rtc->regstep)));
71 * ds1685_indirect_read - read a value from an rtc register.
72 * @rtc: pointer to the ds1685 rtc structure.
76 ds1685_indirect_read(struct ds1685_priv *rtc, int reg)
78 writeb(reg, rtc->regs);
79 return readb(rtc->data);
83 * ds1685_indirect_write - write a value to an rtc register.
84 * @rtc: pointer to the ds1685 rtc structure.
89 ds1685_indirect_write(struct ds1685_priv *rtc, int reg, u8 value)
91 writeb(reg, rtc->regs);
92 writeb(value, rtc->data);
100 * @rtc: pointer to the ds1685 rtc structure.
108 ds1685_rtc_bcd2bin(struct ds1685_priv *rtc, u8 val, u8 bcd_mask, u8 bin_mask)
110 if (rtc->bcd_mode)
118 * @rtc: pointer to the ds1685 rtc structure.
126 ds1685_rtc_bin2bcd(struct ds1685_priv *rtc, u8 val, u8 bin_mask, u8 bcd_mask)
128 if (rtc->bcd_mode)
136 * @rtc: pointer to the ds1685 rtc structure.
142 ds1685_rtc_check_mday(struct ds1685_priv *rtc, u8 mday)
144 if (rtc->bcd_mode) {
155 * ds1685_rtc_switch_to_bank0 - switch the rtc to bank 0.
156 * @rtc: pointer to the ds1685 rtc structure.
159 ds1685_rtc_switch_to_bank0(struct ds1685_priv *rtc)
161 rtc->write(rtc, RTC_CTRL_A,
162 (rtc->read(rtc, RTC_CTRL_A) & ~(RTC_CTRL_A_DV0)));
166 * ds1685_rtc_switch_to_bank1 - switch the rtc to bank 1.
167 * @rtc: pointer to the ds1685 rtc structure.
170 ds1685_rtc_switch_to_bank1(struct ds1685_priv *rtc)
172 rtc->write(rtc, RTC_CTRL_A,
173 (rtc->read(rtc, RTC_CTRL_A) | RTC_CTRL_A_DV0));
177 * ds1685_rtc_begin_data_access - prepare the rtc for data access.
178 * @rtc: pointer to the ds1685 rtc structure.
180 * This takes several steps to prepare the rtc for access to get/set time
181 * and alarm values from the rtc registers:
186 * - Switches the rtc to bank 1. This allows access to all relevant
187 * data for normal rtc operation, as bank 0 contains only the nvram.
190 ds1685_rtc_begin_data_access(struct ds1685_priv *rtc)
193 rtc->write(rtc, RTC_CTRL_B,
194 (rtc->read(rtc, RTC_CTRL_B) | RTC_CTRL_B_SET));
197 ds1685_rtc_switch_to_bank1(rtc);
200 while (rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_INCR)
205 * ds1685_rtc_end_data_access - end data access on the rtc.
206 * @rtc: pointer to the ds1685 rtc structure.
209 * - Switches the rtc back to bank 0.
213 ds1685_rtc_end_data_access(struct ds1685_priv *rtc)
216 ds1685_rtc_switch_to_bank0(rtc);
219 rtc->write(rtc, RTC_CTRL_B,
220 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_SET)));
225 * @rtc: pointer to the ds1685 rtc structure.
238 ds1685_rtc_get_ssn(struct ds1685_priv *rtc, u8 *ssn)
240 ssn[0] = rtc->read(rtc, RTC_BANK1_SSN_MODEL);
241 ssn[1] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_1);
242 ssn[2] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_2);
243 ssn[3] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_3);
244 ssn[4] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_4);
245 ssn[5] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_5);
246 ssn[6] = rtc->read(rtc, RTC_BANK1_SSN_BYTE_6);
247 ssn[7] = rtc->read(rtc, RTC_BANK1_SSN_CRC);
263 struct ds1685_priv *rtc = dev_get_drvdata(dev);
268 ds1685_rtc_begin_data_access(rtc);
269 seconds = rtc->read(rtc, RTC_SECS);
270 minutes = rtc->read(rtc, RTC_MINS);
271 hours = rtc->read(rtc, RTC_HRS);
272 wday = rtc->read(rtc, RTC_WDAY);
273 mday = rtc->read(rtc, RTC_MDAY);
274 month = rtc->read(rtc, RTC_MONTH);
275 years = rtc->read(rtc, RTC_YEAR);
276 century = rtc->read(rtc, RTC_CENTURY);
277 ds1685_rtc_end_data_access(rtc);
280 years = ds1685_rtc_bcd2bin(rtc, years, RTC_YEAR_BCD_MASK,
282 century = ds1685_rtc_bcd2bin(rtc, century, RTC_CENTURY_MASK,
284 tm->tm_sec = ds1685_rtc_bcd2bin(rtc, seconds, RTC_SECS_BCD_MASK,
286 tm->tm_min = ds1685_rtc_bcd2bin(rtc, minutes, RTC_MINS_BCD_MASK,
288 tm->tm_hour = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_24_BCD_MASK,
290 tm->tm_wday = (ds1685_rtc_bcd2bin(rtc, wday, RTC_WDAY_MASK,
292 tm->tm_mday = ds1685_rtc_bcd2bin(rtc, mday, RTC_MDAY_BCD_MASK,
294 tm->tm_mon = (ds1685_rtc_bcd2bin(rtc, month, RTC_MONTH_BCD_MASK,
311 struct ds1685_priv *rtc = dev_get_drvdata(dev);
315 seconds = ds1685_rtc_bin2bcd(rtc, tm->tm_sec, RTC_SECS_BIN_MASK,
317 minutes = ds1685_rtc_bin2bcd(rtc, tm->tm_min, RTC_MINS_BIN_MASK,
319 hours = ds1685_rtc_bin2bcd(rtc, tm->tm_hour, RTC_HRS_24_BIN_MASK,
321 wday = ds1685_rtc_bin2bcd(rtc, (tm->tm_wday + 1), RTC_WDAY_MASK,
323 mday = ds1685_rtc_bin2bcd(rtc, tm->tm_mday, RTC_MDAY_BIN_MASK,
325 month = ds1685_rtc_bin2bcd(rtc, (tm->tm_mon + 1), RTC_MONTH_BIN_MASK,
327 years = ds1685_rtc_bin2bcd(rtc, (tm->tm_year % 100),
329 century = ds1685_rtc_bin2bcd(rtc, ((tm->tm_year + 1900) / 100),
352 ds1685_rtc_begin_data_access(rtc);
353 ctrlb = rtc->read(rtc, RTC_CTRL_B);
354 if (rtc->bcd_mode)
358 rtc->write(rtc, RTC_CTRL_B, ctrlb);
359 rtc->write(rtc, RTC_SECS, seconds);
360 rtc->write(rtc, RTC_MINS, minutes);
361 rtc->write(rtc, RTC_HRS, hours);
362 rtc->write(rtc, RTC_WDAY, wday);
363 rtc->write(rtc, RTC_MDAY, mday);
364 rtc->write(rtc, RTC_MONTH, month);
365 rtc->write(rtc, RTC_YEAR, years);
366 rtc->write(rtc, RTC_CENTURY, century);
367 ds1685_rtc_end_data_access(rtc);
387 struct ds1685_priv *rtc = dev_get_drvdata(dev);
392 ds1685_rtc_begin_data_access(rtc);
393 seconds = rtc->read(rtc, RTC_SECS_ALARM);
394 minutes = rtc->read(rtc, RTC_MINS_ALARM);
395 hours = rtc->read(rtc, RTC_HRS_ALARM);
396 mday = rtc->read(rtc, RTC_MDAY_ALARM);
397 ctrlb = rtc->read(rtc, RTC_CTRL_B);
398 ctrlc = rtc->read(rtc, RTC_CTRL_C);
399 ds1685_rtc_end_data_access(rtc);
402 ret = ds1685_rtc_check_mday(rtc, mday);
414 alrm->time.tm_sec = ds1685_rtc_bcd2bin(rtc, seconds,
419 alrm->time.tm_min = ds1685_rtc_bcd2bin(rtc, minutes,
424 alrm->time.tm_hour = ds1685_rtc_bcd2bin(rtc, hours,
429 alrm->time.tm_mday = ds1685_rtc_bcd2bin(rtc, mday, RTC_MDAY_BCD_MASK,
445 struct ds1685_priv *rtc = dev_get_drvdata(dev);
450 seconds = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_sec,
453 minutes = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_min,
456 hours = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_hour,
459 mday = ds1685_rtc_bin2bcd(rtc, alrm->time.tm_mday,
464 ret = ds1685_rtc_check_mday(rtc, mday);
492 ds1685_rtc_begin_data_access(rtc);
493 ctrlb = rtc->read(rtc, RTC_CTRL_B);
494 rtc->write(rtc, RTC_CTRL_B, (ctrlb & ~(RTC_CTRL_B_AIE)));
497 rtc->read(rtc, RTC_CTRL_C);
503 ctrlb = rtc->read(rtc, RTC_CTRL_B);
504 if (rtc->bcd_mode)
508 rtc->write(rtc, RTC_CTRL_B, ctrlb);
509 rtc->write(rtc, RTC_SECS_ALARM, seconds);
510 rtc->write(rtc, RTC_MINS_ALARM, minutes);
511 rtc->write(rtc, RTC_HRS_ALARM, hours);
512 rtc->write(rtc, RTC_MDAY_ALARM, mday);
516 ctrlb = rtc->read(rtc, RTC_CTRL_B);
518 rtc->write(rtc, RTC_CTRL_B, ctrlb);
522 ds1685_rtc_end_data_access(rtc);
540 struct ds1685_priv *rtc = dev_get_drvdata(dev);
544 rtc->write(rtc, RTC_CTRL_B, (rtc->read(rtc, RTC_CTRL_B) |
547 rtc->write(rtc, RTC_CTRL_B, (rtc->read(rtc, RTC_CTRL_B) &
551 rtc->read(rtc, RTC_CTRL_C);
563 * @rtc: pointer to the ds1685 rtc structure.
567 ds1685_rtc_extended_irq(struct ds1685_priv *rtc, struct platform_device *pdev)
571 ds1685_rtc_switch_to_bank1(rtc);
572 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
573 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
582 rtc->write(rtc, RTC_EXT_CTRL_4B,
583 (rtc->read(rtc, RTC_EXT_CTRL_4B) &
587 rtc->write(rtc, RTC_EXT_CTRL_4A,
597 rtc->write(rtc, RTC_EXT_CTRL_4B,
598 (rtc->read(rtc, RTC_EXT_CTRL_4B) |
602 if (rtc->prepare_poweroff != NULL)
603 rtc->prepare_poweroff();
615 rtc->write(rtc, RTC_EXT_CTRL_4A,
619 if (rtc->wake_alarm != NULL)
620 rtc->wake_alarm();
637 rtc->write(rtc, RTC_EXT_CTRL_4A,
642 if (rtc->post_ram_clear != NULL)
643 rtc->post_ram_clear();
648 ds1685_rtc_switch_to_bank0(rtc);
660 struct ds1685_priv *rtc = platform_get_drvdata(pdev);
666 if (unlikely(!rtc))
669 rtc_lock(rtc->dev);
672 ctrlb = rtc->read(rtc, RTC_CTRL_B);
673 ctrlc = rtc->read(rtc, RTC_CTRL_C);
710 ds1685_rtc_extended_irq(rtc, pdev);
713 rtc_update_irq(rtc->dev, num_irqs, events);
714 rtc_unlock(rtc->dev);
754 struct ds1685_priv *rtc = dev_get_drvdata(dev);
759 ds1685_rtc_switch_to_bank1(rtc);
760 ds1685_rtc_get_ssn(rtc, ssn);
761 ctrla = rtc->read(rtc, RTC_CTRL_A);
762 ctrlb = rtc->read(rtc, RTC_CTRL_B);
763 ctrld = rtc->read(rtc, RTC_CTRL_D);
764 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
765 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
766 ds1685_rtc_switch_to_bank0(rtc);
843 struct ds1685_priv *rtc = priv;
844 struct mutex *rtc_mutex = &rtc->dev->ops_lock;
853 ds1685_rtc_switch_to_bank0(rtc);
859 *buf++ = rtc->read(rtc, (NVRAM_TIME_BASE + pos++));
861 *buf++ = rtc->read(rtc, (NVRAM_BANK0_BASE + pos++));
866 ds1685_rtc_switch_to_bank1(rtc);
870 rtc->write(rtc, RTC_EXT_CTRL_4A,
871 (rtc->read(rtc, RTC_EXT_CTRL_4A) |
876 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB,
886 rtc->write(rtc, RTC_BANK1_RAM_ADDR,
889 *buf++ = rtc->read(rtc, RTC_BANK1_RAM_DATA_PORT);
895 rtc->write(rtc, RTC_EXT_CTRL_4A,
896 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
899 ds1685_rtc_switch_to_bank0(rtc);
910 struct ds1685_priv *rtc = priv;
911 struct mutex *rtc_mutex = &rtc->dev->ops_lock;
920 ds1685_rtc_switch_to_bank0(rtc);
926 rtc->write(rtc, (NVRAM_TIME_BASE + pos++),
929 rtc->write(rtc, (NVRAM_BANK0_BASE), *buf++);
933 ds1685_rtc_switch_to_bank1(rtc);
937 rtc->write(rtc, RTC_EXT_CTRL_4A,
938 (rtc->read(rtc, RTC_EXT_CTRL_4A) |
943 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB,
953 rtc->write(rtc, RTC_BANK1_RAM_ADDR,
956 rtc->write(rtc, RTC_BANK1_RAM_DATA_PORT, *buf++);
962 rtc->write(rtc, RTC_EXT_CTRL_4A,
963 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
966 ds1685_rtc_switch_to_bank0(rtc);
987 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
990 ctrld = rtc->read(rtc, RTC_CTRL_D);
1007 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
1010 ds1685_rtc_switch_to_bank1(rtc);
1011 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
1012 ds1685_rtc_switch_to_bank0(rtc);
1029 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
1032 ds1685_rtc_switch_to_bank1(rtc);
1033 ds1685_rtc_get_ssn(rtc, ssn);
1034 ds1685_rtc_switch_to_bank0(rtc);
1064 * ds1685_rtc_probe - initializes rtc driver.
1071 struct ds1685_priv *rtc;
1088 /* Allocate memory for the rtc device. */
1089 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
1090 if (!rtc)
1096 rtc->regs = devm_platform_ioremap_resource(pdev, 0);
1097 if (IS_ERR(rtc->regs))
1098 return PTR_ERR(rtc->regs);
1099 rtc->read = ds1685_read;
1100 rtc->write = ds1685_write;
1103 rtc->regs = devm_platform_ioremap_resource(pdev, 0);
1104 if (IS_ERR(rtc->regs))
1105 return PTR_ERR(rtc->regs);
1106 rtc->data = devm_platform_ioremap_resource(pdev, 1);
1107 if (IS_ERR(rtc->data))
1108 return PTR_ERR(rtc->data);
1109 rtc->read = ds1685_indirect_read;
1110 rtc->write = ds1685_indirect_write;
1114 if (!rtc->read || !rtc->write)
1119 rtc->regstep = pdata->regstep;
1121 rtc->regstep = 1;
1125 rtc->prepare_poweroff = pdata->plat_prepare_poweroff;
1129 rtc->wake_alarm = pdata->plat_wake_alarm;
1133 rtc->post_ram_clear = pdata->plat_post_ram_clear;
1136 platform_set_drvdata(pdev, rtc);
1139 ctrla = rtc->read(rtc, RTC_CTRL_A);
1154 rtc->write(rtc, RTC_CTRL_A, ctrla);
1157 rtc->write(rtc, RTC_EXT_CTRL_4B,
1158 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_E32K));
1161 rtc->write(rtc, RTC_CTRL_B,
1162 (rtc->read(rtc, RTC_CTRL_B) | RTC_CTRL_B_SET));
1165 while (rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_INCR)
1172 ctrlb = rtc->read(rtc, RTC_CTRL_B);
1177 rtc->bcd_mode = pdata->bcd_mode;
1190 hours = rtc->read(rtc, RTC_HRS);
1192 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK,
1200 rtc->write(rtc, RTC_CTRL_B, ctrlb);
1203 rtc->write(rtc, RTC_HRS,
1204 ds1685_rtc_bin2bcd(rtc, hours,
1209 hours = rtc->read(rtc, RTC_HRS_ALARM);
1211 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK,
1216 rtc->write(rtc, RTC_HRS_ALARM,
1217 ds1685_rtc_bin2bcd(rtc, hours,
1222 rtc->write(rtc, RTC_CTRL_B, ctrlb);
1226 rtc->write(rtc, RTC_CTRL_B,
1227 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_SET)));
1230 if (!(rtc->read(rtc, RTC_CTRL_D) & RTC_CTRL_D_VRT))
1235 if (!(rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_VRT2))
1240 rtc->write(rtc, RTC_CTRL_B,
1241 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_PAU_MASK)));
1244 rtc->read(rtc, RTC_CTRL_C);
1247 rtc->write(rtc, RTC_EXT_CTRL_4B,
1248 (rtc->read(rtc, RTC_EXT_CTRL_4B) & ~(RTC_CTRL_4B_RWK_MASK)));
1251 rtc->write(rtc, RTC_EXT_CTRL_4A,
1252 (rtc->read(rtc, RTC_EXT_CTRL_4A) & ~(RTC_CTRL_4A_RWK_MASK)));
1258 rtc->write(rtc, RTC_EXT_CTRL_4B,
1259 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_KSE));
1278 rtc->dev = rtc_dev;
1288 rtc->irq_num = platform_get_irq(pdev, 0);
1289 if (rtc->irq_num <= 0) {
1293 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_num,
1302 rtc->irq_num = 0;
1307 ds1685_rtc_switch_to_bank0(rtc);
1313 nvmem_cfg.priv = rtc;
1322 * ds1685_rtc_remove - removes rtc driver.
1328 struct ds1685_priv *rtc = platform_get_drvdata(pdev);
1331 rtc->write(rtc, RTC_CTRL_B,
1332 (rtc->read(rtc, RTC_CTRL_B) &
1336 rtc->read(rtc, RTC_CTRL_C);
1339 rtc->write(rtc, RTC_EXT_CTRL_4B,
1340 (rtc->read(rtc, RTC_EXT_CTRL_4B) &
1344 rtc->write(rtc, RTC_EXT_CTRL_4A,
1345 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
1350 * ds1685_rtc_driver - rtc driver properties.
1354 .name = "rtc-ds1685",
1374 struct ds1685_priv *rtc;
1382 /* Get the rtc data. */
1383 rtc = platform_get_drvdata(pdev);
1391 if (rtc->irq_num)
1392 disable_irq_nosync(rtc->irq_num);
1395 ctrla = rtc->read(rtc, RTC_CTRL_A);
1398 rtc->write(rtc, RTC_CTRL_A, ctrla);
1405 ds1685_rtc_switch_to_bank1(rtc);
1406 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
1410 rtc->write(rtc, RTC_EXT_CTRL_4A, ctrl4a);
1418 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
1421 rtc->write(rtc, RTC_EXT_CTRL_4B, ctrl4b);
1427 rtc->write(rtc, RTC_EXT_CTRL_4A,
1443 MODULE_ALIAS("platform:rtc-ds1685");