rtc: pcf2127: bulk read only date and time registers.
authorSean Nyekjaer <sean.nyekjaer@prevas.dk>
Thu, 23 Feb 2017 14:01:24 +0000 (15:01 +0100)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Thu, 23 Feb 2017 17:38:54 +0000 (18:38 +0100)
Read control registers one by one and bulk read time registers.
This fixes when the clock is read, the watchdog counter register is zeroed.

Signed-off-by: Sean Nyekjaer <sean.nyekjaer@prevas.dk>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
drivers/rtc/rtc-pcf2127.c

index 2bfdf638b67390661f10e1405eea44d544eda6ad..f33447c5db85e395ac540f43c1bf7ec69f48efcf 100644 (file)
@@ -52,9 +52,20 @@ static int pcf2127_rtc_read_time(struct device *dev, struct rtc_time *tm)
        struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
        unsigned char buf[10];
        int ret;
+       int i;
 
-       ret = regmap_bulk_read(pcf2127->regmap, PCF2127_REG_CTRL1, buf,
-                               sizeof(buf));
+       for (i = 0; i <= PCF2127_REG_CTRL3; i++) {
+               ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL1 + i,
+                                 (unsigned int *)(buf + i));
+               if (ret) {
+                       dev_err(dev, "%s: read error\n", __func__);
+                       return ret;
+               }
+       }
+
+       ret = regmap_bulk_read(pcf2127->regmap, PCF2127_REG_SC,
+                              (buf + PCF2127_REG_SC),
+                              ARRAY_SIZE(buf) - PCF2127_REG_SC);
        if (ret) {
                dev_err(dev, "%s: read error\n", __func__);
                return ret;