linux/drivers/rtc
Thomas Gleixner 69eca258c8 ntp: Make the RTC sync offset less obscure
The current RTC set_offset_nsec value is not really intuitive to
understand. 

  tsched       twrite(t2.tv_sec - 1) 	 t2 (seconds increment)

The offset is calculated from twrite based on the assumption that t2 -
twrite == 1s. That means for the MC146818 RTC the offset needs to be
negative so that the write happens 500ms before t2.

It's easier to understand when the whole calculation is based on t2. That
avoids negative offsets and the meaning is obvious:

 t2 - twrite:     The time defined by the chip when seconds increment
      		  after the write.

 twrite - tsched: The time for the transport to the point where the chip
 	  	  is updated. 

==> set_offset_nsec =  t2 - tsched
    ttransport      =  twrite - tsched
    tRTCinc         =  t2 - twrite
==> set_offset_nsec =  ttransport + tRTCinc

tRTCinc is a chip property and can be obtained from the data sheet.

ttransport depends on how the RTC is connected. It is close to 0 for
directly accessible RTCs. For RTCs behind a slow bus, e.g. i2c, it's the
time required to send the update over the bus. This can be estimated or
even calibrated, but that's a different problem.

Adjust the implementation and update comments accordingly.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20201206220542.263204937@linutronix.de
2020-12-11 10:40:53 +01:00
..
Kconfig rtc: rv3032: Add a driver for Microcrystal RV-3032 2020-10-19 22:47:56 +02:00
Makefile ntp, rtc: Move rtc_set_ntp_time() to ntp code 2020-12-11 10:40:52 +01:00
class.c ntp: Make the RTC sync offset less obscure 2020-12-11 10:40:53 +01:00
dev.c compat_ioctl: move rtc handling into drivers/rtc/dev.c 2019-10-23 17:23:43 +02:00
interface.c rtc: interface: fix kerneldoc comments 2019-11-27 09:31:08 +01:00
lib.c rtc: lib: check whether tm->tm_year in int32 range 2019-04-06 15:05:31 +02:00
nvmem.c rtc: core: correct trivial checkpatch warnings 2019-04-04 10:07:08 +02:00
proc.c rtc: core: correct trivial checkpatch warnings 2019-04-04 10:07:08 +02:00
rtc-88pm80x.c rtc: remove superfluous error message 2019-08-21 09:57:23 +02:00
rtc-88pm860x.c rtc: 88pm860x: remove useless range check 2020-04-18 22:42:06 +02:00
rtc-ab-b5ze-s3.c rtc: Replace HTTP links with HTTPS ones 2020-07-16 11:17:52 +02:00
rtc-ab-eoz9.c rtc: remove superfluous error message 2019-08-21 09:57:23 +02:00
rtc-ab3100.c rtc: ab3100: convert to SPDX identifier 2019-04-11 16:42:55 +02:00
rtc-ab8500.c rtc: ab8500: switch to rtc_time64_to_tm/rtc_tm_to_time64 2020-03-16 11:12:11 +01:00
rtc-abx80x.c rtc: abx80x: Provide debug feedback for invalid dt properties 2020-06-06 00:16:24 +02:00
rtc-ac100.c rtc: remove superfluous error message 2019-08-21 09:57:23 +02:00
rtc-armada38x.c rtc: armada38x: Use of_device_get_match_data() 2019-10-07 15:49:20 +02:00
rtc-as3722.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
rtc-asm9260.c rtc: asm9260: add the missed check for devm_clk_get 2019-12-23 11:16:23 +01:00
rtc-aspeed.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-at91rm9200.c rtc: at91rm9200: use FIELD_PREP/FIELD_GET 2020-01-15 15:11:10 +01:00
rtc-at91sam9.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-au1xxx.c rtc: au1xxx: switch to rtc_time64_to_tm/rtc_tm_to_time64 2020-03-16 11:12:09 +01:00
rtc-bd70528.c rtc: bd70528: Avoid double error messaging when IRQ absent 2020-03-23 09:27:17 +01:00
rtc-bq32k.c rtc: Replace HTTP links with HTTPS ones 2020-07-16 11:17:52 +02:00
rtc-bq4802.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
rtc-brcmstb-waketimer.c rtc: brcmstb-waketimer: add missed clk_disable_unprepare 2019-11-08 16:14:09 +01:00
rtc-cadence.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-cmos.c ntp: Make the RTC sync offset less obscure 2020-12-11 10:40:53 +01:00
rtc-coh901331.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-core.h rtc: move rtc_add_group/s definitions 2018-09-28 14:20:59 +02:00
rtc-cpcap.c rtc: cpcap: fix range 2020-07-02 22:32:00 +02:00
rtc-cros-ec.c cros_ec: treewide: Remove 'include/linux/mfd/cros_ec.h' 2020-01-07 17:36:46 +01:00
rtc-da9052.c rtc: da9052: switch to rtc_time64_to_tm/rtc_tm_to_time64 2020-04-01 12:33:43 +02:00
rtc-da9055.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-da9063.c rtc: da9063: Handle invalid IRQ from platform_get_irq_byname() 2019-10-07 15:49:18 +02:00
rtc-davinci.c rtc: davinci: remove useless error handling 2020-03-16 11:12:09 +01:00
rtc-digicolor.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-dm355evm.c rtc: dm355evm: convert to SPDX identifier 2019-04-04 10:07:09 +02:00
rtc-ds1216.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-ds1286.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-ds1302.c rtc: ds1302: Remove unused DRV_NAME 2019-11-15 11:58:14 +01:00
rtc-ds1305.c rtc: ds1305: switch to rtc_tm_to_time64 2020-03-16 11:12:10 +01:00
rtc-ds1307.c rtc: ds1307: enable rx8130's backup battery, make it chargeable optionally 2020-09-24 09:56:04 +02:00
rtc-ds1343.c rtc: ds1343: Remove unused struct spi_device in struct ds1343_priv 2019-12-23 11:22:32 +01:00
rtc-ds1347.c rtc: ds1347: handle century register 2019-10-07 15:49:38 +02:00
rtc-ds1374.c rtc: ds1374: remove unused define 2020-07-21 09:56:46 +02:00
rtc-ds1390.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-ds1511.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-ds1553.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-ds1672.c rtc: ds1672: remove unnecessary check 2019-08-21 09:57:23 +02:00
rtc-ds1685.c rtc: ds1685: Fix bank switching to avoid endless loop 2020-09-15 11:24:29 +02:00
rtc-ds1742.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-ds2404.c rtc: ds2404: use hw endiannes variable 2019-05-23 17:42:25 +02:00
rtc-ds3232.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-efi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-em3027.c rtc: em3027: correct month value 2019-11-08 16:14:09 +01:00
rtc-ep93xx.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-fm3130.c RTC for 5.3 2019-07-17 10:03:50 -07:00
rtc-fsl-ftm-alarm.c rtc: fsl-ftm-alarm: update acpi device id 2020-08-21 00:20:38 +02:00
rtc-ftrtc010.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
rtc-generic.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
rtc-goldfish.c rtc: goldfish: Enable interrupt in set_alarm() when necessary 2020-07-16 11:15:43 +02:00
rtc-hid-sensor-time.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 335 2019-06-05 17:37:06 +02:00
rtc-hym8563.c rtc: hym8563: Read the valid flag directly instead of caching it 2019-12-23 11:18:06 +01:00
rtc-imx-sc.c rtc: imx-sc: Align imx sc msg structs to 4 2020-03-29 22:08:35 +02:00
rtc-imxdi.c rtc: imxdi: fix trivial typos 2020-07-02 22:32:01 +02:00
rtc-isl1208.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-isl12022.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-isl12026.c rtc: isl12026: convert to i2c_new_dummy_device 2019-07-22 22:30:19 +02:00
rtc-jz4740.c rtc: ingenic: Reset regulator register in probe 2020-05-11 16:35:05 +02:00
rtc-lp8788.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-lpc24xx.c rtc: remove unnecessary error message after platform_get_irq 2020-04-15 09:56:17 +02:00
rtc-lpc32xx.c rtc: lpc32xx: remove .remove 2019-11-08 16:14:09 +01:00
rtc-ls1x.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-m41t80.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
rtc-m41t93.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-m41t94.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-m48t35.c rtc: m48t35: remove SGI-IP27 kludge 2020-03-16 11:12:11 +01:00
rtc-m48t59.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-m48t86.c rtc: Use devm_platform_ioremap_resource() 2019-10-06 21:04:51 +02:00
rtc-max6900.c rtc: max6900: remove useless indirection 2018-03-17 14:20:46 +01:00
rtc-max6902.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-max6916.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-max8907.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-max8925.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-max8997.c rtc: max8997: Fix the returned value in case of error in 'max8997_rtc_read_alarm()' 2018-11-22 18:11:35 +01:00
rtc-max8998.c rtc: maxim: Add SPDX license identifiers 2018-08-14 23:38:45 +02:00
rtc-max77686.c rtc: max77686: Fix wake-ups for max77620 2020-08-07 23:29:47 +02:00
rtc-mc13xxx.c rtc: mc13xxx: fix a double-unlock issue 2020-05-11 16:21:50 +02:00
rtc-mc146818-lib.c rtc: mc146818: Reduce spinlock section in mc146818_set_time() 2020-12-11 10:40:52 +01:00
rtc-mcp795.c rtc: Replace HTTP links with HTTPS ones 2020-07-16 11:17:52 +02:00
rtc-meson-vrtc.c rtc: meson: simplify the return expression of meson_vrtc_probe 2020-09-29 22:19:15 +02:00
rtc-meson.c rtc: meson: remove redundant assignment to variable retries 2019-11-27 09:31:13 +01:00
rtc-moxart.c rtc: moxart: Convert to SPDX identifier 2019-12-23 11:23:49 +01:00
rtc-mpc5121.c rtc: mpc5121: Use correct return value for mpc5121_rtc_probe() 2020-05-30 04:12:38 +02:00
rtc-mrst.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
rtc-msm6242.c rtc: msm6242: Remove unneeded msm6242_set()/msm6242_clear() functions 2019-11-18 15:23:54 +01:00
rtc-mt2712.c rtc: mt2712: switch to devm_platform_ioremap_resource 2020-04-18 22:42:04 +02:00
rtc-mt6397.c rtc: mt6397: Remove unused member dev 2020-10-15 12:01:29 +02:00
rtc-mt7622.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-mv.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-mxc.c rtc: mxc: Use devm_add_action_or_reset() for calls to clk_disable_unprepare() 2020-03-22 22:10:41 +01:00
rtc-mxc_v2.c rtc: mxc_v2: use devm_platform_ioremap_resource() to simplify code 2019-07-22 22:16:12 +02:00
rtc-omap.c rtc: omap: drop unused dt-bindings header 2020-03-23 09:27:17 +01:00
rtc-opal.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 114 2019-05-24 17:39:01 +02:00
rtc-palmas.c rtc: constify rtc_class_ops structures 2016-09-02 01:24:06 +02:00
rtc-pcap.c rtc: pcap: convert to SPDX identifier 2019-05-08 22:14:36 +02:00
rtc-pcf2123.c rtc: pcf2123: add proper compatible string 2019-08-20 21:42:19 +02:00
rtc-pcf2127.c rtc: pcf2127: fix a bug when not specify interrupts property 2020-09-15 12:25:44 +02:00
rtc-pcf8523.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
rtc-pcf8563.c rtc: pcf8563: Use BIT 2019-12-23 11:23:53 +01:00
rtc-pcf8583.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-pcf50633.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-pcf85063.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
rtc-pcf85363.c rtc: pcf85363/pcf85263: fix regmap error in set_time 2019-09-01 08:48:28 +02:00
rtc-pic32.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-pl030.c rtc: pl030: switch to rtc_time64_to_tm/rtc_tm_to_time64 2020-03-16 11:12:09 +01:00
rtc-pl031.c rtc: pl031: fix set_alarm by adding back call to alarm_irq_enable 2020-07-16 11:27:03 +02:00
rtc-pm8xxx.c rtc: pm8xxx: clear alarm register when alarm is not enabled 2020-03-23 09:27:17 +01:00
rtc-ps3.c rtc: ps3: set range 2019-04-04 10:07:10 +02:00
rtc-pxa.c rtc: Remove dev_err() usage after platform_get_irq() 2019-08-13 10:53:10 +02:00
rtc-r7301.c rtc: Use devm_platform_ioremap_resource() 2019-10-06 21:04:51 +02:00
rtc-r9701.c rtc: r9701: set range 2020-10-19 22:48:55 +02:00
rtc-rc5t583.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
rtc-rc5t619.c rtc: rc5t619: Fix an ERR_PTR vs NULL check 2020-04-15 09:58:24 +02:00
rtc-rk808.c rtc: Remove dev_err() usage after platform_get_irq() 2019-08-13 10:53:10 +02:00
rtc-rp5c01.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
rtc-rs5c313.c rtc: rtc-rs5c313: Convert to module_platform_driver() 2020-08-21 00:13:44 +02:00
rtc-rs5c348.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-rs5c372.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-rtd119x.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-rv3028.c rtc: rv3028: ensure ram configuration registers are saved 2020-10-15 12:09:35 +02:00
rtc-rv3029c2.c rtc: rv3029: remove useless error messages 2019-12-23 11:16:23 +01:00
rtc-rv3032.c rtc: rv3032: Add a driver for Microcrystal RV-3032 2020-10-19 22:47:56 +02:00
rtc-rv8803.c rtc: rv8803: simplify the return expression of rv8803_nvram_write 2020-09-29 22:20:10 +02:00
rtc-rx4581.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-rx6110.c rtc: rx6110: Convert to SPDX identifier 2019-11-15 11:58:12 +01:00
rtc-rx8010.c rtc: rx8010: rename rx8010_init_client() to rx8010_init() 2020-09-29 22:18:10 +02:00
rtc-rx8025.c rtc: rx8025: Remove struct i2c_client from struct rx8025_data 2019-12-23 11:22:21 +01:00
rtc-rx8581.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-s3c.c rtc: s3c: Simplify with dev_err_probe() 2020-09-15 10:42:36 +02:00
rtc-s3c.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-s5m.c rtc: s5m: convert to i2c_new_dummy_device 2019-07-23 20:34:31 +02:00
rtc-s35390a.c rtc: s35390a: set range 2019-10-19 22:33:05 +02:00
rtc-sa1100.c rtc: sa1100: switch to rtc_time64_to_tm/rtc_tm_to_time64 2020-03-16 11:12:09 +01:00
rtc-sa1100.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
rtc-sc27xx.c rtc: sc27xx: remove .remove 2019-11-08 16:14:09 +01:00
rtc-sd3078.c rtc: remove superfluous error message 2019-08-21 09:57:23 +02:00
rtc-sh.c rtc: sh: Restore devm_ioremap() alignment 2020-02-12 12:21:40 +01:00
rtc-sirfsoc.c rtc: sirfsoc: switch to rtc_time64_to_tm/rtc_tm_to_time64 2020-03-16 11:12:09 +01:00
rtc-snvs.c rtc: snvs: Add necessary clock operations for RTC APIs 2020-05-30 03:17:48 +02:00
rtc-spear.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-st-lpc.c rtc: st-lpc: Constify st_rtc_ops 2020-09-15 11:21:50 +02:00
rtc-starfire.c rtc: starfire: switch to rtc_time64_to_tm 2020-03-16 11:12:09 +01:00
rtc-stk17ta8.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-stm32.c rtc: stm32: add missed clk_disable_unprepare in error path of resume 2019-12-10 14:29:23 +01:00
rtc-stmp3xxx.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
rtc-sun4v.c rtc: sun4v: switch to SPDX identifier 2019-04-04 10:07:10 +02:00
rtc-sun6i.c rtc: sun6i: let the core handle rtc range 2020-04-02 18:47:29 +02:00
rtc-sunxi.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-tegra.c rtc: tegra: remove set but unused variable 2019-11-27 09:31:13 +01:00
rtc-test.c rtc: test: enable wakeup flags 2019-05-23 17:44:52 +02:00
rtc-tps6586x.c rtc: tps6586x: Use IRQ_NOAUTOEN flag 2020-01-25 21:50:18 +01:00
rtc-tps65910.c rtc: tps65910: allow using RTC without alarm interrupt 2019-11-17 22:24:33 +01:00
rtc-tps80031.c
rtc-twl.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-tx4939.c rtc: use devm_platform_ioremap_resource() to simplify code 2019-10-07 01:07:35 +02:00
rtc-v3020.c rtc: v3020: remove set but unused variable 2019-11-27 09:31:13 +01:00
rtc-vr41xx.c compat_ioctl: move rtc handling into drivers/rtc/dev.c 2019-10-23 17:23:43 +02:00
rtc-vt8500.c rtc: vt8500: let the core handle rtc range 2019-10-19 22:33:15 +02:00
rtc-wilco-ec.c rtc: wilco-ec: Handle reading invalid times 2019-10-14 17:49:17 +02:00
rtc-wm831x.c rtc: wm831x: Add IRQF_ONESHOT flag 2019-07-13 21:39:51 +02:00
rtc-wm8350.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtc-x1205.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
rtc-xgene.c rtc: xgene: Remove unused struct device in struct xgene_rtc_dev 2019-11-27 09:31:14 +01:00
rtc-zynqmp.c rtc: zynqmp: Clear alarm interrupt status before interrupt enable 2020-02-12 12:21:42 +01:00
sysfs.c rtc: sysfs: use kobj_to_dev 2020-03-16 11:12:08 +01:00