Read control registers one by one and bulk read time registers.
This fixes when the clock is read, the watchdog counter register is zeroed.

The problem is latent without the watchdog patch

Signed-off-by: Sean Nyekjaer <[email protected]>
---
Only tested on pcf2127.
I think the pcf2127 have an issue when the register auto-incr is used,
when bulk reading the time the watchdog counter is zeroed and stopped.

 drivers/rtc/rtc-pcf2127.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c
index 8abc4eb8f289..f54a42b419b5 100644
--- a/drivers/rtc/rtc-pcf2127.c
+++ b/drivers/rtc/rtc-pcf2127.c
@@ -403,9 +403,21 @@ 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;
+
+       for (i = 0; i < 3; 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_CTRL1, buf,
-                               sizeof(buf));
+       ret =
+           regmap_bulk_read(pcf2127->regmap, PCF2127_REG_CTRL1 + 3, (buf + 3),
+                            7);
        if (ret) {
                dev_err(dev, "%s: read error\n", __func__);
                return ret;
-- 
2.11.0

-- 
You received this message because you are subscribed to "rtc-linux".
Membership options at http://groups.google.com/group/rtc-linux .
Please read http://groups.google.com/group/rtc-linux/web/checklist
before submitting a driver.
--- 
You received this message because you are subscribed to the Google Groups 
"rtc-linux" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to