linux-bl808/drivers/rtc
John Stultz 3dcad5ff08 rtc: Avoid accumulating time drift in suspend/resume
Because the RTC interface is only a second granular interface,
each time we read from the RTC for suspend/resume, we introduce a
half second (on average) of error.

In order to avoid this error accumulating as the system is suspended
over and over, this patch measures the time delta between the RTC
and the system CLOCK_REALTIME.

If the delta is less then 2 seconds from the last suspend, we compensate
by using the previous time delta (keeping it close). If it is larger
then 2 seconds, we assume the clock was set or has been changed, so we
do no correction and update the delta.

Note: If NTP is running, ths could seem to "fight" with the NTP corrected
time, where as if the system time was off by 1 second, and NTP slewed the
value in, a suspend/resume cycle could undo this correction, by trying to
restore the previous offset from the RTC. However, without this patch,
since each read could cause almost a full second worth of error, its
possible to get almost 2 seconds of error just from the suspend/resume
cycle alone, so this about equal to any offset added by the compensation.

Further on systems that suspend/resume frequently, this should keep time
closer then NTP could compensate for if the errors were allowed to
accumulate.

Credits to Arve Hjønnevåg for suggesting this solution.

This patch also improves some of the variable names and adds more clear
comments.

CC: Arve Hjønnevåg <arve@android.com>
CC: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: John Stultz <john.stultz@linaro.org>
2011-06-21 16:55:39 -07:00
..
class.c rtc: Avoid accumulating time drift in suspend/resume 2011-06-21 16:55:39 -07:00
hctosys.c
interface.c rtc: Staticize non-exported __rtc_set_alarm() 2011-06-01 19:29:40 -07:00
Kconfig unicore32: move rtc-puv3.c to drivers/rtc directory 2011-06-09 16:15:24 +08:00
Makefile unicore32: move rtc-puv3.c to drivers/rtc directory 2011-06-09 16:15:24 +08:00
rtc-88pm860x.c mfd: Add rtc support to 88pm860x 2011-05-26 19:45:34 +02:00
rtc-ab3100.c
rtc-ab8500.c
rtc-at32ap700x.c
rtc-at91rm9200.c Fix common misspellings 2011-03-31 11:26:23 -03:00
rtc-at91sam9.c
rtc-au1xxx.c
rtc-bfin.c Merge branch 'fortglx/39/tip/timers/rtc' of git://git.linaro.org/people/jstultz/linux into timers/urgent 2011-04-13 01:54:09 +02:00
rtc-bq32k.c
rtc-bq4802.c
rtc-cmos.c
rtc-coh901331.c rtc: fix coh901331 startup crash 2011-04-20 18:46:56 +02:00
rtc-core.h
rtc-davinci.c rtc: davinci: Initialize drvdata before registering device 2011-05-06 17:41:06 -07:00
rtc-dev.c rtc: Fix ioctl error path return 2011-06-01 19:29:39 -07:00
rtc-dm355evm.c
rtc-ds1216.c
rtc-ds1286.c rtc: ds1286: Initialize drvdata before registering device 2011-05-06 17:42:47 -07:00
rtc-ds1302.c
rtc-ds1305.c
rtc-ds1307.c
rtc-ds1374.c rtc: convert DS1374 to dev_pm_ops 2011-03-22 17:44:16 -07:00
rtc-ds1390.c spi/rtc-{ds1390,ds3234,m41t94}: Use spi_get_drvdata() for SPI devices 2011-03-17 10:32:47 -06:00
rtc-ds1511.c drivers/rtc/rtc-ds1511.c: world-writable sysfs nvram file 2011-03-22 17:44:16 -07:00
rtc-ds1553.c
rtc-ds1672.c
rtc-ds1742.c
rtc-ds3232.c
rtc-ds3234.c spi/rtc-{ds1390,ds3234,m41t94}: Use spi_get_drvdata() for SPI devices 2011-03-17 10:32:47 -06:00
rtc-efi.c
rtc-em3027.c rtc: add EM3027 rtc driver 2011-05-26 17:12:33 -07:00
rtc-ep93xx.c rtc: ep93xx: Initialize drvdata before registering device 2011-05-06 17:42:04 -07:00
rtc-fm3130.c
rtc-generic.c
rtc-imxdi.c
rtc-isl1208.c drivers/rtc/rtc-isl1208.c: add alarm support 2011-03-22 17:44:16 -07:00
rtc-isl12022.c
rtc-jz4740.c
rtc-lib.c
rtc-lpc32xx.c Fix common misspellings 2011-03-31 11:26:23 -03:00
rtc-m41t80.c rtc: m41t80: Initialize clientdata before registering device 2011-05-06 18:01:02 -07:00
rtc-m41t93.c spi/rtc-m41t93: Use spi_get_drvdata() for SPI devices 2011-06-08 14:33:48 -06:00
rtc-m41t94.c spi/rtc-{ds1390,ds3234,m41t94}: Use spi_get_drvdata() for SPI devices 2011-03-17 10:32:47 -06:00
rtc-m48t35.c
rtc-m48t59.c
rtc-m48t86.c
rtc-max6900.c
rtc-max6902.c
rtc-max8925.c rtc: max8925: Initialize drvdata before registering device 2011-05-06 18:02:00 -07:00
rtc-max8998.c rtc: max8998: Initialize drvdata before registering device 2011-05-06 18:02:02 -07:00
rtc-mc13xxx.c rtc: mc13xxx: Don't call rtc_device_register while holding lock 2011-05-06 18:02:07 -07:00
rtc-mpc5121.c
rtc-mrst.c drivers/rtc/rtc-mrst.c: use release_mem_region after request_mem_region 2011-05-26 17:12:33 -07:00
rtc-msm6242.c rtc: msm6242: Initialize drvdata before registering device 2011-05-06 18:02:03 -07:00
rtc-mv.c
rtc-mxc.c drivers/rtc/rtc-mxc.c: remove defines already included in rtc.h 2011-05-26 17:12:33 -07:00
rtc-nuc900.c
rtc-omap.c RTC: rtc-omap: Fix a leak of the IRQ during init failure 2011-04-18 10:39:38 +02:00
rtc-pcap.c rtc: pcap: Initialize drvdata before registering device 2011-05-06 18:02:04 -07:00
rtc-pcf2123.c
rtc-pcf8563.c
rtc-pcf8583.c
rtc-pcf50633.c drivers/rtc/rtc-pcf50633.c: don't request update IRQ 2011-05-26 17:12:33 -07:00
rtc-pl030.c Merge branches 'defcfg', 'drivers' and 'cyberpro-next' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-03-17 18:48:35 -07:00
rtc-pl031.c Merge branches 'defcfg', 'drivers' and 'cyberpro-next' of master.kernel.org:/home/rmk/linux-2.6-arm 2011-03-17 18:48:35 -07:00
rtc-proc.c
rtc-ps3.c
rtc-puv3.c unicore32: move rtc-puv3.c to drivers/rtc directory 2011-06-09 16:15:24 +08:00
rtc-pxa.c
rtc-r9701.c
rtc-rp5c01.c rtc: rp5c01: Initialize drvdata before registering device 2011-05-06 18:02:05 -07:00
rtc-rs5c313.c
rtc-rs5c348.c
rtc-rs5c372.c
rtc-rv3029c2.c rtc: add rv3029c2 RTC support 2011-05-26 17:12:33 -07:00
rtc-rx8025.c
rtc-rx8581.c
rtc-s3c.c drivers/rtc/rtc-s3c.c: fixup wake support for rtc 2011-05-11 18:50:44 -07:00
rtc-s35390a.c
rtc-sa1100.c
rtc-sh.c drivers: Final irq namespace conversion 2011-03-29 14:48:19 +02:00
rtc-spear.c rtc: add support for spear rtc 2011-05-26 17:12:33 -07:00
rtc-starfire.c
rtc-stk17ta8.c
rtc-stmp3xxx.c
rtc-sun4v.c
rtc-sysfs.c
rtc-tegra.c rtc: add real-time clock driver for NVIDIA Tegra 2011-03-22 17:44:16 -07:00
rtc-test.c
rtc-tile.c tile: add an RTC driver for the Tilera hypervisor 2011-05-17 14:44:36 -04:00
rtc-twl.c
rtc-tx4939.c
rtc-v3020.c
rtc-vr41xx.c
rtc-vt8500.c rtc: add support for the RTC in VIA VT8500 and compatibles 2011-05-26 17:12:33 -07:00
rtc-wm831x.c
rtc-wm8350.c
rtc-x1205.c Fix common misspellings 2011-03-31 11:26:23 -03:00