diff options
author | Ramesh Chandrasekaran <ramesh.chandrasekaran@stericsson.com> | 2012-07-30 23:41:41 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-31 02:25:18 +0200 |
commit | dc43d4a26b808240410ce3ea1c72a8047f90d1d8 (patch) | |
tree | 13fb879cf0167796fe21dc1ae750b4105e1467be /drivers/rtc/rtc-ab8500.c | |
parent | rtc: pl031: fix up IRQ flags (diff) | |
download | linux-dc43d4a26b808240410ce3ea1c72a8047f90d1d8.tar.xz linux-dc43d4a26b808240410ce3ea1c72a8047f90d1d8.zip |
drivers/rtc/rtc-ab8500.c: use UIE emulation
RTC: Fix to correct improper implementation of clock update irq
(RTC_UIE) and enable UIE Emulation.
[akpm@linux-foundation.org: checkpatch fixes]
Signed-off-by: Ramesh Chandrasekaran <ramesh.chandrasekaran@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc/rtc-ab8500.c')
-rw-r--r-- | drivers/rtc/rtc-ab8500.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/rtc/rtc-ab8500.c b/drivers/rtc/rtc-ab8500.c index 370889d0489b..1a57e03e169d 100644 --- a/drivers/rtc/rtc-ab8500.c +++ b/drivers/rtc/rtc-ab8500.c @@ -225,7 +225,8 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) { int retval, i; unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)]; - unsigned long mins, secs = 0; + unsigned long mins, secs = 0, cursec = 0; + struct rtc_time curtm; if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) { dev_dbg(dev, "year should be equal to or greater than %d\n", @@ -237,6 +238,18 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) rtc_tm_to_time(&alarm->time, &secs); /* + * Check whether alarm is set less than 1min. + * Since our RTC doesn't support alarm resolution less than 1min, + * return -EINVAL, so UIE EMUL can take it up, incase of UIE_ON + */ + ab8500_rtc_read_time(dev, &curtm); /* Read current time */ + rtc_tm_to_time(&curtm, &cursec); + if ((secs - cursec) < 59) { + dev_dbg(dev, "Alarm less than 1 minute not supported\r\n"); + return -EINVAL; + } + + /* * Convert it to the number of seconds since 01-01-2000 00:00:00, since * we only have a small counter in the RTC. */ |