Sorry, I sent the wrong patch. Please ignore this version. I will send the correct patch as v2. Best regards, Nobuhiro On Tue, Apr 20, 2021 at 10:24:39AM +0900, Nobuhiro Iwamatsu wrote: > rx8130 wday specifies the bit position, not BCD. > > Fixes: ee0981be7704 ("rtc: ds1307: Add support for Epson RX8130CE") > Signed-off-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@xxxxxxxxxxxxx> > --- > drivers/rtc/rtc-ds1307.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c > index cd8e438bc9c46b..aff3c41f7fa585 100644 > --- a/drivers/rtc/rtc-ds1307.c > +++ b/drivers/rtc/rtc-ds1307.c > @@ -296,7 +296,11 @@ static int ds1307_get_time(struct device *dev, struct rtc_time *t) > t->tm_min = bcd2bin(regs[DS1307_REG_MIN] & 0x7f); > tmp = regs[DS1307_REG_HOUR] & 0x3f; > t->tm_hour = bcd2bin(tmp); > - t->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1; > + /* rx8130 is bit position, not BCD */ > + if (ds1307->type == rx_8130) { > + t->tm_wday = fls(regs[DS1307_REG_WDAY] & 0x7f); > + else > + t->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1; > t->tm_mday = bcd2bin(regs[DS1307_REG_MDAY] & 0x3f); > tmp = regs[DS1307_REG_MONTH] & 0x1f; > t->tm_mon = bcd2bin(tmp) - 1; > @@ -343,7 +347,11 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t) > regs[DS1307_REG_SECS] = bin2bcd(t->tm_sec); > regs[DS1307_REG_MIN] = bin2bcd(t->tm_min); > regs[DS1307_REG_HOUR] = bin2bcd(t->tm_hour); > - regs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); > + /* rx8130 is bit position, not BCD */ > + if (ds1307->type == rx_8130) > + data[DS1307_REG_WDAY] = 1 << t->tm_wday; > + else > + regs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); > regs[DS1307_REG_MDAY] = bin2bcd(t->tm_mday); > regs[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1); > > -- > 2.30.0 > >