rtc: pcf8563: return meaningful value for RTC_VL_READ
authorAlexandre Belloni <alexandre.belloni@bootlin.com>
Sat, 14 Dec 2019 22:02:51 +0000 (23:02 +0100)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Wed, 18 Dec 2019 09:37:32 +0000 (10:37 +0100)
PCF8563_SC_LV means the voltage dropped too low and data has been lost.

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

index 7fc43950cf6c9f7cc4fc0de385f61e112eed1f32..b282c6b07969880b0315d8cf7561790746d6c08c 100644 (file)
@@ -277,20 +277,16 @@ static int pcf8563_rtc_set_time(struct device *dev, struct rtc_time *tm)
 static int pcf8563_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
 {
        struct i2c_client *client = to_i2c_client(dev);
-       int vl, ret;
+       int ret;
 
        switch (cmd) {
        case RTC_VL_READ:
-
                ret = i2c_smbus_read_byte_data(client, PCF8563_REG_SC);
                if (ret < 0)
                        return ret;
 
-               vl = ret & PCF8563_SC_LV ? 1 : 0;
-
-               if (copy_to_user((void __user *)arg, &vl, sizeof(int)))
-                       return -EFAULT;
-               return 0;
+               return put_user(ret & PCF8563_SC_LV ? RTC_VL_DATA_INVALID : 0,
+                               (unsigned int __user *)arg);
        default:
                return -ENOIOCTLCMD;
        }