mirror of https://gitee.com/openkylin/linux.git
rtc-pcf8523: add low battery voltage support
Implement reading of the battery voltage low signal for rtc-pcf8523. The bit is read-only and cannot be cleared by software, so no clear function is implemented. [akpm@linux-foundation.org: omit pcf8563_rtc_ioctl() if CONFIG_RTC_INTF_DEV=n] Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com> Reviewed-by: Thierry Reding <thierry.reding@avionic-design.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
fca1dd031a
commit
f32bc70d5f
|
@ -23,6 +23,7 @@
|
|||
#define REG_CONTROL3_PM_VDD (1 << 6) /* switch-over disabled */
|
||||
#define REG_CONTROL3_PM_DSM (1 << 5) /* direct switching mode */
|
||||
#define REG_CONTROL3_PM_MASK 0xe0
|
||||
#define REG_CONTROL3_BLF (1 << 2) /* battery low bit, read-only */
|
||||
|
||||
#define REG_SECONDS 0x03
|
||||
#define REG_SECONDS_OS (1 << 7)
|
||||
|
@ -250,9 +251,39 @@ static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm)
|
|||
return pcf8523_start_rtc(client);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RTC_INTF_DEV
|
||||
static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
u8 value;
|
||||
int ret = 0, err;
|
||||
|
||||
switch (cmd) {
|
||||
case RTC_VL_READ:
|
||||
err = pcf8523_read(client, REG_CONTROL3, &value);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
if (value & REG_CONTROL3_BLF)
|
||||
ret = 1;
|
||||
|
||||
if (copy_to_user((void __user *)arg, &ret, sizeof(int)))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define pcf8523_rtc_ioctl NULL
|
||||
#endif
|
||||
|
||||
static const struct rtc_class_ops pcf8523_rtc_ops = {
|
||||
.read_time = pcf8523_rtc_read_time,
|
||||
.set_time = pcf8523_rtc_set_time,
|
||||
.ioctl = pcf8523_rtc_ioctl,
|
||||
};
|
||||
|
||||
static int pcf8523_probe(struct i2c_client *client,
|
||||
|
|
Loading…
Reference in New Issue