aboutsummaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@openmoko.org>2008-11-19 17:09:34 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-19 17:09:34 +0000
commitcd399d1273d3e3a3a3827ec70eaf23eacae61d74 (patch)
treea04e583d4fdff669beef2a68e75bcfe452595629 /drivers/i2c
parentc7f95ad254e93840ebb576d9a7a1a7a2800f9da8 (diff)
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 <zecke@openmoko.org>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/chips/pcf50606.c10
-rw-r--r--drivers/i2c/chips/pcf50633.c10
2 files changed, 20 insertions, 0 deletions
diff --git a/drivers/i2c/chips/pcf50606.c b/drivers/i2c/chips/pcf50606.c
index aaec6e80eb5..03805be56f3 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 c14fad01c79..b5cd2cbb005 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;