diff options
-rw-r--r-- | drivers/rtc/hctosys.c | 14 | ||||
-rw-r--r-- | drivers/rtc/interface.c | 78 | ||||
-rw-r--r-- | drivers/rtc/rtc-at91rm9200.c | 2 | ||||
-rw-r--r-- | drivers/rtc/rtc-cmos.c | 12 | ||||
-rw-r--r-- | drivers/rtc/rtc-core.h | 2 | ||||
-rw-r--r-- | drivers/rtc/rtc-dev.c | 27 | ||||
-rw-r--r-- | drivers/rtc/rtc-ds1553.c | 2 | ||||
-rw-r--r-- | drivers/rtc/rtc-omap.c | 4 | ||||
-rw-r--r-- | drivers/rtc/rtc-pl031.c | 2 | ||||
-rw-r--r-- | drivers/rtc/rtc-proc.c | 19 | ||||
-rw-r--r-- | drivers/rtc/rtc-s3c.c | 4 | ||||
-rw-r--r-- | drivers/rtc/rtc-sa1100.c | 4 | ||||
-rw-r--r-- | drivers/rtc/rtc-sh.c | 6 | ||||
-rw-r--r-- | drivers/rtc/rtc-sysfs.c | 18 | ||||
-rw-r--r-- | drivers/rtc/rtc-test.c | 6 | ||||
-rw-r--r-- | drivers/rtc/rtc-vr41xx.c | 4 | ||||
-rw-r--r-- | include/linux/rtc.h | 33 |
17 files changed, 119 insertions, 118 deletions
diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c index d02fe9a0001f..f48a8aed5b0f 100644 --- a/drivers/rtc/hctosys.c +++ b/drivers/rtc/hctosys.c | |||
@@ -26,15 +26,15 @@ static int __init rtc_hctosys(void) | |||
26 | { | 26 | { |
27 | int err; | 27 | int err; |
28 | struct rtc_time tm; | 28 | struct rtc_time tm; |
29 | struct class_device *class_dev = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); | 29 | struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE); |
30 | 30 | ||
31 | if (class_dev == NULL) { | 31 | if (rtc == NULL) { |
32 | printk("%s: unable to open rtc device (%s)\n", | 32 | printk("%s: unable to open rtc device (%s)\n", |
33 | __FILE__, CONFIG_RTC_HCTOSYS_DEVICE); | 33 | __FILE__, CONFIG_RTC_HCTOSYS_DEVICE); |
34 | return -ENODEV; | 34 | return -ENODEV; |
35 | } | 35 | } |
36 | 36 | ||
37 | err = rtc_read_time(class_dev, &tm); | 37 | err = rtc_read_time(rtc, &tm); |
38 | if (err == 0) { | 38 | if (err == 0) { |
39 | err = rtc_valid_tm(&tm); | 39 | err = rtc_valid_tm(&tm); |
40 | if (err == 0) { | 40 | if (err == 0) { |
@@ -46,7 +46,7 @@ static int __init rtc_hctosys(void) | |||
46 | 46 | ||
47 | do_settimeofday(&tv); | 47 | do_settimeofday(&tv); |
48 | 48 | ||
49 | dev_info(class_dev->dev, | 49 | dev_info(rtc->class_dev.dev, |
50 | "setting the system clock to " | 50 | "setting the system clock to " |
51 | "%d-%02d-%02d %02d:%02d:%02d (%u)\n", | 51 | "%d-%02d-%02d %02d:%02d:%02d (%u)\n", |
52 | tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, | 52 | tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, |
@@ -54,14 +54,14 @@ static int __init rtc_hctosys(void) | |||
54 | (unsigned int) tv.tv_sec); | 54 | (unsigned int) tv.tv_sec); |
55 | } | 55 | } |
56 | else | 56 | else |
57 | dev_err(class_dev->dev, | 57 | dev_err(rtc->class_dev.dev, |
58 | "hctosys: invalid date/time\n"); | 58 | "hctosys: invalid date/time\n"); |
59 | } | 59 | } |
60 | else | 60 | else |
61 | dev_err(class_dev->dev, | 61 | dev_err(rtc->class_dev.dev, |
62 | "hctosys: unable to read the hardware clock\n"); | 62 | "hctosys: unable to read the hardware clock\n"); |
63 | 63 | ||
64 | rtc_class_close(class_dev); | 64 | rtc_class_close(rtc); |
65 | 65 | ||
66 | return 0; | 66 | return 0; |
67 | } | 67 | } |
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index ef40df0f169d..d9d326ff6253 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c | |||
@@ -13,10 +13,9 @@ | |||
13 | 13 | ||
14 | #include <linux/rtc.h> | 14 | #include <linux/rtc.h> |
15 | 15 | ||
16 | int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm) | 16 | int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm) |
17 | { | 17 | { |
18 | int err; | 18 | int err; |
19 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
20 | 19 | ||
21 | err = mutex_lock_interruptible(&rtc->ops_lock); | 20 | err = mutex_lock_interruptible(&rtc->ops_lock); |
22 | if (err) | 21 | if (err) |
@@ -28,7 +27,7 @@ int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm) | |||
28 | err = -EINVAL; | 27 | err = -EINVAL; |
29 | else { | 28 | else { |
30 | memset(tm, 0, sizeof(struct rtc_time)); | 29 | memset(tm, 0, sizeof(struct rtc_time)); |
31 | err = rtc->ops->read_time(class_dev->dev, tm); | 30 | err = rtc->ops->read_time(rtc->class_dev.dev, tm); |
32 | } | 31 | } |
33 | 32 | ||
34 | mutex_unlock(&rtc->ops_lock); | 33 | mutex_unlock(&rtc->ops_lock); |
@@ -36,10 +35,9 @@ int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm) | |||
36 | } | 35 | } |
37 | EXPORT_SYMBOL_GPL(rtc_read_time); | 36 | EXPORT_SYMBOL_GPL(rtc_read_time); |
38 | 37 | ||
39 | int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm) | 38 | int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm) |
40 | { | 39 | { |
41 | int err; | 40 | int err; |
42 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
43 | 41 | ||
44 | err = rtc_valid_tm(tm); | 42 | err = rtc_valid_tm(tm); |
45 | if (err != 0) | 43 | if (err != 0) |
@@ -54,17 +52,16 @@ int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm) | |||
54 | else if (!rtc->ops->set_time) | 52 | else if (!rtc->ops->set_time) |
55 | err = -EINVAL; | 53 | err = -EINVAL; |
56 | else | 54 | else |
57 | err = rtc->ops->set_time(class_dev->dev, tm); | 55 | err = rtc->ops->set_time(rtc->class_dev.dev, tm); |
58 | 56 | ||
59 | mutex_unlock(&rtc->ops_lock); | 57 | mutex_unlock(&rtc->ops_lock); |
60 | return err; | 58 | return err; |
61 | } | 59 | } |
62 | EXPORT_SYMBOL_GPL(rtc_set_time); | 60 | EXPORT_SYMBOL_GPL(rtc_set_time); |
63 | 61 | ||
64 | int rtc_set_mmss(struct class_device *class_dev, unsigned long secs) | 62 | int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs) |
65 | { | 63 | { |
66 | int err; | 64 | int err; |
67 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
68 | 65 | ||
69 | err = mutex_lock_interruptible(&rtc->ops_lock); | 66 | err = mutex_lock_interruptible(&rtc->ops_lock); |
70 | if (err) | 67 | if (err) |
@@ -73,11 +70,11 @@ int rtc_set_mmss(struct class_device *class_dev, unsigned long secs) | |||
73 | if (!rtc->ops) | 70 | if (!rtc->ops) |
74 | err = -ENODEV; | 71 | err = -ENODEV; |
75 | else if (rtc->ops->set_mmss) | 72 | else if (rtc->ops->set_mmss) |
76 | err = rtc->ops->set_mmss(class_dev->dev, secs); | 73 | err = rtc->ops->set_mmss(rtc->class_dev.dev, secs); |
77 | else if (rtc->ops->read_time && rtc->ops->set_time) { | 74 | else if (rtc->ops->read_time && rtc->ops->set_time) { |
78 | struct rtc_time new, old; | 75 | struct rtc_time new, old; |
79 | 76 | ||
80 | err = rtc->ops->read_time(class_dev->dev, &old); | 77 | err = rtc->ops->read_time(rtc->class_dev.dev, &old); |
81 | if (err == 0) { | 78 | if (err == 0) { |
82 | rtc_time_to_tm(secs, &new); | 79 | rtc_time_to_tm(secs, &new); |
83 | 80 | ||
@@ -89,7 +86,8 @@ int rtc_set_mmss(struct class_device *class_dev, unsigned long secs) | |||
89 | */ | 86 | */ |
90 | if (!((old.tm_hour == 23 && old.tm_min == 59) || | 87 | if (!((old.tm_hour == 23 && old.tm_min == 59) || |
91 | (new.tm_hour == 23 && new.tm_min == 59))) | 88 | (new.tm_hour == 23 && new.tm_min == 59))) |
92 | err = rtc->ops->set_time(class_dev->dev, &new); | 89 | err = rtc->ops->set_time(rtc->class_dev.dev, |
90 | &new); | ||
93 | } | 91 | } |
94 | } | 92 | } |
95 | else | 93 | else |
@@ -101,10 +99,9 @@ int rtc_set_mmss(struct class_device *class_dev, unsigned long secs) | |||
101 | } | 99 | } |
102 | EXPORT_SYMBOL_GPL(rtc_set_mmss); | 100 | EXPORT_SYMBOL_GPL(rtc_set_mmss); |
103 | 101 | ||
104 | int rtc_read_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) | 102 | int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) |
105 | { | 103 | { |
106 | int err; | 104 | int err; |
107 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
108 | 105 | ||
109 | err = mutex_lock_interruptible(&rtc->ops_lock); | 106 | err = mutex_lock_interruptible(&rtc->ops_lock); |
110 | if (err) | 107 | if (err) |
@@ -116,7 +113,7 @@ int rtc_read_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) | |||
116 | err = -EINVAL; | 113 | err = -EINVAL; |
117 | else { | 114 | else { |
118 | memset(alarm, 0, sizeof(struct rtc_wkalrm)); | 115 | memset(alarm, 0, sizeof(struct rtc_wkalrm)); |
119 | err = rtc->ops->read_alarm(class_dev->dev, alarm); | 116 | err = rtc->ops->read_alarm(rtc->class_dev.dev, alarm); |
120 | } | 117 | } |
121 | 118 | ||
122 | mutex_unlock(&rtc->ops_lock); | 119 | mutex_unlock(&rtc->ops_lock); |
@@ -124,10 +121,9 @@ int rtc_read_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) | |||
124 | } | 121 | } |
125 | EXPORT_SYMBOL_GPL(rtc_read_alarm); | 122 | EXPORT_SYMBOL_GPL(rtc_read_alarm); |
126 | 123 | ||
127 | int rtc_set_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) | 124 | int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) |
128 | { | 125 | { |
129 | int err; | 126 | int err; |
130 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
131 | 127 | ||
132 | err = mutex_lock_interruptible(&rtc->ops_lock); | 128 | err = mutex_lock_interruptible(&rtc->ops_lock); |
133 | if (err) | 129 | if (err) |
@@ -138,7 +134,7 @@ int rtc_set_alarm(struct class_device *class_dev, struct rtc_wkalrm *alarm) | |||
138 | else if (!rtc->ops->set_alarm) | 134 | else if (!rtc->ops->set_alarm) |
139 | err = -EINVAL; | 135 | err = -EINVAL; |
140 | else | 136 | else |
141 | err = rtc->ops->set_alarm(class_dev->dev, alarm); | 137 | err = rtc->ops->set_alarm(rtc->class_dev.dev, alarm); |
142 | 138 | ||
143 | mutex_unlock(&rtc->ops_lock); | 139 | mutex_unlock(&rtc->ops_lock); |
144 | return err; | 140 | return err; |
@@ -147,16 +143,14 @@ EXPORT_SYMBOL_GPL(rtc_set_alarm); | |||
147 | 143 | ||
148 | /** | 144 | /** |
149 | * rtc_update_irq - report RTC periodic, alarm, and/or update irqs | 145 | * rtc_update_irq - report RTC periodic, alarm, and/or update irqs |
150 | * @class_dev: the rtc's class device | 146 | * @rtc: the rtc device |
151 | * @num: how many irqs are being reported (usually one) | 147 | * @num: how many irqs are being reported (usually one) |
152 | * @events: mask of RTC_IRQF with one or more of RTC_PF, RTC_AF, RTC_UF | 148 | * @events: mask of RTC_IRQF with one or more of RTC_PF, RTC_AF, RTC_UF |
153 | * Context: in_interrupt(), irqs blocked | 149 | * Context: in_interrupt(), irqs blocked |
154 | */ | 150 | */ |
155 | void rtc_update_irq(struct class_device *class_dev, | 151 | void rtc_update_irq(struct rtc_device *rtc, |
156 | unsigned long num, unsigned long events) | 152 | unsigned long num, unsigned long events) |
157 | { | 153 | { |
158 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
159 | |||
160 | spin_lock(&rtc->irq_lock); | 154 | spin_lock(&rtc->irq_lock); |
161 | rtc->irq_data = (rtc->irq_data + (num << 8)) | events; | 155 | rtc->irq_data = (rtc->irq_data + (num << 8)) | events; |
162 | spin_unlock(&rtc->irq_lock); | 156 | spin_unlock(&rtc->irq_lock); |
@@ -171,40 +165,43 @@ void rtc_update_irq(struct class_device *class_dev, | |||
171 | } | 165 | } |
172 | EXPORT_SYMBOL_GPL(rtc_update_irq); | 166 | EXPORT_SYMBOL_GPL(rtc_update_irq); |
173 | 167 | ||
174 | struct class_device *rtc_class_open(char *name) | 168 | struct rtc_device *rtc_class_open(char *name) |
175 | { | 169 | { |
176 | struct class_device *class_dev = NULL, | 170 | struct class_device *class_dev_tmp; |
177 | *class_dev_tmp; | 171 | struct rtc_device *rtc = NULL; |
178 | 172 | ||
179 | down(&rtc_class->sem); | 173 | down(&rtc_class->sem); |
180 | list_for_each_entry(class_dev_tmp, &rtc_class->children, node) { | 174 | list_for_each_entry(class_dev_tmp, &rtc_class->children, node) { |
181 | if (strncmp(class_dev_tmp->class_id, name, BUS_ID_SIZE) == 0) { | 175 | if (strncmp(class_dev_tmp->class_id, name, BUS_ID_SIZE) == 0) { |
182 | class_dev = class_device_get(class_dev_tmp); | 176 | class_dev_tmp = class_device_get(class_dev_tmp); |
177 | if (class_dev_tmp) | ||
178 | rtc = to_rtc_device(class_dev_tmp); | ||
183 | break; | 179 | break; |
184 | } | 180 | } |
185 | } | 181 | } |
186 | 182 | ||
187 | if (class_dev) { | 183 | if (rtc) { |
188 | if (!try_module_get(to_rtc_device(class_dev)->owner)) | 184 | if (!try_module_get(rtc->owner)) { |
189 | class_dev = NULL; | 185 | class_device_put(class_dev_tmp); |
186 | rtc = NULL; | ||
187 | } | ||
190 | } | 188 | } |
191 | up(&rtc_class->sem); | 189 | up(&rtc_class->sem); |
192 | 190 | ||
193 | return class_dev; | 191 | return rtc; |
194 | } | 192 | } |
195 | EXPORT_SYMBOL_GPL(rtc_class_open); | 193 | EXPORT_SYMBOL_GPL(rtc_class_open); |
196 | 194 | ||
197 | void rtc_class_close(struct class_device *class_dev) | 195 | void rtc_class_close(struct rtc_device *rtc) |
198 | { | 196 | { |
199 | module_put(to_rtc_device(class_dev)->owner); | 197 | module_put(rtc->owner); |
200 | class_device_put(class_dev); | 198 | class_device_put(&rtc->class_dev); |
201 | } | 199 | } |
202 | EXPORT_SYMBOL_GPL(rtc_class_close); | 200 | EXPORT_SYMBOL_GPL(rtc_class_close); |
203 | 201 | ||
204 | int rtc_irq_register(struct class_device *class_dev, struct rtc_task *task) | 202 | int rtc_irq_register(struct rtc_device *rtc, struct rtc_task *task) |
205 | { | 203 | { |
206 | int retval = -EBUSY; | 204 | int retval = -EBUSY; |
207 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
208 | 205 | ||
209 | if (task == NULL || task->func == NULL) | 206 | if (task == NULL || task->func == NULL) |
210 | return -EINVAL; | 207 | return -EINVAL; |
@@ -220,9 +217,8 @@ int rtc_irq_register(struct class_device *class_dev, struct rtc_task *task) | |||
220 | } | 217 | } |
221 | EXPORT_SYMBOL_GPL(rtc_irq_register); | 218 | EXPORT_SYMBOL_GPL(rtc_irq_register); |
222 | 219 | ||
223 | void rtc_irq_unregister(struct class_device *class_dev, struct rtc_task *task) | 220 | void rtc_irq_unregister(struct rtc_device *rtc, struct rtc_task *task) |
224 | { | 221 | { |
225 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
226 | 222 | ||
227 | spin_lock_irq(&rtc->irq_task_lock); | 223 | spin_lock_irq(&rtc->irq_task_lock); |
228 | if (rtc->irq_task == task) | 224 | if (rtc->irq_task == task) |
@@ -231,11 +227,10 @@ void rtc_irq_unregister(struct class_device *class_dev, struct rtc_task *task) | |||
231 | } | 227 | } |
232 | EXPORT_SYMBOL_GPL(rtc_irq_unregister); | 228 | EXPORT_SYMBOL_GPL(rtc_irq_unregister); |
233 | 229 | ||
234 | int rtc_irq_set_state(struct class_device *class_dev, struct rtc_task *task, int enabled) | 230 | int rtc_irq_set_state(struct rtc_device *rtc, struct rtc_task *task, int enabled) |
235 | { | 231 | { |
236 | int err = 0; | 232 | int err = 0; |
237 | unsigned long flags; | 233 | unsigned long flags; |
238 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
239 | 234 | ||
240 | if (rtc->ops->irq_set_state == NULL) | 235 | if (rtc->ops->irq_set_state == NULL) |
241 | return -ENXIO; | 236 | return -ENXIO; |
@@ -246,17 +241,16 @@ int rtc_irq_set_state(struct class_device *class_dev, struct rtc_task *task, int | |||
246 | spin_unlock_irqrestore(&rtc->irq_task_lock, flags); | 241 | spin_unlock_irqrestore(&rtc->irq_task_lock, flags); |
247 | 242 | ||
248 | if (err == 0) | 243 | if (err == 0) |
249 | err = rtc->ops->irq_set_state(class_dev->dev, enabled); | 244 | err = rtc->ops->irq_set_state(rtc->class_dev.dev, enabled); |
250 | 245 | ||
251 | return err; | 246 | return err; |
252 | } | 247 | } |
253 | EXPORT_SYMBOL_GPL(rtc_irq_set_state); | 248 | EXPORT_SYMBOL_GPL(rtc_irq_set_state); |
254 | 249 | ||
255 | int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int freq) | 250 | int rtc_irq_set_freq(struct rtc_device *rtc, struct rtc_task *task, int freq) |
256 | { | 251 | { |
257 | int err = 0; | 252 | int err = 0; |
258 | unsigned long flags; | 253 | unsigned long flags; |
259 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
260 | 254 | ||
261 | if (rtc->ops->irq_set_freq == NULL) | 255 | if (rtc->ops->irq_set_freq == NULL) |
262 | return -ENXIO; | 256 | return -ENXIO; |
@@ -267,7 +261,7 @@ int rtc_irq_set_freq(struct class_device *class_dev, struct rtc_task *task, int | |||
267 | spin_unlock_irqrestore(&rtc->irq_task_lock, flags); | 261 | spin_unlock_irqrestore(&rtc->irq_task_lock, flags); |
268 | 262 | ||
269 | if (err == 0) { | 263 | if (err == 0) { |
270 | err = rtc->ops->irq_set_freq(class_dev->dev, freq); | 264 | err = rtc->ops->irq_set_freq(rtc->class_dev.dev, freq); |
271 | if (err == 0) | 265 | if (err == 0) |
272 | rtc->irq_freq = freq; | 266 | rtc->irq_freq = freq; |
273 | } | 267 | } |
diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c index ac0e68e2f025..2f06b5f9fb7b 100644 --- a/drivers/rtc/rtc-at91rm9200.c +++ b/drivers/rtc/rtc-at91rm9200.c | |||
@@ -263,7 +263,7 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id) | |||
263 | 263 | ||
264 | at91_sys_write(AT91_RTC_SCCR, rtsr); /* clear status reg */ | 264 | at91_sys_write(AT91_RTC_SCCR, rtsr); /* clear status reg */ |
265 | 265 | ||
266 | rtc_update_irq(&rtc->class_dev, 1, events); | 266 | rtc_update_irq(rtc, 1, events); |
267 | 267 | ||
268 | pr_debug("%s(): num=%ld, events=0x%02lx\n", __FUNCTION__, | 268 | pr_debug("%s(): num=%ld, events=0x%02lx\n", __FUNCTION__, |
269 | events >> 8, events & 0x000000FF); | 269 | events >> 8, events & 0x000000FF); |
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index 7c0d60910077..4b586ebb5814 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c | |||
@@ -203,7 +203,7 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t) | |||
203 | rtc_intr = CMOS_READ(RTC_INTR_FLAGS); | 203 | rtc_intr = CMOS_READ(RTC_INTR_FLAGS); |
204 | rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF; | 204 | rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF; |
205 | if (is_intr(rtc_intr)) | 205 | if (is_intr(rtc_intr)) |
206 | rtc_update_irq(&cmos->rtc->class_dev, 1, rtc_intr); | 206 | rtc_update_irq(cmos->rtc, 1, rtc_intr); |
207 | 207 | ||
208 | /* update alarm */ | 208 | /* update alarm */ |
209 | CMOS_WRITE(hrs, RTC_HOURS_ALARM); | 209 | CMOS_WRITE(hrs, RTC_HOURS_ALARM); |
@@ -223,7 +223,7 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t) | |||
223 | rtc_intr = CMOS_READ(RTC_INTR_FLAGS); | 223 | rtc_intr = CMOS_READ(RTC_INTR_FLAGS); |
224 | rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF; | 224 | rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF; |
225 | if (is_intr(rtc_intr)) | 225 | if (is_intr(rtc_intr)) |
226 | rtc_update_irq(&cmos->rtc->class_dev, 1, rtc_intr); | 226 | rtc_update_irq(cmos->rtc, 1, rtc_intr); |
227 | } | 227 | } |
228 | 228 | ||
229 | spin_unlock_irq(&rtc_lock); | 229 | spin_unlock_irq(&rtc_lock); |
@@ -304,7 +304,7 @@ cmos_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) | |||
304 | rtc_intr = CMOS_READ(RTC_INTR_FLAGS); | 304 | rtc_intr = CMOS_READ(RTC_INTR_FLAGS); |
305 | rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF; | 305 | rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF; |
306 | if (is_intr(rtc_intr)) | 306 | if (is_intr(rtc_intr)) |
307 | rtc_update_irq(&cmos->rtc->class_dev, 1, rtc_intr); | 307 | rtc_update_irq(cmos->rtc, 1, rtc_intr); |
308 | spin_unlock_irqrestore(&rtc_lock, flags); | 308 | spin_unlock_irqrestore(&rtc_lock, flags); |
309 | return 0; | 309 | return 0; |
310 | } | 310 | } |
@@ -471,7 +471,7 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) | |||
471 | if (is_valid_irq(rtc_irq)) | 471 | if (is_valid_irq(rtc_irq)) |
472 | retval = request_irq(rtc_irq, cmos_interrupt, IRQF_DISABLED, | 472 | retval = request_irq(rtc_irq, cmos_interrupt, IRQF_DISABLED, |
473 | cmos_rtc.rtc->class_dev.class_id, | 473 | cmos_rtc.rtc->class_dev.class_id, |
474 | &cmos_rtc.rtc->class_dev); | 474 | cmos_rtc.rtc); |
475 | if (retval < 0) { | 475 | if (retval < 0) { |
476 | dev_dbg(dev, "IRQ %d is already in use\n", rtc_irq); | 476 | dev_dbg(dev, "IRQ %d is already in use\n", rtc_irq); |
477 | goto cleanup1; | 477 | goto cleanup1; |
@@ -555,7 +555,7 @@ static int cmos_suspend(struct device *dev, pm_message_t mesg) | |||
555 | irqstat = CMOS_READ(RTC_INTR_FLAGS); | 555 | irqstat = CMOS_READ(RTC_INTR_FLAGS); |
556 | irqstat &= (tmp & RTC_IRQMASK) | RTC_IRQF; | 556 | irqstat &= (tmp & RTC_IRQMASK) | RTC_IRQF; |
557 | if (is_intr(irqstat)) | 557 | if (is_intr(irqstat)) |
558 | rtc_update_irq(&cmos->rtc->class_dev, 1, irqstat); | 558 | rtc_update_irq(cmos->rtc, 1, irqstat); |
559 | } | 559 | } |
560 | spin_unlock_irq(&rtc_lock); | 560 | spin_unlock_irq(&rtc_lock); |
561 | 561 | ||
@@ -590,7 +590,7 @@ static int cmos_resume(struct device *dev) | |||
590 | tmp = CMOS_READ(RTC_INTR_FLAGS); | 590 | tmp = CMOS_READ(RTC_INTR_FLAGS); |
591 | tmp &= (cmos->suspend_ctrl & RTC_IRQMASK) | RTC_IRQF; | 591 | tmp &= (cmos->suspend_ctrl & RTC_IRQMASK) | RTC_IRQF; |
592 | if (is_intr(tmp)) | 592 | if (is_intr(tmp)) |
593 | rtc_update_irq(&cmos->rtc->class_dev, 1, tmp); | 593 | rtc_update_irq(cmos->rtc, 1, tmp); |
594 | spin_unlock_irq(&rtc_lock); | 594 | spin_unlock_irq(&rtc_lock); |
595 | } | 595 | } |
596 | 596 | ||
diff --git a/drivers/rtc/rtc-core.h b/drivers/rtc/rtc-core.h index c3c495ed1869..c9891423a468 100644 --- a/drivers/rtc/rtc-core.h +++ b/drivers/rtc/rtc-core.h | |||
@@ -1,3 +1,5 @@ | |||
1 | extern int rtc_interface_register(struct class_interface *intf); | ||
2 | |||
1 | #ifdef CONFIG_RTC_INTF_DEV | 3 | #ifdef CONFIG_RTC_INTF_DEV |
2 | 4 | ||
3 | extern void __init rtc_dev_init(void); | 5 | extern void __init rtc_dev_init(void); |
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c index 3fa6138523b5..623cb8d06b02 100644 --- a/drivers/rtc/rtc-dev.c +++ b/drivers/rtc/rtc-dev.c | |||
@@ -32,7 +32,7 @@ static int rtc_dev_open(struct inode *inode, struct file *file) | |||
32 | if (!(mutex_trylock(&rtc->char_lock))) | 32 | if (!(mutex_trylock(&rtc->char_lock))) |
33 | return -EBUSY; | 33 | return -EBUSY; |
34 | 34 | ||
35 | file->private_data = &rtc->class_dev; | 35 | file->private_data = rtc; |
36 | 36 | ||
37 | err = ops->open ? ops->open(rtc->class_dev.dev) : 0; | 37 | err = ops->open ? ops->open(rtc->class_dev.dev) : 0; |
38 | if (err == 0) { | 38 | if (err == 0) { |
@@ -61,7 +61,7 @@ static void rtc_uie_task(struct work_struct *work) | |||
61 | int num = 0; | 61 | int num = 0; |
62 | int err; | 62 | int err; |
63 | 63 | ||
64 | err = rtc_read_time(&rtc->class_dev, &tm); | 64 | err = rtc_read_time(rtc, &tm); |
65 | 65 | ||
66 | local_irq_disable(); | 66 | local_irq_disable(); |
67 | spin_lock(&rtc->irq_lock); | 67 | spin_lock(&rtc->irq_lock); |
@@ -79,7 +79,7 @@ static void rtc_uie_task(struct work_struct *work) | |||
79 | } | 79 | } |
80 | spin_unlock(&rtc->irq_lock); | 80 | spin_unlock(&rtc->irq_lock); |
81 | if (num) | 81 | if (num) |
82 | rtc_update_irq(&rtc->class_dev, num, RTC_UF | RTC_IRQF); | 82 | rtc_update_irq(rtc, num, RTC_UF | RTC_IRQF); |
83 | local_irq_enable(); | 83 | local_irq_enable(); |
84 | } | 84 | } |
85 | static void rtc_uie_timer(unsigned long data) | 85 | static void rtc_uie_timer(unsigned long data) |
@@ -121,7 +121,7 @@ static int set_uie(struct rtc_device *rtc) | |||
121 | struct rtc_time tm; | 121 | struct rtc_time tm; |
122 | int err; | 122 | int err; |
123 | 123 | ||
124 | err = rtc_read_time(&rtc->class_dev, &tm); | 124 | err = rtc_read_time(rtc, &tm); |
125 | if (err) | 125 | if (err) |
126 | return err; | 126 | return err; |
127 | spin_lock_irq(&rtc->irq_lock); | 127 | spin_lock_irq(&rtc->irq_lock); |
@@ -210,8 +210,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
210 | unsigned int cmd, unsigned long arg) | 210 | unsigned int cmd, unsigned long arg) |
211 | { | 211 | { |
212 | int err = 0; | 212 | int err = 0; |
213 | struct class_device *class_dev = file->private_data; | 213 | struct rtc_device *rtc = file->private_data; |
214 | struct rtc_device *rtc = to_rtc_device(class_dev); | ||
215 | const struct rtc_class_ops *ops = rtc->ops; | 214 | const struct rtc_class_ops *ops = rtc->ops; |
216 | struct rtc_time tm; | 215 | struct rtc_time tm; |
217 | struct rtc_wkalrm alarm; | 216 | struct rtc_wkalrm alarm; |
@@ -252,7 +251,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
252 | 251 | ||
253 | /* try the driver's ioctl interface */ | 252 | /* try the driver's ioctl interface */ |
254 | if (ops->ioctl) { | 253 | if (ops->ioctl) { |
255 | err = ops->ioctl(class_dev->dev, cmd, arg); | 254 | err = ops->ioctl(rtc->class_dev.dev, cmd, arg); |
256 | if (err != -ENOIOCTLCMD) | 255 | if (err != -ENOIOCTLCMD) |
257 | return err; | 256 | return err; |
258 | } | 257 | } |
@@ -264,7 +263,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
264 | 263 | ||
265 | switch (cmd) { | 264 | switch (cmd) { |
266 | case RTC_ALM_READ: | 265 | case RTC_ALM_READ: |
267 | err = rtc_read_alarm(class_dev, &alarm); | 266 | err = rtc_read_alarm(rtc, &alarm); |
268 | if (err < 0) | 267 | if (err < 0) |
269 | return err; | 268 | return err; |
270 | 269 | ||
@@ -284,11 +283,11 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
284 | alarm.time.tm_wday = -1; | 283 | alarm.time.tm_wday = -1; |
285 | alarm.time.tm_yday = -1; | 284 | alarm.time.tm_yday = -1; |
286 | alarm.time.tm_isdst = -1; | 285 | alarm.time.tm_isdst = -1; |
287 | err = rtc_set_alarm(class_dev, &alarm); | 286 | err = rtc_set_alarm(rtc, &alarm); |
288 | break; | 287 | break; |
289 | 288 | ||
290 | case RTC_RD_TIME: | 289 | case RTC_RD_TIME: |
291 | err = rtc_read_time(class_dev, &tm); | 290 | err = rtc_read_time(rtc, &tm); |
292 | if (err < 0) | 291 | if (err < 0) |
293 | return err; | 292 | return err; |
294 | 293 | ||
@@ -300,7 +299,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
300 | if (copy_from_user(&tm, uarg, sizeof(tm))) | 299 | if (copy_from_user(&tm, uarg, sizeof(tm))) |
301 | return -EFAULT; | 300 | return -EFAULT; |
302 | 301 | ||
303 | err = rtc_set_time(class_dev, &tm); | 302 | err = rtc_set_time(rtc, &tm); |
304 | break; | 303 | break; |
305 | 304 | ||
306 | case RTC_IRQP_READ: | 305 | case RTC_IRQP_READ: |
@@ -310,7 +309,7 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
310 | 309 | ||
311 | case RTC_IRQP_SET: | 310 | case RTC_IRQP_SET: |
312 | if (ops->irq_set_freq) | 311 | if (ops->irq_set_freq) |
313 | err = rtc_irq_set_freq(class_dev, rtc->irq_task, arg); | 312 | err = rtc_irq_set_freq(rtc, rtc->irq_task, arg); |
314 | break; | 313 | break; |
315 | 314 | ||
316 | #if 0 | 315 | #if 0 |
@@ -336,11 +335,11 @@ static int rtc_dev_ioctl(struct inode *inode, struct file *file, | |||
336 | if (copy_from_user(&alarm, uarg, sizeof(alarm))) | 335 | if (copy_from_user(&alarm, uarg, sizeof(alarm))) |
337 | return -EFAULT; | 336 | return -EFAULT; |
338 | 337 | ||
339 | err = rtc_set_alarm(class_dev, &alarm); | 338 | err = rtc_set_alarm(rtc, &alarm); |
340 | break; | 339 | break; |
341 | 340 | ||
342 | case RTC_WKALM_RD: | 341 | case RTC_WKALM_RD: |
343 | err = rtc_read_alarm(class_dev, &alarm); | 342 | err = rtc_read_alarm(rtc, &alarm); |
344 | if (err < 0) | 343 | if (err < 0) |
345 | return err; | 344 | return err; |
346 | 345 | ||
diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c index e27176c0e18f..afa64c7fa2e2 100644 --- a/drivers/rtc/rtc-ds1553.c +++ b/drivers/rtc/rtc-ds1553.c | |||
@@ -203,7 +203,7 @@ static irqreturn_t ds1553_rtc_interrupt(int irq, void *dev_id) | |||
203 | events |= RTC_UF; | 203 | events |= RTC_UF; |
204 | else | 204 | else |
205 | events |= RTC_AF; | 205 | events |= RTC_AF; |
206 | rtc_update_irq(&pdata->rtc->class_dev, 1, events); | 206 | rtc_update_irq(pdata->rtc, 1, events); |
207 | return IRQ_HANDLED; | 207 | return IRQ_HANDLED; |
208 | } | 208 | } |
209 | 209 | ||
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index 9de8d67f4f8d..4ca3a5182cdb 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c | |||
@@ -124,7 +124,7 @@ static void rtc_wait_not_busy(void) | |||
124 | /* now we have ~15 usec to read/write various registers */ | 124 | /* now we have ~15 usec to read/write various registers */ |
125 | } | 125 | } |
126 | 126 | ||
127 | static irqreturn_t rtc_irq(int irq, void *class_dev) | 127 | static irqreturn_t rtc_irq(int irq, void *rtc) |
128 | { | 128 | { |
129 | unsigned long events = 0; | 129 | unsigned long events = 0; |
130 | u8 irq_data; | 130 | u8 irq_data; |
@@ -141,7 +141,7 @@ static irqreturn_t rtc_irq(int irq, void *class_dev) | |||
141 | if (irq_data & OMAP_RTC_STATUS_1S_EVENT) | 141 | if (irq_data & OMAP_RTC_STATUS_1S_EVENT) |
142 | events |= RTC_IRQF | RTC_UF; | 142 | events |= RTC_IRQF | RTC_UF; |
143 | 143 | ||
144 | rtc_update_irq(class_dev, 1, events); | 144 | rtc_update_irq(rtc, 1, events); |
145 | 145 | ||
146 | return IRQ_HANDLED; | 146 | return IRQ_HANDLED; |
147 | } | 147 | } |
diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c index f13daa9fecaa..e4bf68ca96f7 100644 --- a/drivers/rtc/rtc-pl031.c +++ b/drivers/rtc/rtc-pl031.c | |||
@@ -51,7 +51,7 @@ static irqreturn_t pl031_interrupt(int irq, void *dev_id) | |||
51 | { | 51 | { |
52 | struct rtc_device *rtc = dev_id; | 52 | struct rtc_device *rtc = dev_id; |
53 | 53 | ||
54 | rtc_update_irq(&rtc->class_dev, 1, RTC_AF); | 54 | rtc_update_irq(rtc, 1, RTC_AF); |
55 | 55 | ||
56 | return IRQ_HANDLED; | 56 | return IRQ_HANDLED; |
57 | } | 57 | } |
diff --git a/drivers/rtc/rtc-proc.c b/drivers/rtc/rtc-proc.c index 1bd624fc685c..195be6587b30 100644 --- a/drivers/rtc/rtc-proc.c +++ b/drivers/rtc/rtc-proc.c | |||
@@ -16,18 +16,21 @@ | |||
16 | #include <linux/proc_fs.h> | 16 | #include <linux/proc_fs.h> |
17 | #include <linux/seq_file.h> | 17 | #include <linux/seq_file.h> |
18 | 18 | ||
19 | #include "rtc-core.h" | ||
20 | |||
21 | |||
19 | static struct class_device *rtc_dev = NULL; | 22 | static struct class_device *rtc_dev = NULL; |
20 | static DEFINE_MUTEX(rtc_lock); | 23 | static DEFINE_MUTEX(rtc_lock); |
21 | 24 | ||
22 | static int rtc_proc_show(struct seq_file *seq, void *offset) | 25 | static int rtc_proc_show(struct seq_file *seq, void *offset) |
23 | { | 26 | { |
24 | int err; | 27 | int err; |
25 | struct class_device *class_dev = seq->private; | 28 | struct rtc_device *rtc = seq->private; |
26 | const struct rtc_class_ops *ops = to_rtc_device(class_dev)->ops; | 29 | const struct rtc_class_ops *ops = rtc->ops; |
27 | struct rtc_wkalrm alrm; | 30 | struct rtc_wkalrm alrm; |
28 | struct rtc_time tm; | 31 | struct rtc_time tm; |
29 | 32 | ||
30 | err = rtc_read_time(class_dev, &tm); | 33 | err = rtc_read_time(rtc, &tm); |
31 | if (err == 0) { | 34 | if (err == 0) { |
32 | seq_printf(seq, | 35 | seq_printf(seq, |
33 | "rtc_time\t: %02d:%02d:%02d\n" | 36 | "rtc_time\t: %02d:%02d:%02d\n" |
@@ -36,7 +39,7 @@ static int rtc_proc_show(struct seq_file *seq, void *offset) | |||
36 | tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday); | 39 | tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday); |
37 | } | 40 | } |
38 | 41 | ||
39 | err = rtc_read_alarm(class_dev, &alrm); | 42 | err = rtc_read_alarm(rtc, &alrm); |
40 | if (err == 0) { | 43 | if (err == 0) { |
41 | seq_printf(seq, "alrm_time\t: "); | 44 | seq_printf(seq, "alrm_time\t: "); |
42 | if ((unsigned int)alrm.time.tm_hour <= 24) | 45 | if ((unsigned int)alrm.time.tm_hour <= 24) |
@@ -74,19 +77,19 @@ static int rtc_proc_show(struct seq_file *seq, void *offset) | |||
74 | seq_printf(seq, "24hr\t\t: yes\n"); | 77 | seq_printf(seq, "24hr\t\t: yes\n"); |
75 | 78 | ||
76 | if (ops->proc) | 79 | if (ops->proc) |
77 | ops->proc(class_dev->dev, seq); | 80 | ops->proc(rtc->class_dev.dev, seq); |
78 | 81 | ||
79 | return 0; | 82 | return 0; |
80 | } | 83 | } |
81 | 84 | ||
82 | static int rtc_proc_open(struct inode *inode, struct file *file) | 85 | static int rtc_proc_open(struct inode *inode, struct file *file) |
83 | { | 86 | { |
84 | struct class_device *class_dev = PDE(inode)->data; | 87 | struct rtc_device *rtc = PDE(inode)->data; |
85 | 88 | ||
86 | if (!try_module_get(THIS_MODULE)) | 89 | if (!try_module_get(THIS_MODULE)) |
87 | return -ENODEV; | 90 | return -ENODEV; |
88 | 91 | ||
89 | return single_open(file, rtc_proc_show, class_dev); | 92 | return single_open(file, rtc_proc_show, rtc); |
90 | } | 93 | } |
91 | 94 | ||
92 | static int rtc_proc_release(struct inode *inode, struct file *file) | 95 | static int rtc_proc_release(struct inode *inode, struct file *file) |
@@ -118,7 +121,7 @@ static int rtc_proc_add_device(struct class_device *class_dev, | |||
118 | 121 | ||
119 | ent->proc_fops = &rtc_proc_fops; | 122 | ent->proc_fops = &rtc_proc_fops; |
120 | ent->owner = rtc->owner; | 123 | ent->owner = rtc->owner; |
121 | ent->data = class_dev; | 124 | ent->data = rtc; |
122 | 125 | ||
123 | dev_dbg(class_dev->dev, "rtc intf: proc\n"); | 126 | dev_dbg(class_dev->dev, "rtc intf: proc\n"); |
124 | } | 127 | } |
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index 9a79a24a7487..3617c970caaa 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c | |||
@@ -50,7 +50,7 @@ static irqreturn_t s3c_rtc_alarmirq(int irq, void *id) | |||
50 | { | 50 | { |
51 | struct rtc_device *rdev = id; | 51 | struct rtc_device *rdev = id; |
52 | 52 | ||
53 | rtc_update_irq(&rdev->class_dev, 1, RTC_AF | RTC_IRQF); | 53 | rtc_update_irq(rdev, 1, RTC_AF | RTC_IRQF); |
54 | return IRQ_HANDLED; | 54 | return IRQ_HANDLED; |
55 | } | 55 | } |
56 | 56 | ||
@@ -58,7 +58,7 @@ static irqreturn_t s3c_rtc_tickirq(int irq, void *id) | |||
58 | { | 58 | { |
59 | struct rtc_device *rdev = id; | 59 | struct rtc_device *rdev = id; |
60 | 60 | ||
61 | rtc_update_irq(&rdev->class_dev, tick_count++, RTC_PF | RTC_IRQF); | 61 | rtc_update_irq(rdev, tick_count++, RTC_PF | RTC_IRQF); |
62 | return IRQ_HANDLED; | 62 | return IRQ_HANDLED; |
63 | } | 63 | } |
64 | 64 | ||
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index 677bae820dc3..0918b787c4dd 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c | |||
@@ -93,7 +93,7 @@ static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id) | |||
93 | if (rtsr & RTSR_HZ) | 93 | if (rtsr & RTSR_HZ) |
94 | events |= RTC_UF | RTC_IRQF; | 94 | events |= RTC_UF | RTC_IRQF; |
95 | 95 | ||
96 | rtc_update_irq(&rtc->class_dev, 1, events); | 96 | rtc_update_irq(rtc, 1, events); |
97 | 97 | ||
98 | if (rtsr & RTSR_AL && rtc_periodic_alarm(&rtc_alarm)) | 98 | if (rtsr & RTSR_AL && rtc_periodic_alarm(&rtc_alarm)) |
99 | rtc_update_alarm(&rtc_alarm); | 99 | rtc_update_alarm(&rtc_alarm); |
@@ -119,7 +119,7 @@ static irqreturn_t timer1_interrupt(int irq, void *dev_id) | |||
119 | */ | 119 | */ |
120 | OSSR = OSSR_M1; /* clear match on timer1 */ | 120 | OSSR = OSSR_M1; /* clear match on timer1 */ |
121 | 121 | ||
122 | rtc_update_irq(&rtc->class_dev, rtc_timer1_count, RTC_PF | RTC_IRQF); | 122 | rtc_update_irq(rtc, rtc_timer1_count, RTC_PF | RTC_IRQF); |
123 | 123 | ||
124 | if (rtc_timer1_count == 1) | 124 | if (rtc_timer1_count == 1) |
125 | rtc_timer1_count = (rtc_freq * ((1<<30)/(TIMER_FREQ>>2))); | 125 | rtc_timer1_count = (rtc_freq * ((1<<30)/(TIMER_FREQ>>2))); |
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c index 198b9f22fbff..6abf4811958c 100644 --- a/drivers/rtc/rtc-sh.c +++ b/drivers/rtc/rtc-sh.c | |||
@@ -104,7 +104,7 @@ static irqreturn_t sh_rtc_interrupt(int irq, void *dev_id) | |||
104 | 104 | ||
105 | writeb(tmp, rtc->regbase + RCR1); | 105 | writeb(tmp, rtc->regbase + RCR1); |
106 | 106 | ||
107 | rtc_update_irq(&rtc->rtc_dev->class_dev, 1, events); | 107 | rtc_update_irq(&rtc->rtc_dev, 1, events); |
108 | 108 | ||
109 | spin_unlock(&rtc->lock); | 109 | spin_unlock(&rtc->lock); |
110 | 110 | ||
@@ -139,7 +139,7 @@ static irqreturn_t sh_rtc_alarm(int irq, void *dev_id) | |||
139 | 139 | ||
140 | rtc->rearm_aie = 1; | 140 | rtc->rearm_aie = 1; |
141 | 141 | ||
142 | rtc_update_irq(&rtc->rtc_dev->class_dev, 1, events); | 142 | rtc_update_irq(&rtc->rtc_dev, 1, events); |
143 | } | 143 | } |
144 | 144 | ||
145 | spin_unlock(&rtc->lock); | 145 | spin_unlock(&rtc->lock); |
@@ -153,7 +153,7 @@ static irqreturn_t sh_rtc_periodic(int irq, void *dev_id) | |||
153 | 153 | ||
154 | spin_lock(&rtc->lock); | 154 | spin_lock(&rtc->lock); |
155 | 155 | ||
156 | rtc_update_irq(&rtc->rtc_dev->class_dev, 1, RTC_PF | RTC_IRQF); | 156 | rtc_update_irq(&rtc->rtc_dev, 1, RTC_PF | RTC_IRQF); |
157 | 157 | ||
158 | spin_unlock(&rtc->lock); | 158 | spin_unlock(&rtc->lock); |
159 | 159 | ||
diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c index 899ab8c514fa..97444b45cc26 100644 --- a/drivers/rtc/rtc-sysfs.c +++ b/drivers/rtc/rtc-sysfs.c | |||
@@ -12,6 +12,9 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/rtc.h> | 13 | #include <linux/rtc.h> |
14 | 14 | ||
15 | #include "rtc-core.h" | ||
16 | |||
17 | |||
15 | /* device attributes */ | 18 | /* device attributes */ |
16 | 19 | ||
17 | static ssize_t rtc_sysfs_show_name(struct class_device *dev, char *buf) | 20 | static ssize_t rtc_sysfs_show_name(struct class_device *dev, char *buf) |
@@ -25,7 +28,7 @@ static ssize_t rtc_sysfs_show_date(struct class_device *dev, char *buf) | |||
25 | ssize_t retval; | 28 | ssize_t retval; |
26 | struct rtc_time tm; | 29 | struct rtc_time tm; |
27 | 30 | ||
28 | retval = rtc_read_time(dev, &tm); | 31 | retval = rtc_read_time(to_rtc_device(dev), &tm); |
29 | if (retval == 0) { | 32 | if (retval == 0) { |
30 | retval = sprintf(buf, "%04d-%02d-%02d\n", | 33 | retval = sprintf(buf, "%04d-%02d-%02d\n", |
31 | tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday); | 34 | tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday); |
@@ -40,7 +43,7 @@ static ssize_t rtc_sysfs_show_time(struct class_device *dev, char *buf) | |||
40 | ssize_t retval; | 43 | ssize_t retval; |
41 | struct rtc_time tm; | 44 | struct rtc_time tm; |
42 | 45 | ||
43 | retval = rtc_read_time(dev, &tm); | 46 | retval = rtc_read_time(to_rtc_device(dev), &tm); |
44 | if (retval == 0) { | 47 | if (retval == 0) { |
45 | retval = sprintf(buf, "%02d:%02d:%02d\n", | 48 | retval = sprintf(buf, "%02d:%02d:%02d\n", |
46 | tm.tm_hour, tm.tm_min, tm.tm_sec); | 49 | tm.tm_hour, tm.tm_min, tm.tm_sec); |
@@ -55,7 +58,7 @@ static ssize_t rtc_sysfs_show_since_epoch(struct class_device *dev, char *buf) | |||
55 | ssize_t retval; | 58 | ssize_t retval; |
56 | struct rtc_time tm; | 59 | struct rtc_time tm; |
57 | 60 | ||
58 | retval = rtc_read_time(dev, &tm); | 61 | retval = rtc_read_time(to_rtc_device(dev), &tm); |
59 | if (retval == 0) { | 62 | if (retval == 0) { |
60 | unsigned long time; | 63 | unsigned long time; |
61 | rtc_tm_to_time(&tm, &time); | 64 | rtc_tm_to_time(&tm, &time); |
@@ -94,7 +97,7 @@ rtc_sysfs_show_wakealarm(struct class_device *dev, char *buf) | |||
94 | * REVISIT maybe we should require RTC implementations to | 97 | * REVISIT maybe we should require RTC implementations to |
95 | * disable the RTC alarm after it triggers, for uniformity. | 98 | * disable the RTC alarm after it triggers, for uniformity. |
96 | */ | 99 | */ |
97 | retval = rtc_read_alarm(dev, &alm); | 100 | retval = rtc_read_alarm(to_rtc_device(dev), &alm); |
98 | if (retval == 0 && alm.enabled) { | 101 | if (retval == 0 && alm.enabled) { |
99 | rtc_tm_to_time(&alm.time, &alarm); | 102 | rtc_tm_to_time(&alm.time, &alarm); |
100 | retval = sprintf(buf, "%lu\n", alarm); | 103 | retval = sprintf(buf, "%lu\n", alarm); |
@@ -109,11 +112,12 @@ rtc_sysfs_set_wakealarm(struct class_device *dev, const char *buf, size_t n) | |||
109 | ssize_t retval; | 112 | ssize_t retval; |
110 | unsigned long now, alarm; | 113 | unsigned long now, alarm; |
111 | struct rtc_wkalrm alm; | 114 | struct rtc_wkalrm alm; |
115 | struct rtc_device *rtc = to_rtc_device(dev); | ||
112 | 116 | ||
113 | /* Only request alarms that trigger in the future. Disable them | 117 | /* Only request alarms that trigger in the future. Disable them |
114 | * by writing another time, e.g. 0 meaning Jan 1 1970 UTC. | 118 | * by writing another time, e.g. 0 meaning Jan 1 1970 UTC. |
115 | */ | 119 | */ |
116 | retval = rtc_read_time(dev, &alm.time); | 120 | retval = rtc_read_time(rtc, &alm.time); |
117 | if (retval < 0) | 121 | if (retval < 0) |
118 | return retval; | 122 | return retval; |
119 | rtc_tm_to_time(&alm.time, &now); | 123 | rtc_tm_to_time(&alm.time, &now); |
@@ -124,7 +128,7 @@ rtc_sysfs_set_wakealarm(struct class_device *dev, const char *buf, size_t n) | |||
124 | * entirely prevent that here, without even the minimal | 128 | * entirely prevent that here, without even the minimal |
125 | * locking from the /dev/rtcN api. | 129 | * locking from the /dev/rtcN api. |
126 | */ | 130 | */ |
127 | retval = rtc_read_alarm(dev, &alm); | 131 | retval = rtc_read_alarm(rtc, &alm); |
128 | if (retval < 0) | 132 | if (retval < 0) |
129 | return retval; | 133 | return retval; |
130 | if (alm.enabled) | 134 | if (alm.enabled) |
@@ -141,7 +145,7 @@ rtc_sysfs_set_wakealarm(struct class_device *dev, const char *buf, size_t n) | |||
141 | } | 145 | } |
142 | rtc_time_to_tm(alarm, &alm.time); | 146 | rtc_time_to_tm(alarm, &alm.time); |
143 | 147 | ||
144 | retval = rtc_set_alarm(dev, &alm); | 148 | retval = rtc_set_alarm(rtc, &alm); |
145 | return (retval < 0) ? retval : n; | 149 | return (retval < 0) ? retval : n; |
146 | } | 150 | } |
147 | static const CLASS_DEVICE_ATTR(wakealarm, S_IRUGO | S_IWUSR, | 151 | static const CLASS_DEVICE_ATTR(wakealarm, S_IRUGO | S_IWUSR, |
diff --git a/drivers/rtc/rtc-test.c b/drivers/rtc/rtc-test.c index f50a1b8e1607..254c9fce27da 100644 --- a/drivers/rtc/rtc-test.c +++ b/drivers/rtc/rtc-test.c | |||
@@ -101,11 +101,11 @@ static ssize_t test_irq_store(struct device *dev, | |||
101 | retval = count; | 101 | retval = count; |
102 | local_irq_disable(); | 102 | local_irq_disable(); |
103 | if (strncmp(buf, "tick", 4) == 0) | 103 | if (strncmp(buf, "tick", 4) == 0) |
104 | rtc_update_irq(&rtc->class_dev, 1, RTC_PF | RTC_IRQF); | 104 | rtc_update_irq(rtc, 1, RTC_PF | RTC_IRQF); |
105 | else if (strncmp(buf, "alarm", 5) == 0) | 105 | else if (strncmp(buf, "alarm", 5) == 0) |
106 | rtc_update_irq(&rtc->class_dev, 1, RTC_AF | RTC_IRQF); | 106 | rtc_update_irq(rtc, 1, RTC_AF | RTC_IRQF); |
107 | else if (strncmp(buf, "update", 6) == 0) | 107 | else if (strncmp(buf, "update", 6) == 0) |
108 | rtc_update_irq(&rtc->class_dev, 1, RTC_UF | RTC_IRQF); | 108 | rtc_update_irq(rtc, 1, RTC_UF | RTC_IRQF); |
109 | else | 109 | else |
110 | retval = -EINVAL; | 110 | retval = -EINVAL; |
111 | local_irq_enable(); | 111 | local_irq_enable(); |
diff --git a/drivers/rtc/rtc-vr41xx.c b/drivers/rtc/rtc-vr41xx.c index e40322b71938..e9f9c5489468 100644 --- a/drivers/rtc/rtc-vr41xx.c +++ b/drivers/rtc/rtc-vr41xx.c | |||
@@ -275,7 +275,7 @@ static irqreturn_t elapsedtime_interrupt(int irq, void *dev_id) | |||
275 | 275 | ||
276 | rtc2_write(RTCINTREG, ELAPSEDTIME_INT); | 276 | rtc2_write(RTCINTREG, ELAPSEDTIME_INT); |
277 | 277 | ||
278 | rtc_update_irq(&rtc->class_dev, 1, RTC_AF); | 278 | rtc_update_irq(rtc, 1, RTC_AF); |
279 | 279 | ||
280 | return IRQ_HANDLED; | 280 | return IRQ_HANDLED; |
281 | } | 281 | } |
@@ -291,7 +291,7 @@ static irqreturn_t rtclong1_interrupt(int irq, void *dev_id) | |||
291 | rtc1_write(RTCL1LREG, count); | 291 | rtc1_write(RTCL1LREG, count); |
292 | rtc1_write(RTCL1HREG, count >> 16); | 292 | rtc1_write(RTCL1HREG, count >> 16); |
293 | 293 | ||
294 | rtc_update_irq(&rtc->class_dev, 1, RTC_PF); | 294 | rtc_update_irq(rtc, 1, RTC_PF); |
295 | 295 | ||
296 | return IRQ_HANDLED; | 296 | return IRQ_HANDLED; |
297 | } | 297 | } |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index f662ae1aa621..73ccd8fcc0c7 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
@@ -4,7 +4,7 @@ | |||
4 | * service. It is used with both the legacy mc146818 and also EFI | 4 | * service. It is used with both the legacy mc146818 and also EFI |
5 | * Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out | 5 | * Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out |
6 | * from <linux/mc146818rtc.h> to this file for 2.4 kernels. | 6 | * from <linux/mc146818rtc.h> to this file for 2.4 kernels. |
7 | * | 7 | * |
8 | * Copyright (C) 1999 Hewlett-Packard Co. | 8 | * Copyright (C) 1999 Hewlett-Packard Co. |
9 | * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com> | 9 | * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com> |
10 | */ | 10 | */ |
@@ -13,7 +13,7 @@ | |||
13 | 13 | ||
14 | /* | 14 | /* |
15 | * The struct used to pass data via the following ioctl. Similar to the | 15 | * The struct used to pass data via the following ioctl. Similar to the |
16 | * struct tm in <time.h>, but it needs to be here so that the kernel | 16 | * struct tm in <time.h>, but it needs to be here so that the kernel |
17 | * source is self contained, allowing cross-compiles, etc. etc. | 17 | * source is self contained, allowing cross-compiles, etc. etc. |
18 | */ | 18 | */ |
19 | 19 | ||
@@ -50,7 +50,7 @@ struct rtc_wkalrm { | |||
50 | * pll_value*pll_posmult/pll_clock | 50 | * pll_value*pll_posmult/pll_clock |
51 | * -ve pll_value means clock will run slower by | 51 | * -ve pll_value means clock will run slower by |
52 | * pll_value*pll_negmult/pll_clock | 52 | * pll_value*pll_negmult/pll_clock |
53 | */ | 53 | */ |
54 | 54 | ||
55 | struct rtc_pll_info { | 55 | struct rtc_pll_info { |
56 | int pll_ctrl; /* placeholder for fancier control */ | 56 | int pll_ctrl; /* placeholder for fancier control */ |
@@ -174,29 +174,28 @@ extern struct rtc_device *rtc_device_register(const char *name, | |||
174 | struct device *dev, | 174 | struct device *dev, |
175 | const struct rtc_class_ops *ops, | 175 | const struct rtc_class_ops *ops, |
176 | struct module *owner); | 176 | struct module *owner); |
177 | extern void rtc_device_unregister(struct rtc_device *rdev); | 177 | extern void rtc_device_unregister(struct rtc_device *rtc); |
178 | extern int rtc_interface_register(struct class_interface *intf); | ||
179 | 178 | ||
180 | extern int rtc_read_time(struct class_device *class_dev, struct rtc_time *tm); | 179 | extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm); |
181 | extern int rtc_set_time(struct class_device *class_dev, struct rtc_time *tm); | 180 | extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm); |
182 | extern int rtc_set_mmss(struct class_device *class_dev, unsigned long secs); | 181 | extern int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs); |
183 | extern int rtc_read_alarm(struct class_device *class_dev, | 182 | extern int rtc_read_alarm(struct rtc_device *rtc, |
184 | struct rtc_wkalrm *alrm); | 183 | struct rtc_wkalrm *alrm); |
185 | extern int rtc_set_alarm(struct class_device *class_dev, | 184 | extern int rtc_set_alarm(struct rtc_device *rtc, |
186 | struct rtc_wkalrm *alrm); | 185 | struct rtc_wkalrm *alrm); |
187 | extern void rtc_update_irq(struct class_device *class_dev, | 186 | extern void rtc_update_irq(struct rtc_device *rtc, |
188 | unsigned long num, unsigned long events); | 187 | unsigned long num, unsigned long events); |
189 | 188 | ||
190 | extern struct class_device *rtc_class_open(char *name); | 189 | extern struct rtc_device *rtc_class_open(char *name); |
191 | extern void rtc_class_close(struct class_device *class_dev); | 190 | extern void rtc_class_close(struct rtc_device *rtc); |
192 | 191 | ||
193 | extern int rtc_irq_register(struct class_device *class_dev, | 192 | extern int rtc_irq_register(struct rtc_device *rtc, |
194 | struct rtc_task *task); | 193 | struct rtc_task *task); |
195 | extern void rtc_irq_unregister(struct class_device *class_dev, | 194 | extern void rtc_irq_unregister(struct rtc_device *rtc, |
196 | struct rtc_task *task); | 195 | struct rtc_task *task); |
197 | extern int rtc_irq_set_state(struct class_device *class_dev, | 196 | extern int rtc_irq_set_state(struct rtc_device *rtc, |
198 | struct rtc_task *task, int enabled); | 197 | struct rtc_task *task, int enabled); |
199 | extern int rtc_irq_set_freq(struct class_device *class_dev, | 198 | extern int rtc_irq_set_freq(struct rtc_device *rtc, |
200 | struct rtc_task *task, int freq); | 199 | struct rtc_task *task, int freq); |
201 | 200 | ||
202 | typedef struct rtc_task { | 201 | typedef struct rtc_task { |