aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.26/1089-add-pcf50633-06-RTC_AIE-ioctl.patch
blob: 94a03bceb797f34a53bc6384c40ef9334f0522a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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