rtc: pcf2127: don't add/subtract 1 to tm_mon
authorRasmus Villemoes <rasmus.villemoes@prevas.dk>
Fri, 1 May 2020 13:24:50 +0000 (15:24 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 1 May 2020 15:34:01 +0000 (11:34 -0400)
As noted in rtc_def.h, the tm_mon field in struct rtc_time is 1-12,
unlike in struct tm where it is 0-11. Currently, running "date" prints
the wrong

Date: 2020-04-01 (Friday)    Time: 13:05:30

and setting the RTC via the date command is also broken.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
drivers/rtc/pcf2127.c

index f6953505a5ae12ffda2c892a74aacdc0a28739eb..b34ed63bf051f9d4f4fbbd36a16ae1549b495b7c 100644 (file)
@@ -56,7 +56,7 @@ static int pcf2127_rtc_set(struct udevice *dev, const struct rtc_time *tm)
        buf[i++] = tm->tm_wday & 0x07;
 
        /* month, 1 - 12 */
-       buf[i++] = bin2bcd(tm->tm_mon + 1);
+       buf[i++] = bin2bcd(tm->tm_mon);
 
        /* year */
        buf[i++] = bin2bcd(tm->tm_year % 100);
@@ -83,7 +83,7 @@ static int pcf2127_rtc_get(struct udevice *dev, struct rtc_time *tm)
        tm->tm_min  = bcd2bin(buf[PCF2127_REG_MN] & 0x7F);
        tm->tm_hour = bcd2bin(buf[PCF2127_REG_HR] & 0x3F);
        tm->tm_mday = bcd2bin(buf[PCF2127_REG_DM] & 0x3F);
-       tm->tm_mon  = bcd2bin(buf[PCF2127_REG_MO] & 0x1F) - 1;
+       tm->tm_mon  = bcd2bin(buf[PCF2127_REG_MO] & 0x1F);
        tm->tm_year = bcd2bin(buf[PCF2127_REG_YR]) + 1900;
        if (tm->tm_year < 1970)
                tm->tm_year += 100;     /* assume we are in 1970...2069 */