diff options
Diffstat (limited to 'drivers/rtc/rtc-sa1100.c')
-rw-r--r-- | drivers/rtc/rtc-sa1100.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index a997529f892..ee4b61ee67b 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c | |||
@@ -45,7 +45,7 @@ | |||
45 | 45 | ||
46 | static unsigned long rtc_freq = 1024; | 46 | static unsigned long rtc_freq = 1024; |
47 | static struct rtc_time rtc_alarm; | 47 | static struct rtc_time rtc_alarm; |
48 | static spinlock_t sa1100_rtc_lock = SPIN_LOCK_UNLOCKED; | 48 | static DEFINE_SPINLOCK(sa1100_rtc_lock); |
49 | 49 | ||
50 | static int rtc_update_alarm(struct rtc_time *alrm) | 50 | static int rtc_update_alarm(struct rtc_time *alrm) |
51 | { | 51 | { |
@@ -157,19 +157,19 @@ static int sa1100_rtc_open(struct device *dev) | |||
157 | { | 157 | { |
158 | int ret; | 158 | int ret; |
159 | 159 | ||
160 | ret = request_irq(IRQ_RTC1Hz, sa1100_rtc_interrupt, SA_INTERRUPT, | 160 | ret = request_irq(IRQ_RTC1Hz, sa1100_rtc_interrupt, IRQF_DISABLED, |
161 | "rtc 1Hz", dev); | 161 | "rtc 1Hz", dev); |
162 | if (ret) { | 162 | if (ret) { |
163 | dev_err(dev, "IRQ %d already in use.\n", IRQ_RTC1Hz); | 163 | dev_err(dev, "IRQ %d already in use.\n", IRQ_RTC1Hz); |
164 | goto fail_ui; | 164 | goto fail_ui; |
165 | } | 165 | } |
166 | ret = request_irq(IRQ_RTCAlrm, sa1100_rtc_interrupt, SA_INTERRUPT, | 166 | ret = request_irq(IRQ_RTCAlrm, sa1100_rtc_interrupt, IRQF_DISABLED, |
167 | "rtc Alrm", dev); | 167 | "rtc Alrm", dev); |
168 | if (ret) { | 168 | if (ret) { |
169 | dev_err(dev, "IRQ %d already in use.\n", IRQ_RTCAlrm); | 169 | dev_err(dev, "IRQ %d already in use.\n", IRQ_RTCAlrm); |
170 | goto fail_ai; | 170 | goto fail_ai; |
171 | } | 171 | } |
172 | ret = request_irq(IRQ_OST1, timer1_interrupt, SA_INTERRUPT, | 172 | ret = request_irq(IRQ_OST1, timer1_interrupt, IRQF_DISABLED, |
173 | "rtc timer", dev); | 173 | "rtc timer", dev); |
174 | if (ret) { | 174 | if (ret) { |
175 | dev_err(dev, "IRQ %d already in use.\n", IRQ_OST1); | 175 | dev_err(dev, "IRQ %d already in use.\n", IRQ_OST1); |
@@ -229,8 +229,6 @@ static int sa1100_rtc_ioctl(struct device *dev, unsigned int cmd, | |||
229 | spin_unlock_irq(&sa1100_rtc_lock); | 229 | spin_unlock_irq(&sa1100_rtc_lock); |
230 | return 0; | 230 | return 0; |
231 | case RTC_PIE_ON: | 231 | case RTC_PIE_ON: |
232 | if ((rtc_freq > 64) && !capable(CAP_SYS_RESOURCE)) | ||
233 | return -EACCES; | ||
234 | spin_lock_irq(&sa1100_rtc_lock); | 232 | spin_lock_irq(&sa1100_rtc_lock); |
235 | OSMR1 = TIMER_FREQ/rtc_freq + OSCR; | 233 | OSMR1 = TIMER_FREQ/rtc_freq + OSCR; |
236 | OIER |= OIER_E1; | 234 | OIER |= OIER_E1; |
@@ -242,8 +240,6 @@ static int sa1100_rtc_ioctl(struct device *dev, unsigned int cmd, | |||
242 | case RTC_IRQP_SET: | 240 | case RTC_IRQP_SET: |
243 | if (arg < 1 || arg > TIMER_FREQ) | 241 | if (arg < 1 || arg > TIMER_FREQ) |
244 | return -EINVAL; | 242 | return -EINVAL; |
245 | if ((arg > 64) && (!capable(CAP_SYS_RESOURCE))) | ||
246 | return -EACCES; | ||
247 | rtc_freq = arg; | 243 | rtc_freq = arg; |
248 | return 0; | 244 | return 0; |
249 | } | 245 | } |