From patchwork Wed Dec 19 22:03:58 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Re: [PATCH v3] rtc-pcf8523: Add low battery voltage support Date: Wed, 19 Dec 2012 12:03:58 -0000 From: Andrew Morton X-Patchwork-Id: 207527 Message-Id: <20121219140358.8658ee86.akpm@linux-foundation.org> To: Jesper Nilsson Cc: Thierry Reding , Alessandro Zummo , rtc-linux@googlegroups.com, linux-kernel@vger.kernel.org On Wed, 19 Dec 2012 17:00:33 +0100 Jesper Nilsson wrote: > This patch implements 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. > > ... > > --- a/drivers/rtc/rtc-pcf8523.c > +++ b/drivers/rtc/rtc-pcf8523.c > @@ -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 +252,35 @@ static int pcf8523_rtc_set_time(struct device *dev, struct rtc_time *tm) > return pcf8523_start_rtc(client); > } > > +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; > + } > +} > + > 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, > }; Other drivers make the ioctl conditional on CONFIG_RTC_INTF_DEV, presumably to avoid bloat. --- a/drivers/rtc/rtc-pcf8523.c~rtc-pcf8523-add-low-battery-voltage-support-fix +++ a/drivers/rtc/rtc-pcf8523.c @@ -251,6 +251,7 @@ static int pcf8523_rtc_set_time(struct d return pcf8523_start_rtc(client); } +#ifdef CONFIG_RTC_INTF_DEV static int pcf8523_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) { @@ -275,6 +276,9 @@ static int pcf8523_rtc_ioctl(struct devi return -ENOIOCTLCMD; } } +#else +#define pcf8523_rtc_ioctl NULL +#endif static const struct rtc_class_ops pcf8523_rtc_ops = { .read_time = pcf8523_rtc_read_time,