diff options
author | Alexandre Belloni <alexandre.belloni@bootlin.com> | 2021-10-15 22:24:00 +0300 |
---|---|---|
committer | Alexandre Belloni <alexandre.belloni@bootlin.com> | 2021-10-18 18:21:05 +0300 |
commit | 7d7234a4fff395ab17b021ec18f852e8ec8703b3 (patch) | |
tree | f23940f37f66f766e17e43ab5a40cd8214b0a8e1 /drivers/rtc | |
parent | 6084eac38e765c5ee1338f4e9b1ad3321f4c53eb (diff) | |
download | linux-7d7234a4fff395ab17b021ec18f852e8ec8703b3.tar.xz |
rtc: pcf8523: avoid reading BLF in pcf8523_rtc_read_time
BLF, battery low doesn't mean the time is imprecise or invalid, it simply mean
the backup battery has to be replaced. This information can be read using the
VL_READ ioctl.
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20211015192400.818254-1-alexandre.belloni@bootlin.com
Diffstat (limited to 'drivers/rtc')
-rw-r--r-- | drivers/rtc/rtc-pcf8523.c | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/drivers/rtc/rtc-pcf8523.c b/drivers/rtc/rtc-pcf8523.c index 8b6fb20774bf..09110b3ae25f 100644 --- a/drivers/rtc/rtc-pcf8523.c +++ b/drivers/rtc/rtc-pcf8523.c @@ -24,6 +24,7 @@ #define PCF8523_CONTROL3_PM_DSM BIT(5) /* direct switching mode */ #define PCF8523_CONTROL3_PM_MASK 0xe0 #define PCF8523_CONTROL3_BLF BIT(2) /* battery low bit, read-only */ +#define PCF8523_CONTROL3_BSF BIT(3) #define PCF8523_REG_SECONDS 0x03 #define PCF8523_SECONDS_OS BIT(7) @@ -94,18 +95,6 @@ static int pcf8523_write(struct i2c_client *client, u8 reg, u8 value) return 0; } -static int pcf8523_voltage_low(struct i2c_client *client) -{ - u8 value; - int err; - - err = pcf8523_read(client, PCF8523_REG_CONTROL3, &value); - if (err < 0) - return err; - - return !!(value & PCF8523_CONTROL3_BLF); -} - static int pcf8523_load_capacitance(struct i2c_client *client) { u32 load; @@ -220,14 +209,6 @@ static int pcf8523_rtc_read_time(struct device *dev, struct rtc_time *tm) struct i2c_msg msgs[2]; int err; - err = pcf8523_voltage_low(client); - if (err < 0) { - return err; - } else if (err > 0) { - dev_err(dev, "low voltage detected, time is unreliable\n"); - return -EINVAL; - } - msgs[0].addr = client->addr; msgs[0].flags = 0; msgs[0].len = 1; @@ -412,10 +393,11 @@ static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd, switch (cmd) { case RTC_VL_READ: - ret = pcf8523_voltage_low(client); + ret = pcf8523_read(client, PCF8523_REG_CONTROL3, &value); if (ret < 0) return ret; - if (ret) + + if (value & PCF8523_CONTROL3_BLF) flags |= RTC_VL_BACKUP_LOW; ret = pcf8523_read(client, PCF8523_REG_SECONDS, &value); |