On 31/10/2019 18:53:00+0900, Nobuhiro Iwamatsu wrote: > Hi, > > 2019年10月31日(木) 16:57 Ilya Ledvich <ilya@xxxxxxxxxxxxxx>: > > > > The RTC month value is 1-indexed, but the kernel assumes it is 0-indexed. > > This may result in the RTC not rolling over correctly. > > > > Signed-off-by: Ilya Ledvich <ilya@xxxxxxxxxxxxxx> > > --- > > drivers/rtc/rtc-em3027.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/rtc/rtc-em3027.c b/drivers/rtc/rtc-em3027.c > > index 77cca1392253..ef3792543f93 100644 > > --- a/drivers/rtc/rtc-em3027.c > > +++ b/drivers/rtc/rtc-em3027.c > > @@ -71,7 +71,7 @@ static int em3027_get_time(struct device *dev, struct rtc_time *tm) > > tm->tm_hour = bcd2bin(buf[2]); > > tm->tm_mday = bcd2bin(buf[3]); > > tm->tm_wday = bcd2bin(buf[4]); > > - tm->tm_mon = bcd2bin(buf[5]); > > + tm->tm_mon = bcd2bin(buf[5]) - 1; > > tm->tm_year = bcd2bin(buf[6]) + 100; > > > > return 0; > > @@ -94,7 +94,7 @@ static int em3027_set_time(struct device *dev, struct rtc_time *tm) > > buf[3] = bin2bcd(tm->tm_hour); > > buf[4] = bin2bcd(tm->tm_mday); > > buf[5] = bin2bcd(tm->tm_wday); > > - buf[6] = bin2bcd(tm->tm_mon); > > + buf[6] = bin2bcd(tm->tm_mon) + 1; > > I think '+'1 should be set in bin2bcd(). > This is correct. Ilya, could you also run https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/rtc-tools.git/tree/rtc-range.c on that rtc? I'm interested in the full output. It seems this RTC working range is 2000 to 2079 -- Alexandre Belloni, Bootlin Embedded Linux and Kernel engineering https://bootlin.com