From d35cdd3761e8b030937e463ccc64938104f1d773 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 25 Jul 2008 23:06:02 +0100 Subject: [PATCH] add-pcf50633-06-RTC_AIE-ioctl Hey, the legacy application 'atd' from Russ Nelson/Nils Faerber, used by Qtopia, to schedule alarms currently fails to start as the the above ioctl is failing. The other drivers in drivers/rtc implement the above ioctl and we can implement it too. The code to mask/unmask the RTC alarm is copied from the set_alarm routine and adapted to use the reg_set_bit_mask and reg_set_clear_mask. It is compiling, so it must work. Please welcome me the lkml way ;) Signed-Off-by: Holger Hans Peter Freyther --- drivers/i2c/chips/pcf50606.c | 10 ++++++++++ drivers/i2c/chips/pcf50633.c | 10 ++++++++++ 2 files changed, 20 insertions(+), 0 deletions(-) diff --git a/drivers/i2c/chips/pcf50606.c b/drivers/i2c/chips/pcf50606.c index aaec6e8..03805be 100644 --- a/drivers/i2c/chips/pcf50606.c +++ b/drivers/i2c/chips/pcf50606.c @@ -1191,7 +1191,17 @@ static int pcf50606_rtc_ioctl(struct device *dev, unsigned int cmd, { struct i2c_client *client = to_i2c_client(dev); struct pcf50606_data *pcf = i2c_get_clientdata(client); + switch (cmd) { + case RTC_AIE_OFF: + /* disable the alarm interrupt */ + reg_set_bit_mask(pcf, PCF50606_REG_INT1M, + PCF50606_INT1_ALARM, PCF50606_INT1_ALARM); + return 0; + case RTC_AIE_ON: + /* enable the alarm interrupt */ + reg_clear_bits(pcf, PCF50606_REG_INT1M, PCF50606_INT1_ALARM); + return 0; case RTC_PIE_OFF: /* disable periodic interrupt (hz tick) */ pcf->flags &= ~PCF50606_F_RTC_SECOND; diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c index c14fad0..b5cd2cb 100644 --- a/drivers/i2c/chips/pcf50633.c +++ b/drivers/i2c/chips/pcf50633.c @@ -1297,7 +1297,17 @@ static int pcf50633_rtc_ioctl(struct device *dev, unsigned int cmd, { struct i2c_client *client = to_i2c_client(dev); struct pcf50633_data *pcf = i2c_get_clientdata(client); + switch (cmd) { + case RTC_AIE_OFF: + /* disable the alarm interrupt */ + reg_set_bit_mask(pcf, PCF50633_REG_INT1M, + PCF50633_INT1_ALARM, PCF50633_INT1_ALARM); + return 0; + case RTC_AIE_ON: + /* enable the alarm interrupt */ + reg_clear_bits(pcf, PCF50633_REG_INT1M, PCF50633_INT1_ALARM); + return 0; case RTC_PIE_OFF: /* disable periodic interrupt (hz tick) */ pcf->flags &= ~PCF50633_F_RTC_SECOND; -- 1.5.6.3