Lines Matching defs: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);
667 if (unlikely(!rtc))
670 rtc_mutex = &rtc->dev->ops_lock;
674 ctrlb = rtc->read(rtc, RTC_CTRL_B);
675 ctrlc = rtc->read(rtc, RTC_CTRL_C);
712 ds1685_rtc_extended_irq(rtc, pdev);
715 rtc_update_irq(rtc->dev, num_irqs, events);
756 struct ds1685_priv *rtc = dev_get_drvdata(dev);
761 ds1685_rtc_switch_to_bank1(rtc);
762 ds1685_rtc_get_ssn(rtc, ssn);
763 ctrla = rtc->read(rtc, RTC_CTRL_A);
764 ctrlb = rtc->read(rtc, RTC_CTRL_B);
765 ctrld = rtc->read(rtc, RTC_CTRL_D);
766 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
767 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
768 ds1685_rtc_switch_to_bank0(rtc);
845 struct ds1685_priv *rtc = priv;
846 struct mutex *rtc_mutex = &rtc->dev->ops_lock;
855 ds1685_rtc_switch_to_bank0(rtc);
861 *buf++ = rtc->read(rtc, (NVRAM_TIME_BASE + pos++));
863 *buf++ = rtc->read(rtc, (NVRAM_BANK0_BASE + pos++));
868 ds1685_rtc_switch_to_bank1(rtc);
872 rtc->write(rtc, RTC_EXT_CTRL_4A,
873 (rtc->read(rtc, RTC_EXT_CTRL_4A) |
878 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB,
888 rtc->write(rtc, RTC_BANK1_RAM_ADDR,
891 *buf++ = rtc->read(rtc, RTC_BANK1_RAM_DATA_PORT);
897 rtc->write(rtc, RTC_EXT_CTRL_4A,
898 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
901 ds1685_rtc_switch_to_bank0(rtc);
912 struct ds1685_priv *rtc = priv;
913 struct mutex *rtc_mutex = &rtc->dev->ops_lock;
922 ds1685_rtc_switch_to_bank0(rtc);
928 rtc->write(rtc, (NVRAM_TIME_BASE + pos++),
931 rtc->write(rtc, (NVRAM_BANK0_BASE), *buf++);
935 ds1685_rtc_switch_to_bank1(rtc);
939 rtc->write(rtc, RTC_EXT_CTRL_4A,
940 (rtc->read(rtc, RTC_EXT_CTRL_4A) |
945 rtc->write(rtc, RTC_BANK1_RAM_ADDR_LSB,
955 rtc->write(rtc, RTC_BANK1_RAM_ADDR,
958 rtc->write(rtc, RTC_BANK1_RAM_DATA_PORT, *buf++);
964 rtc->write(rtc, RTC_EXT_CTRL_4A,
965 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
968 ds1685_rtc_switch_to_bank0(rtc);
989 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
992 ctrld = rtc->read(rtc, RTC_CTRL_D);
1009 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
1012 ds1685_rtc_switch_to_bank1(rtc);
1013 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
1014 ds1685_rtc_switch_to_bank0(rtc);
1031 struct ds1685_priv *rtc = dev_get_drvdata(dev->parent);
1034 ds1685_rtc_switch_to_bank1(rtc);
1035 ds1685_rtc_get_ssn(rtc, ssn);
1036 ds1685_rtc_switch_to_bank0(rtc);
1066 * ds1685_rtc_probe - initializes rtc driver.
1073 struct ds1685_priv *rtc;
1090 /* Allocate memory for the rtc device. */
1091 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL);
1092 if (!rtc)
1098 rtc->regs = devm_platform_ioremap_resource(pdev, 0);
1099 if (IS_ERR(rtc->regs))
1100 return PTR_ERR(rtc->regs);
1101 rtc->read = ds1685_read;
1102 rtc->write = ds1685_write;
1105 rtc->regs = devm_platform_ioremap_resource(pdev, 0);
1106 if (IS_ERR(rtc->regs))
1107 return PTR_ERR(rtc->regs);
1108 rtc->data = devm_platform_ioremap_resource(pdev, 1);
1109 if (IS_ERR(rtc->data))
1110 return PTR_ERR(rtc->data);
1111 rtc->read = ds1685_indirect_read;
1112 rtc->write = ds1685_indirect_write;
1116 if (!rtc->read || !rtc->write)
1121 rtc->regstep = pdata->regstep;
1123 rtc->regstep = 1;
1127 rtc->prepare_poweroff = pdata->plat_prepare_poweroff;
1131 rtc->wake_alarm = pdata->plat_wake_alarm;
1135 rtc->post_ram_clear = pdata->plat_post_ram_clear;
1138 platform_set_drvdata(pdev, rtc);
1141 ctrla = rtc->read(rtc, RTC_CTRL_A);
1156 rtc->write(rtc, RTC_CTRL_A, ctrla);
1159 rtc->write(rtc, RTC_EXT_CTRL_4B,
1160 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_E32K));
1163 rtc->write(rtc, RTC_CTRL_B,
1164 (rtc->read(rtc, RTC_CTRL_B) | RTC_CTRL_B_SET));
1167 while (rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_INCR)
1174 ctrlb = rtc->read(rtc, RTC_CTRL_B);
1179 rtc->bcd_mode = pdata->bcd_mode;
1192 hours = rtc->read(rtc, RTC_HRS);
1194 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK,
1202 rtc->write(rtc, RTC_CTRL_B, ctrlb);
1205 rtc->write(rtc, RTC_HRS,
1206 ds1685_rtc_bin2bcd(rtc, hours,
1211 hours = rtc->read(rtc, RTC_HRS_ALARM);
1213 hours = ds1685_rtc_bcd2bin(rtc, hours, RTC_HRS_12_BCD_MASK,
1218 rtc->write(rtc, RTC_HRS_ALARM,
1219 ds1685_rtc_bin2bcd(rtc, hours,
1224 rtc->write(rtc, RTC_CTRL_B, ctrlb);
1228 rtc->write(rtc, RTC_CTRL_B,
1229 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_SET)));
1232 if (!(rtc->read(rtc, RTC_CTRL_D) & RTC_CTRL_D_VRT))
1237 if (!(rtc->read(rtc, RTC_EXT_CTRL_4A) & RTC_CTRL_4A_VRT2))
1242 rtc->write(rtc, RTC_CTRL_B,
1243 (rtc->read(rtc, RTC_CTRL_B) & ~(RTC_CTRL_B_PAU_MASK)));
1246 rtc->read(rtc, RTC_CTRL_C);
1249 rtc->write(rtc, RTC_EXT_CTRL_4B,
1250 (rtc->read(rtc, RTC_EXT_CTRL_4B) & ~(RTC_CTRL_4B_RWK_MASK)));
1253 rtc->write(rtc, RTC_EXT_CTRL_4A,
1254 (rtc->read(rtc, RTC_EXT_CTRL_4A) & ~(RTC_CTRL_4A_RWK_MASK)));
1260 rtc->write(rtc, RTC_EXT_CTRL_4B,
1261 (rtc->read(rtc, RTC_EXT_CTRL_4B) | RTC_CTRL_4B_KSE));
1280 rtc->dev = rtc_dev;
1295 rtc->irq_num = ret;
1298 ret = devm_request_threaded_irq(&pdev->dev, rtc->irq_num,
1307 rtc->irq_num = 0;
1310 rtc->no_irq = pdata->no_irq;
1313 ds1685_rtc_switch_to_bank0(rtc);
1320 nvmem_cfg.priv = rtc;
1329 * ds1685_rtc_remove - removes rtc driver.
1335 struct ds1685_priv *rtc = platform_get_drvdata(pdev);
1338 rtc->write(rtc, RTC_CTRL_B,
1339 (rtc->read(rtc, RTC_CTRL_B) &
1343 rtc->read(rtc, RTC_CTRL_C);
1346 rtc->write(rtc, RTC_EXT_CTRL_4B,
1347 (rtc->read(rtc, RTC_EXT_CTRL_4B) &
1351 rtc->write(rtc, RTC_EXT_CTRL_4A,
1352 (rtc->read(rtc, RTC_EXT_CTRL_4A) &
1359 * ds1685_rtc_driver - rtc driver properties.
1363 .name = "rtc-ds1685",
1383 struct ds1685_priv *rtc;
1391 /* Get the rtc data. */
1392 rtc = platform_get_drvdata(pdev);
1400 if (!rtc->no_irq)
1401 disable_irq_nosync(rtc->irq_num);
1404 ctrla = rtc->read(rtc, RTC_CTRL_A);
1407 rtc->write(rtc, RTC_CTRL_A, ctrla);
1414 ds1685_rtc_switch_to_bank1(rtc);
1415 ctrl4a = rtc->read(rtc, RTC_EXT_CTRL_4A);
1419 rtc->write(rtc, RTC_EXT_CTRL_4A, ctrl4a);
1427 ctrl4b = rtc->read(rtc, RTC_EXT_CTRL_4B);
1430 rtc->write(rtc, RTC_EXT_CTRL_4B, ctrl4b);
1436 rtc->write(rtc, RTC_EXT_CTRL_4A,
1452 MODULE_ALIAS("platform:rtc-ds1685");