On Mon, 2026-05-11 at 14:09 +0200, Alexander Feilke wrote: > From: Alexander Feilke <[email protected]> > > Sync from upstream linux v6.19. > > Signed-off-by: Alexander Feilke <[email protected]>
Reviewed-by: Alexander Sverdlin <[email protected]> > --- > drivers/rtc/pcf85063.c | 25 ++++++++++++++++++++++++- > 1 file changed, 24 insertions(+), 1 deletion(-) > > diff --git a/drivers/rtc/pcf85063.c b/drivers/rtc/pcf85063.c > index 06c85d939e0..0b336b8c5ee 100644 > --- a/drivers/rtc/pcf85063.c > +++ b/drivers/rtc/pcf85063.c > @@ -68,12 +68,25 @@ static int pcf85063_get_time(struct udevice *dev, struct > rtc_time *tm) > static int pcf85063_set_time(struct udevice *dev, const struct rtc_time *tm) > { > u8 regs[7]; > + int rc; > > if (tm->tm_year < 2000 || tm->tm_year > 2099) { > dev_err(dev, "Year must be between 2000 and 2099.\n"); > return -EINVAL; > } > > + /* > + * to accurately set the time, reset the divider chain and keep it in > + * reset state until all time/date registers are written > + */ > + rc = dm_i2c_reg_clrset(dev, PCF85063_REG_CTRL1, > + PCF85063_REG_CTRL1_EXT_TEST | > + PCF85063_REG_CTRL1_STOP, > + PCF85063_REG_CTRL1_STOP); > + > + if (rc) > + return rc; > + > /* hours, minutes and seconds */ > regs[0] = bin2bcd(tm->tm_sec) & (~PCF85063_REG_SC_OS); > > @@ -91,7 +104,17 @@ static int pcf85063_set_time(struct udevice *dev, const > struct rtc_time *tm) > /* adjust register to match rtc_time spec */ > regs[6] = bin2bcd(tm->tm_year % 100); > > - return dm_i2c_write(dev, PCF85063_REG_SC, regs, sizeof(regs)); > + rc = dm_i2c_write(dev, PCF85063_REG_SC, regs, sizeof(regs)); > + if (rc) > + return rc; > + > + /* > + * Write the control register as a separate action since the size of > + * the register space is different between the PCF85063TP and > + * PCF85063A devices. The rollover point can not be used. > + */ > + return dm_i2c_reg_clrset(dev, PCF85063_REG_CTRL1, > + PCF85063_REG_CTRL1_STOP, 0); > } > > static int pcf85063_reset(struct udevice *dev) -- Alexander Sverdlin Siemens AG www.siemens.com

