]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
rtc: rv3028: fix PORF flag not being cleared
authorJavier Viguera <javier.viguera@digi.com>
Tue, 10 Mar 2026 12:20:07 +0000 (13:20 +0100)
committerTom Rini <trini@konsulko.com>
Mon, 13 Apr 2026 21:24:24 +0000 (15:24 -0600)
The current code sets RV3028_STATUS_PORF instead of clearing it, so the
flag remains asserted. Use dm_i2c_reg_clrset() to clear the bit.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
drivers/rtc/rv3028.c

index b14d2a246ffcf9eaac02d145844e36bb680bc8ab..4e05ef8de2a266c094e7291be9ec50d37f0b1d0b 100644 (file)
@@ -130,7 +130,6 @@ static int rv3028_rtc_get(struct udevice *dev, struct rtc_time *tm)
 static int rv3028_rtc_set(struct udevice *dev, const struct rtc_time *tm)
 {
        u8 regs[RTC_RV3028_LEN];
-       u8 status;
        int ret;
 
        debug("%s: %4d-%02d-%02d (wday=%d( %2d:%02d:%02d\n",
@@ -157,13 +156,7 @@ static int rv3028_rtc_set(struct udevice *dev, const struct rtc_time *tm)
                return ret;
        }
 
-       ret = dm_i2c_read(dev, RV3028_STATUS, &status, 1);
-       if (ret < 0) {
-               printf("%s: error reading RTC status: %x\n", __func__, ret);
-               return -EIO;
-       }
-       status |= RV3028_STATUS_PORF;
-       return dm_i2c_write(dev, RV3028_STATUS, &status, 1);
+       return dm_i2c_reg_clrset(dev, RV3028_STATUS, RV3028_STATUS_PORF, 0);
 }
 
 static int rv3028_rtc_reset(struct udevice *dev)