rtc: pcf8523: report oscillator failures
authorAlexandre Belloni <alexandre.belloni@bootlin.com>
Sun, 18 Apr 2021 00:20:23 +0000 (02:20 +0200)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Thu, 29 Apr 2021 21:37:18 +0000 (23:37 +0200)
Report oscillator failures and invalid date/time on RTC_VL_READ.

Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20210418002023.1000265-3-alexandre.belloni@bootlin.com
drivers/rtc/rtc-pcf8523.c

index 4e5e5ca..740e213 100644 (file)
@@ -406,6 +406,8 @@ static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd,
                             unsigned long arg)
 {
        struct i2c_client *client = to_i2c_client(dev);
+       unsigned int flags = 0;
+       u8 value;
        int ret;
 
        switch (cmd) {
@@ -414,9 +416,16 @@ static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd,
                if (ret < 0)
                        return ret;
                if (ret)
-                       ret = RTC_VL_BACKUP_LOW;
+                       flags |= RTC_VL_BACKUP_LOW;
+
+               ret = pcf8523_read(client, REG_SECONDS, &value);
+               if (ret < 0)
+                       return ret;
+
+               if (value & REG_SECONDS_OS)
+                       flags |= RTC_VL_DATA_INVALID;
 
-               return put_user(ret, (unsigned int __user *)arg);
+               return put_user(flags, (unsigned int __user *)arg);
 
        default:
                return -ENOIOCTLCMD;