summaryrefslogtreecommitdiff
path: root/target/linux/s3c24xx/patches/0089-add-pcf50633-06-RTC_AIE-ioctl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches/0089-add-pcf50633-06-RTC_AIE-ioctl.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches/0089-add-pcf50633-06-RTC_AIE-ioctl.patch71
1 files changed, 71 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches/0089-add-pcf50633-06-RTC_AIE-ioctl.patch b/target/linux/s3c24xx/patches/0089-add-pcf50633-06-RTC_AIE-ioctl.patch
new file mode 100755
index 0000000000..94a03bceb7
--- /dev/null
+++ b/target/linux/s3c24xx/patches/0089-add-pcf50633-06-RTC_AIE-ioctl.patch
@@ -0,0 +1,71 @@
+From d35cdd3761e8b030937e463ccc64938104f1d773 Mon Sep 17 00:00:00 2001
+From: Holger Hans Peter Freyther <zecke@openmoko.org>
+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 <zecke@openmoko.org>
+---
+ 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
+