aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-omap.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc/rtc-omap.c')
-rw-r--r--drivers/rtc/rtc-omap.c41
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 138static int omap_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
139
140static int
141omap_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 */
186static int tm2bcd(struct rtc_time *tm) 157static 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
306static struct rtc_class_ops omap_rtc_ops = { 277static 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
314static int omap_rtc_alarm; 285static 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
425fail2: 396fail2:
426 free_irq(omap_rtc_timer, NULL); 397 free_irq(omap_rtc_timer, rtc);
427fail1: 398fail1:
428 rtc_device_unregister(rtc); 399 rtc_device_unregister(rtc);
429fail0: 400fail0: