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 rtc/hctosys: only claim the RTC provided the system time if it did 2010-03-12 15:52:28 -08:00
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: Add drivers/rtc/rtc-mrst.c 2010-11-11 11:34:27 +01:00
rtc-ab3100.c drivers/rtc/rtc-ab3100.c: add missing platform_set_drvdata() in ab3100_rtc_probe() 2010-09-22 17:22:39 -07:00
rtc-ab8500.c mfd: Align ab8500 with the abx500 interface 2010-10-29 00:29:19 +02:00
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: t reaches -1, tested 0 2009-02-11 14:25:36 -08:00
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: add driver for BQ32000 I2C RTC 2009-12-16 07:20:00 -08:00
rtc-bq4802.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-cmos.c rtc-cmos: fix suspend/resume 2011-01-13 08:03:12 -08:00
rtc-coh901331.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-core.h
rtc-davinci.c davinci: update gfp/slab.h includes 2010-06-28 10:19:19 +10:00
rtc-dev.c RTC: Re-enable UIE timer/polling emulation 2011-02-17 14:59:42 -08:00
rtc-dm355evm.c rtc: rtc-dm355evm driver 2009-02-05 12:56:46 -08:00
rtc-ds1216.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
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 sh: mach-snapgear: Kill off machtype, consolidate board def. 2010-10-29 19:06:53 +09:00
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 include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-ds1511.c sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
rtc-ds1553.c sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
rtc-ds1672.c
rtc-ds1742.c sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
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 spi: prefix modalias with "spi:" 2009-09-23 07:39:43 -07:00
rtc-efi.c rtc: add platform driver for EFI 2009-04-01 08:59:24 -07:00
rtc-ep93xx.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-fm3130.c rtc: fixes and new functionality for fm3130 2010-08-11 08:59:07 -07:00
rtc-generic.c parisc: rtc: Rename rtc-parisc to rtc-generic 2009-04-02 01:05:31 +00:00
rtc-imxdi.c rtc: driver for the DryIce block found in i.MX25 chips 2010-08-11 08:59:07 -07:00
rtc-isl1208.c rtc-isl1208: use sysfs_{create/remove}_group 2010-05-25 08:07:08 -07:00
rtc-isl12022.c rtc-isl12022: properly handle military hour format 2010-08-11 08:59:08 -07:00
rtc-jz4740.c drivers/rtc/rtc-jz4740.c: add alarm function 2010-10-27 18:03:06 -07:00
rtc-lib.c RTC: Rework RTC code to use timerqueue for events 2010-12-10 22:24:24 -08:00
rtc-lpc32xx.c rtc: rtc-lpc32xx: introduce RTC driver for the LPC32XX SoC 2010-10-27 18:03:05 -07:00
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 spi: prefix modalias with "spi:" 2009-09-23 07:39:43 -07:00
rtc-m48t35.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
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/m48t86: use rtc_valid_tm() to check returned tm 2010-08-11 08:59:07 -07:00
rtc-max6900.c rtc/max6900: use rtc_valid_tm() to check returning tm 2010-08-11 08:59:07 -07:00
rtc-max6902.c rtc: rtc-max6902 - set driver data in max6902_probe() 2011-01-13 08:03:12 -08:00
rtc-max8925.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-max8998.c mfd: Support LP3974 RTC 2011-01-14 12:38:16 +01:00
rtc-mc13xxx.c rtc: Add support for the rtc found in the MC13892 PMIC 2010-10-29 00:30:01 +02:00
rtc-mpc5121.c of/device: Replace struct of_device with struct platform_device 2010-08-06 09:25:50 -06:00
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/rtc-mxc: remove six unused fields 2010-08-11 08:59:06 -07:00
rtc-nuc900.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2010-10-24 13:41:39 -07:00
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 include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-pcf2123.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-pcf8563.c drivers/rtc/rtc-pcf8563.c: remove unused struct 2010-08-11 08:59:06 -07:00
rtc-pcf8583.c rtc: fix driver data issues in several rtc drivers 2009-12-16 07:19:58 -08:00
rtc-pcf50633.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-pl030.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-pl031.c drivers/rtc/rtc-pl031.c: do not mark PL031 IRQ as shared 2010-09-09 18:57:24 -07:00
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 powerpc/ps3: Add rtc-ps3 2009-04-02 01:05:32 +00:00
rtc-pxa.c rtc/pxa: remove unnecessary private ops->ioctl() 2010-08-11 08:59:07 -07:00
rtc-r9701.c spi: prefix modalias with "spi:" 2009-09-23 07:39:43 -07:00
rtc-rp5c01.c RTC: Fix minor compile warning 2011-02-03 13:02:50 -08:00
rtc-rs5c313.c rtc: rtc-rs5c313: ctrl_in/outX to __raw_read/writeX conversion. 2010-10-27 15:30:32 +09:00
rtc-rs5c348.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
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 drivers/rtc/rtc-rx8581.c: fix setdatetime 2010-07-27 14:32:06 -07:00
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 i2c: Remove all i2c_set_clientdata(client, NULL) in drivers 2010-06-03 11:33:58 +02:00
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 sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
rtc-stmp3xxx.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
rtc-sun4v.c
rtc-sysfs.c rtc/hctosys: only claim the RTC provided the system time if it did 2010-03-12 15:52:28 -08:00
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-twl: Storage class should be before const qualifier 2010-03-06 11:26:47 -08:00
rtc-tx4939.c sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
rtc-v3020.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
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: use genirq directly in rtc-wm831x 2010-05-25 08:07:08 -07:00
rtc-wm8350.c rtc: Suppress duplicate enable/disable of WM8350 update interrupt 2010-03-07 22:16:56 +01:00
rtc-x1205.c rtc-x1205: unconditionally set date when setting clock 2009-12-16 07:20:00 -08:00