diff options
Diffstat (limited to 'drivers/rtc/rtc-omap.c')
-rw-r--r-- | drivers/rtc/rtc-omap.c | 41 |
1 files changed, 6 insertions, 35 deletions
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index e72b523c79a5..bcae8dd41496 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c | |||
@@ -135,42 +135,17 @@ static irqreturn_t rtc_irq(int irq, void *rtc) | |||
135 | return IRQ_HANDLED; | 135 | return IRQ_HANDLED; |
136 | } | 136 | } |
137 | 137 | ||
138 | #ifdef CONFIG_RTC_INTF_DEV | 138 | static int omap_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) |
139 | |||
140 | static int | ||
141 | omap_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) | ||
142 | { | 139 | { |
143 | u8 reg; | 140 | u8 reg; |
144 | 141 | ||
145 | switch (cmd) { | ||
146 | case RTC_AIE_OFF: | ||
147 | case RTC_AIE_ON: | ||
148 | case RTC_UIE_OFF: | ||
149 | case RTC_UIE_ON: | ||
150 | break; | ||
151 | default: | ||
152 | return -ENOIOCTLCMD; | ||
153 | } | ||
154 | |||
155 | local_irq_disable(); | 142 | local_irq_disable(); |
156 | rtc_wait_not_busy(); | 143 | rtc_wait_not_busy(); |
157 | reg = rtc_read(OMAP_RTC_INTERRUPTS_REG); | 144 | reg = rtc_read(OMAP_RTC_INTERRUPTS_REG); |
158 | switch (cmd) { | 145 | if (enabled) |
159 | /* AIE = Alarm Interrupt Enable */ | ||
160 | case RTC_AIE_OFF: | ||
161 | reg &= ~OMAP_RTC_INTERRUPTS_IT_ALARM; | ||
162 | break; | ||
163 | case RTC_AIE_ON: | ||
164 | reg |= OMAP_RTC_INTERRUPTS_IT_ALARM; | 146 | reg |= OMAP_RTC_INTERRUPTS_IT_ALARM; |
165 | break; | 147 | else |
166 | /* UIE = Update Interrupt Enable (1/second) */ | 148 | reg &= ~OMAP_RTC_INTERRUPTS_IT_ALARM; |
167 | case RTC_UIE_OFF: | ||
168 | reg &= ~OMAP_RTC_INTERRUPTS_IT_TIMER; | ||
169 | break; | ||
170 | case RTC_UIE_ON: | ||
171 | reg |= OMAP_RTC_INTERRUPTS_IT_TIMER; | ||
172 | break; | ||
173 | } | ||
174 | rtc_wait_not_busy(); | 149 | rtc_wait_not_busy(); |
175 | rtc_write(reg, OMAP_RTC_INTERRUPTS_REG); | 150 | rtc_write(reg, OMAP_RTC_INTERRUPTS_REG); |
176 | local_irq_enable(); | 151 | local_irq_enable(); |
@@ -178,10 +153,6 @@ omap_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) | |||
178 | return 0; | 153 | return 0; |
179 | } | 154 | } |
180 | 155 | ||
181 | #else | ||
182 | #define omap_rtc_ioctl NULL | ||
183 | #endif | ||
184 | |||
185 | /* this hardware doesn't support "don't care" alarm fields */ | 156 | /* this hardware doesn't support "don't care" alarm fields */ |
186 | static int tm2bcd(struct rtc_time *tm) | 157 | static int tm2bcd(struct rtc_time *tm) |
187 | { | 158 | { |
@@ -304,11 +275,11 @@ static int omap_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alm) | |||
304 | } | 275 | } |
305 | 276 | ||
306 | static struct rtc_class_ops omap_rtc_ops = { | 277 | static struct rtc_class_ops omap_rtc_ops = { |
307 | .ioctl = omap_rtc_ioctl, | ||
308 | .read_time = omap_rtc_read_time, | 278 | .read_time = omap_rtc_read_time, |
309 | .set_time = omap_rtc_set_time, | 279 | .set_time = omap_rtc_set_time, |
310 | .read_alarm = omap_rtc_read_alarm, | 280 | .read_alarm = omap_rtc_read_alarm, |
311 | .set_alarm = omap_rtc_set_alarm, | 281 | .set_alarm = omap_rtc_set_alarm, |
282 | .alarm_irq_enable = omap_rtc_alarm_irq_enable, | ||
312 | }; | 283 | }; |
313 | 284 | ||
314 | static int omap_rtc_alarm; | 285 | static int omap_rtc_alarm; |
@@ -423,7 +394,7 @@ static int __init omap_rtc_probe(struct platform_device *pdev) | |||
423 | return 0; | 394 | return 0; |
424 | 395 | ||
425 | fail2: | 396 | fail2: |
426 | free_irq(omap_rtc_timer, NULL); | 397 | free_irq(omap_rtc_timer, rtc); |
427 | fail1: | 398 | fail1: |
428 | rtc_device_unregister(rtc); | 399 | rtc_device_unregister(rtc); |
429 | fail0: | 400 | fail0: |