Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc43d4a2 authored by Ramesh Chandrasekaran's avatar Ramesh Chandrasekaran Committed by Linus Torvalds
Browse files

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: default avatarRamesh Chandrasekaran <ramesh.chandrasekaran@stericsson.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 559a6fc0
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -694,6 +694,7 @@ config RTC_DRV_AB3100
config RTC_DRV_AB8500
	tristate "ST-Ericsson AB8500 RTC"
	depends on AB8500_CORE
	select RTC_INTF_DEV_UIE_EMUL
	help
	  Select this to enable the ST-Ericsson AB8500 power management IC RTC
	  support. This chip contains a battery- and capacitor-backed RTC.
+14 −1
Original line number Diff line number Diff line
@@ -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",
@@ -236,6 +237,18 @@ static int ab8500_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
	/* Get the number of seconds since 1970 */
	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.