|
@@ -809,89 +809,6 @@ static __poll_t rtc_poll(struct file *file, poll_table *wait)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-int rtc_register(rtc_task_t *task)
|
|
|
-{
|
|
|
-#ifndef RTC_IRQ
|
|
|
- return -EIO;
|
|
|
-#else
|
|
|
- if (task == NULL || task->func == NULL)
|
|
|
- return -EINVAL;
|
|
|
- spin_lock_irq(&rtc_lock);
|
|
|
- if (rtc_status & RTC_IS_OPEN) {
|
|
|
- spin_unlock_irq(&rtc_lock);
|
|
|
- return -EBUSY;
|
|
|
- }
|
|
|
- spin_lock(&rtc_task_lock);
|
|
|
- if (rtc_callback) {
|
|
|
- spin_unlock(&rtc_task_lock);
|
|
|
- spin_unlock_irq(&rtc_lock);
|
|
|
- return -EBUSY;
|
|
|
- }
|
|
|
- rtc_status |= RTC_IS_OPEN;
|
|
|
- rtc_callback = task;
|
|
|
- spin_unlock(&rtc_task_lock);
|
|
|
- spin_unlock_irq(&rtc_lock);
|
|
|
- return 0;
|
|
|
-#endif
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(rtc_register);
|
|
|
-
|
|
|
-int rtc_unregister(rtc_task_t *task)
|
|
|
-{
|
|
|
-#ifndef RTC_IRQ
|
|
|
- return -EIO;
|
|
|
-#else
|
|
|
- unsigned char tmp;
|
|
|
-
|
|
|
- spin_lock_irq(&rtc_lock);
|
|
|
- spin_lock(&rtc_task_lock);
|
|
|
- if (rtc_callback != task) {
|
|
|
- spin_unlock(&rtc_task_lock);
|
|
|
- spin_unlock_irq(&rtc_lock);
|
|
|
- return -ENXIO;
|
|
|
- }
|
|
|
- rtc_callback = NULL;
|
|
|
-
|
|
|
- /* disable controls */
|
|
|
- if (!hpet_mask_rtc_irq_bit(RTC_PIE | RTC_AIE | RTC_UIE)) {
|
|
|
- tmp = CMOS_READ(RTC_CONTROL);
|
|
|
- tmp &= ~RTC_PIE;
|
|
|
- tmp &= ~RTC_AIE;
|
|
|
- tmp &= ~RTC_UIE;
|
|
|
- CMOS_WRITE(tmp, RTC_CONTROL);
|
|
|
- CMOS_READ(RTC_INTR_FLAGS);
|
|
|
- }
|
|
|
- if (rtc_status & RTC_TIMER_ON) {
|
|
|
- rtc_status &= ~RTC_TIMER_ON;
|
|
|
- del_timer(&rtc_irq_timer);
|
|
|
- }
|
|
|
- rtc_status &= ~RTC_IS_OPEN;
|
|
|
- spin_unlock(&rtc_task_lock);
|
|
|
- spin_unlock_irq(&rtc_lock);
|
|
|
- return 0;
|
|
|
-#endif
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(rtc_unregister);
|
|
|
-
|
|
|
-int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg)
|
|
|
-{
|
|
|
-#ifndef RTC_IRQ
|
|
|
- return -EIO;
|
|
|
-#else
|
|
|
- unsigned long flags;
|
|
|
- if (cmd != RTC_PIE_ON && cmd != RTC_PIE_OFF && cmd != RTC_IRQP_SET)
|
|
|
- return -EINVAL;
|
|
|
- spin_lock_irqsave(&rtc_task_lock, flags);
|
|
|
- if (rtc_callback != task) {
|
|
|
- spin_unlock_irqrestore(&rtc_task_lock, flags);
|
|
|
- return -ENXIO;
|
|
|
- }
|
|
|
- spin_unlock_irqrestore(&rtc_task_lock, flags);
|
|
|
- return rtc_do_ioctl(cmd, arg, 1);
|
|
|
-#endif
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(rtc_control);
|
|
|
-
|
|
|
/*
|
|
|
* The various file operations we support.
|
|
|
*/
|