Currently the oscillator stop flag (OSF) bit is never checked or cleared
on the DS1339 RTC chip.

On getting the time from the RTC, check if the OSF bit is set, log a
warning, and clear the flag. This matches the behavior of the DS1337
chip.

Note that the `date` command always reads from the RTC even when
setting or resetting the date, so the OSF flag is cleared in those cases
as well.

Signed-off-by: Ronan Dalton <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Francesco Dolcini <[email protected]>
Cc: Mark Tomlinson <[email protected]>
Cc: Chris Packham <[email protected]>
---
 drivers/rtc/ds1307.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/rtc/ds1307.c b/drivers/rtc/ds1307.c
index 34d8f8c5276..4176ab3701e 100644
--- a/drivers/rtc/ds1307.c
+++ b/drivers/rtc/ds1307.c
@@ -116,9 +116,9 @@ static int ds1307_rtc_get(struct udevice *dev, struct 
rtc_time *tm)
        if (ret < 0)
                return ret;
 
-       if (type == ds_1337 || type == ds_1340) {
-               uint reg = (type == ds_1337) ? DS1337_STAT_REG_ADDR :
-                                              DS1340_STAT_REG_ADDR;
+       if (type == ds_1337 || type == ds_1339 || type == ds_1340) {
+               uint reg = (type == ds_1340) ? DS1340_STAT_REG_ADDR :
+                                              DS1337_STAT_REG_ADDR;
                int status = dm_i2c_reg_read(dev, reg);
 
                if (status >= 0 && (status & RTC_STAT_BIT_OSF)) {
-- 
2.53.0

Reply via email to