rtc: rv3029: fix set_time function
authorMylène Josserand <mylene.josserand@free-electrons.com>
Tue, 3 May 2016 09:54:37 +0000 (11:54 +0200)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Sat, 21 May 2016 15:06:58 +0000 (17:06 +0200)
The bin2bcd function in set_time is uncorrect on weekdays as the
bit mask should be done at the end of arithmetic operations.

Signed-off-by: Mylène Josserand <mylene.josserand@free-electrons.com>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
drivers/rtc/rtc-rv3029c2.c

index 88a0c18..916bbc2 100644 (file)
@@ -502,7 +502,7 @@ static int rv3029_set_time(struct device *dev, struct rtc_time *tm)
        regs[RV3029_W_HOURS - RV3029_W_SEC] = bin2bcd(tm->tm_hour);
        regs[RV3029_W_DATE - RV3029_W_SEC] = bin2bcd(tm->tm_mday);
        regs[RV3029_W_MONTHS - RV3029_W_SEC] = bin2bcd(tm->tm_mon + 1);
-       regs[RV3029_W_DAYS - RV3029_W_SEC] = bin2bcd((tm->tm_wday & 7) + 1);
+       regs[RV3029_W_DAYS - RV3029_W_SEC] = bin2bcd(tm->tm_wday + 1) & 0x7;
        regs[RV3029_W_YEARS - RV3029_W_SEC] = bin2bcd(tm->tm_year - 100);
 
        ret = rv3029_write_regs(dev, RV3029_W_SEC, regs,