提交 dc43d4a2 编写于 作者: R Ramesh Chandrasekaran 提交者: Linus Torvalds

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: NRamesh Chandrasekaran <ramesh.chandrasekaran@stericsson.com>
Signed-off-by: NLinus Walleij <linus.walleij@linaro.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 559a6fc0
...@@ -694,6 +694,7 @@ config RTC_DRV_AB3100 ...@@ -694,6 +694,7 @@ config RTC_DRV_AB3100
config RTC_DRV_AB8500 config RTC_DRV_AB8500
tristate "ST-Ericsson AB8500 RTC" tristate "ST-Ericsson AB8500 RTC"
depends on AB8500_CORE depends on AB8500_CORE
select RTC_INTF_DEV_UIE_EMUL
help help
Select this to enable the ST-Ericsson AB8500 power management IC RTC Select this to enable the ST-Ericsson AB8500 power management IC RTC
support. This chip contains a battery- and capacitor-backed RTC. support. This chip contains a battery- and capacitor-backed RTC.
......
...@@ -225,7 +225,8 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) ...@@ -225,7 +225,8 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
{ {
int retval, i; int retval, i;
unsigned char buf[ARRAY_SIZE(ab8500_rtc_alarm_regs)]; 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)) { if (alarm->time.tm_year < (AB8500_RTC_EPOCH - 1900)) {
dev_dbg(dev, "year should be equal to or greater than %d\n", dev_dbg(dev, "year should be equal to or greater than %d\n",
...@@ -236,6 +237,18 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) ...@@ -236,6 +237,18 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
/* Get the number of seconds since 1970 */ /* Get the number of seconds since 1970 */
rtc_tm_to_time(&alarm->time, &secs); 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 * Convert it to the number of seconds since 01-01-2000 00:00:00, since
* we only have a small counter in the RTC. * we only have a small counter in the RTC.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册