From bd7d5a7115fdc972013f8e51aae48ca768b0c0cf Mon Sep 17 00:00:00 2001 From: Wu Liangqing Date: Sat, 5 Mar 2022 15:13:54 +0800 Subject: [PATCH] rtc: hym8563: align the alarm time settings Signed-off-by: Wu Liangqing Change-Id: I59bacd5ef31f67af52313106382ca33734046c72 --- drivers/rtc/rtc-hym8563.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/drivers/rtc/rtc-hym8563.c b/drivers/rtc/rtc-hym8563.c index b18f3ff9c20f..a03b28f2033e 100644 --- a/drivers/rtc/rtc-hym8563.c +++ b/drivers/rtc/rtc-hym8563.c @@ -226,12 +226,39 @@ static int hym8563_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) if (alm_tm->tm_hour >= 24) { alm_tm->tm_hour = 0; alm_tm->tm_mday++; - if (alm_tm->tm_mday > 31) - alm_tm->tm_mday = 0; + alm_tm->tm_wday++; + if (alm_tm->tm_wday > 6) + alm_tm->tm_wday = 0; + switch (alm_tm->tm_mon + 1) { + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: + if (alm_tm->tm_mday > 31) + alm_tm->tm_mday = 1; + break; + case 4: + case 6: + case 9: + case 11: + if (alm_tm->tm_mday > 30) + alm_tm->tm_mday = 1; + break; + case 2: + if (alm_tm->tm_year / 4 == 0) { + if (alm_tm->tm_mday > 29) + alm_tm->tm_mday = 1; + } else if (alm_tm->tm_mday > 28) { + alm_tm->tm_mday = 1; + } + break; + } } } } - ret = i2c_smbus_read_byte_data(client, HYM8563_CTL2); if (ret < 0) return ret;