|
@@ -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.
|