|
@@ -292,7 +292,8 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
|
|
dev_dbg(&rtc->dev, "alarm rollover: %s\n", "year");
|
|
|
do {
|
|
|
alarm->time.tm_year++;
|
|
|
- } while (rtc_valid_tm(&alarm->time) != 0);
|
|
|
+ } while (!is_leap_year(alarm->time.tm_year + 1900)
|
|
|
+ && rtc_valid_tm(&alarm->time) != 0);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
@@ -300,7 +301,16 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
|
|
}
|
|
|
|
|
|
done:
|
|
|
- return 0;
|
|
|
+ err = rtc_valid_tm(&alarm->time);
|
|
|
+
|
|
|
+ if (err) {
|
|
|
+ dev_warn(&rtc->dev, "invalid alarm value: %d-%d-%d %d:%d:%d\n",
|
|
|
+ alarm->time.tm_year + 1900, alarm->time.tm_mon + 1,
|
|
|
+ alarm->time.tm_mday, alarm->time.tm_hour, alarm->time.tm_min,
|
|
|
+ alarm->time.tm_sec);
|
|
|
+ }
|
|
|
+
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|