rtc:fix read rtc error when the registers of pmic are all zero

there has a rtc time check which requires that the mday must bigger
than zero when read the rtc time, so we should deal with this in rtc
driver

Change-Id: I4c29aa23e6fe56feb20c16ce5080eb75690b0b64
This commit is contained in:
Nell
2024-05-14 17:59:31 +08:00
committed by zhangmeng
parent 1c6a130a97
commit 52b10fa45d

View File

@@ -132,7 +132,7 @@ static int spt_rtc_read_time(struct device *dev, struct rtc_time *tm)
tm->tm_sec = v[0] & rtc->desc->cnt_s.msk;
tm->tm_min = v[1] & rtc->desc->cnt_mi.msk;
tm->tm_hour = v[2] & rtc->desc->cnt_h.msk;
tm->tm_mday = (v[3] & rtc->desc->cnt_d.msk);
tm->tm_mday = (v[3] & rtc->desc->cnt_d.msk) + 1;
tm->tm_mon = (v[4] & rtc->desc->cnt_mo.msk);
tm->tm_year = (v[5] & rtc->desc->cnt_y.msk) + 100;
@@ -203,7 +203,7 @@ static int spt_rtc_set_time(struct device *dev, struct rtc_time *tm)
}
ret = regmap_write_bits(rtc->regmap, rtc->desc->cnt_d.reg,
rtc->desc->cnt_d.msk, tm->tm_mday);
rtc->desc->cnt_d.msk, tm->tm_mday - 1);
if (ret) {
dev_err(rtc->dev, "failed to update day: %d\n", ret);
return -EINVAL;
@@ -269,7 +269,7 @@ static int spt_rtc_set_time(struct device *dev, struct rtc_time *tm)
if ((v[0] == (rtc->desc->cnt_s.msk & tm->tm_sec)) &&
(v[1] == (rtc->desc->cnt_mi.msk & tm->tm_min)) &&
(v[2] == (rtc->desc->cnt_h.msk & tm->tm_hour)) &&
(v[3] == (rtc->desc->cnt_d.msk & tm->tm_mday)) &&
((v[3] + 1) == (rtc->desc->cnt_d.msk & tm->tm_mday)) &&
(v[4] == (rtc->desc->cnt_mo.msk & tm->tm_mon)) &&
(v[5] == (rtc->desc->cnt_y.msk & (tm->tm_year - 100))))
break;
@@ -335,7 +335,7 @@ static int spt_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
alrm->time.tm_sec = v[0] & rtc->desc->alarm_s.msk;
alrm->time.tm_min = v[1] & rtc->desc->alarm_mi.msk;
alrm->time.tm_hour = v[2] & rtc->desc->alarm_h.msk;
alrm->time.tm_mday = (v[3] & rtc->desc->alarm_d.msk);
alrm->time.tm_mday = (v[3] & rtc->desc->alarm_d.msk) + 1;
alrm->time.tm_mon = (v[4] & rtc->desc->alarm_mo.msk);
alrm->time.tm_year = (v[5] & rtc->desc->alarm_y.msk) + 100;
@@ -412,7 +412,7 @@ static int spt_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
}
ret = regmap_write_bits(rtc->regmap, rtc->desc->alarm_d.reg,
rtc->desc->alarm_d.msk, alrm->time.tm_mday);
rtc->desc->alarm_d.msk, alrm->time.tm_mday - 1);
if (ret) {
dev_err(rtc->dev, "failed to update alarm day: %d\n", ret);
return -EINVAL;