linux/drivers/rtc
John Stultz f44f7f96a2 RTC: Initialize kernel state from RTC
Mark Brown pointed out a corner case: that RTC alarms should
be allowed to be persistent across reboots if the hardware
supported it.

The rework of the generic layer to virtualize the RTC alarm
virtualized much of the alarm handling, and removed the
code used to read the alarm time from the hardware.

Mark noted if we want the alarm to be persistent across
reboots, we need to re-read the alarm value into the
virtualized generic layer at boot up, so that the generic
layer properly exposes that value.

This patch restores much of the earlier removed
rtc_read_alarm code and wires it in so that we
set the kernel's alarm value to what we find in the
hardware at boot time.

NOTE: Not all hardware supports persistent RTC alarm state across
system reset. rtc-cmos for example will keep the alarm time, but
disables the AIE mode irq. Applications should not expect the RTC
alarm to be valid after a system reset. We will preserve what
we can, to represent the hardware state at boot, but its not
guarenteed.

Further, in the future, with multiplexed RTC alarms, the
soonest alarm to fire may not be the one set via the /dev/rt
ioctls. So an application may set the alarm with RTC_ALM_SET,
but after a reset find that RTC_ALM_READ returns an earlier
time. Again, we preserve what we can, but applications should
not expect the RTC alarm state to persist across a system reset.

Big thanks to Mark for pointing out the issue!
Thanks also to Marcelo for helping think through the solution.

CC: Mark Brown <broonie@opensource.wolfsonmicro.com>
CC: Marcelo Roberto Jimenez <mroberto@cpti.cetuc.puc-rio.br>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Alessandro Zummo <a.zummo@towertech.it>
CC: rtc-linux@googlegroups.com
Reported-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
2011-03-09 11:22:50 -08:00
..
class.c RTC: Initialize kernel state from RTC 2011-03-09 11:22:50 -08:00
hctosys.c
interface.c RTC: Initialize kernel state from RTC 2011-03-09 11:22:50 -08:00
Kconfig RTC: Revert UIE emulation removal 2011-02-17 14:59:41 -08:00
Makefile
rtc-ab3100.c
rtc-ab8500.c
rtc-at32ap700x.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-at91rm9200.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-at91sam9.c RTC: fix typo in drivers/rtc/rtc-at91sam9.c 2011-02-25 14:00:56 -08:00
rtc-au1xxx.c
rtc-bfin.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-bq32k.c
rtc-bq4802.c
rtc-cmos.c rtc-cmos: fix suspend/resume 2011-01-13 08:03:12 -08:00
rtc-coh901331.c
rtc-core.h
rtc-davinci.c
rtc-dev.c RTC: Re-enable UIE timer/polling emulation 2011-02-17 14:59:42 -08:00
rtc-dm355evm.c
rtc-ds1216.c
rtc-ds1286.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-ds1302.c
rtc-ds1305.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-ds1307.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-ds1374.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-ds1390.c
rtc-ds1511.c
rtc-ds1553.c
rtc-ds1672.c
rtc-ds1742.c
rtc-ds3232.c drivers/rtc/rtc-ds3232.c: fix time range difference between linux and RTC chip 2011-02-25 15:07:37 -08:00
rtc-ds3234.c
rtc-efi.c
rtc-ep93xx.c
rtc-fm3130.c
rtc-generic.c
rtc-imxdi.c
rtc-isl1208.c
rtc-isl12022.c
rtc-jz4740.c
rtc-lib.c
rtc-lpc32xx.c
rtc-m41t80.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-m41t94.c
rtc-m48t35.c
rtc-m48t59.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-m48t86.c
rtc-max6900.c
rtc-max6902.c rtc: rtc-max6902 - set driver data in max6902_probe() 2011-01-13 08:03:12 -08:00
rtc-max8925.c
rtc-max8998.c mfd: Support LP3974 RTC 2011-01-14 12:38:16 +01:00
rtc-mc13xxx.c
rtc-mpc5121.c
rtc-mrst.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-msm6242.c RTC: Fix minor compile warning 2011-02-03 13:02:50 -08:00
rtc-mv.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-mxc.c
rtc-nuc900.c
rtc-omap.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-pcap.c
rtc-pcf2123.c
rtc-pcf8563.c
rtc-pcf8583.c
rtc-pcf50633.c
rtc-pl030.c
rtc-pl031.c
rtc-proc.c drivers/rtc/rtc-proc.c: add module_put on error path in rtc_proc_open() 2011-02-11 16:12:20 -08:00
rtc-ps3.c
rtc-pxa.c
rtc-r9701.c
rtc-rp5c01.c RTC: Fix minor compile warning 2011-02-03 13:02:50 -08:00
rtc-rs5c313.c
rtc-rs5c348.c
rtc-rs5c372.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-rx8025.c rtc: don't use flush_scheduled_work() 2010-12-24 16:00:17 +01:00
rtc-rx8581.c
rtc-s3c.c drivers/rtc/rtc-s3c.c: fix prototype for s3c_rtc_setaie() 2011-03-04 17:53:38 -08:00
rtc-s35390a.c
rtc-sa1100.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-sh.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-starfire.c
rtc-stk17ta8.c
rtc-stmp3xxx.c
rtc-sun4v.c
rtc-sysfs.c
rtc-test.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-twl.c
rtc-tx4939.c
rtc-v3020.c
rtc-vr41xx.c RTC: Convert rtc drivers to use the alarm_irq_enable method 2011-02-03 13:02:35 -08:00
rtc-wm831x.c
rtc-wm8350.c
rtc-x1205.c