rtc-cmos: convert RTC_AIE/RTC_UIE to rtc irq API
authorHerton Ronaldo Krzesinski <herton@mandriva.com.br>
Wed, 16 Dec 2009 00:45:56 +0000 (16:45 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 16 Dec 2009 15:19:58 +0000 (07:19 -0800)
Drop ioctl function that handles RTC_AIE/RTC_UIE, and use instead the
rtc subsystem API (alarm_irq_enable/update_irq_enable callbacks).

Signed-off-by: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/rtc/rtc-cmos.c

index 876e3fcffca475e44898fa8249bb3d8d6952a556..eb154dc5716403057fbb5c2f8fe5b9a539694bb6 100644 (file)
@@ -420,49 +420,43 @@ static int cmos_irq_set_state(struct device *dev, int enabled)
        return 0;
 }
 
-#if defined(CONFIG_RTC_INTF_DEV) || defined(CONFIG_RTC_INTF_DEV_MODULE)
-
-static int
-cmos_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
+static int cmos_alarm_irq_enable(struct device *dev, unsigned int enabled)
 {
        struct cmos_rtc *cmos = dev_get_drvdata(dev);
        unsigned long   flags;
 
-       switch (cmd) {
-       case RTC_AIE_OFF:
-       case RTC_AIE_ON:
-       case RTC_UIE_OFF:
-       case RTC_UIE_ON:
-               if (!is_valid_irq(cmos->irq))
-                       return -EINVAL;
-               break;
-       /* PIE ON/OFF is handled by cmos_irq_set_state() */
-       default:
-               return -ENOIOCTLCMD;
-       }
+       if (!is_valid_irq(cmos->irq))
+               return -EINVAL;
 
        spin_lock_irqsave(&rtc_lock, flags);
-       switch (cmd) {
-       case RTC_AIE_OFF:       /* alarm off */
-               cmos_irq_disable(cmos, RTC_AIE);
-               break;
-       case RTC_AIE_ON:        /* alarm on */
+
+       if (enabled)
                cmos_irq_enable(cmos, RTC_AIE);
-               break;
-       case RTC_UIE_OFF:       /* update off */
-               cmos_irq_disable(cmos, RTC_UIE);
-               break;
-       case RTC_UIE_ON:        /* update on */
-               cmos_irq_enable(cmos, RTC_UIE);
-               break;
-       }
+       else
+               cmos_irq_disable(cmos, RTC_AIE);
+
        spin_unlock_irqrestore(&rtc_lock, flags);
        return 0;
 }
 
-#else
-#define        cmos_rtc_ioctl  NULL
-#endif
+static int cmos_update_irq_enable(struct device *dev, unsigned int enabled)
+{
+       struct cmos_rtc *cmos = dev_get_drvdata(dev);
+       unsigned long   flags;
+
+       if (!is_valid_irq(cmos->irq))
+               return -EINVAL;
+
+       spin_lock_irqsave(&rtc_lock, flags);
+
+       if (enabled)
+               cmos_irq_enable(cmos, RTC_UIE);
+       else
+               cmos_irq_disable(cmos, RTC_UIE);
+
+       spin_unlock_irqrestore(&rtc_lock, flags);
+       return 0;
+}
 
 #if defined(CONFIG_RTC_INTF_PROC) || defined(CONFIG_RTC_INTF_PROC_MODULE)
 
@@ -503,14 +497,15 @@ static int cmos_procfs(struct device *dev, struct seq_file *seq)
 #endif
 
 static const struct rtc_class_ops cmos_rtc_ops = {
-       .ioctl          = cmos_rtc_ioctl,
-       .read_time      = cmos_read_time,
-       .set_time       = cmos_set_time,
-       .read_alarm     = cmos_read_alarm,
-       .set_alarm      = cmos_set_alarm,
-       .proc           = cmos_procfs,
-       .irq_set_freq   = cmos_irq_set_freq,
-       .irq_set_state  = cmos_irq_set_state,
+       .read_time              = cmos_read_time,
+       .set_time               = cmos_set_time,
+       .read_alarm             = cmos_read_alarm,
+       .set_alarm              = cmos_set_alarm,
+       .proc                   = cmos_procfs,
+       .irq_set_freq           = cmos_irq_set_freq,
+       .irq_set_state          = cmos_irq_set_state,
+       .alarm_irq_enable       = cmos_alarm_irq_enable,
+       .update_irq_enable      = cmos_update_irq_enable,
 };
 
 /*----------------------------------------------------------------*/