瀏覽代碼

rtc: pcf2127: bulk read only date and time registers.

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>
Sean Nyekjaer 8 年之前
父節點
當前提交
3769a375ab
共有 1 個文件被更改,包括 13 次插入2 次删除
  1. 13 2
      drivers/rtc/rtc-pcf2127.c

+ 13 - 2
drivers/rtc/rtc-pcf2127.c

@@ -52,9 +52,20 @@ static int pcf2127_rtc_read_time(struct device *dev, struct rtc_time *tm)
 	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
 	struct pcf2127 *pcf2127 = dev_get_drvdata(dev);
 	unsigned char buf[10];
 	unsigned char buf[10];
 	int ret;
 	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) {
 	if (ret) {
 		dev_err(dev, "%s: read error\n", __func__);
 		dev_err(dev, "%s: read error\n", __func__);
 		return ret;
 		return ret;