Mainline kernel already includes Mark Huang's fix. No need for the
[linux-2.6.git] / drivers / rtc / rtc-sa1100.c
index a997529..9c8ead4 100644 (file)
@@ -45,7 +45,7 @@
 
 static unsigned long rtc_freq = 1024;
 static struct rtc_time rtc_alarm;
-static spinlock_t sa1100_rtc_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(sa1100_rtc_lock);
 
 static int rtc_update_alarm(struct rtc_time *alrm)
 {
@@ -68,8 +68,7 @@ static int rtc_update_alarm(struct rtc_time *alrm)
        return ret;
 }
 
-static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id,
-               struct pt_regs *regs)
+static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id)
 {
        struct platform_device *pdev = to_platform_device(dev_id);
        struct rtc_device *rtc = platform_get_drvdata(pdev);
@@ -106,8 +105,7 @@ static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id,
 
 static int rtc_timer1_count;
 
-static irqreturn_t timer1_interrupt(int irq, void *dev_id,
-               struct pt_regs *regs)
+static irqreturn_t timer1_interrupt(int irq, void *dev_id)
 {
        struct platform_device *pdev = to_platform_device(dev_id);
        struct rtc_device *rtc = platform_get_drvdata(pdev);
@@ -157,19 +155,19 @@ static int sa1100_rtc_open(struct device *dev)
 {
        int ret;
 
-       ret = request_irq(IRQ_RTC1Hz, sa1100_rtc_interrupt, SA_INTERRUPT,
+       ret = request_irq(IRQ_RTC1Hz, sa1100_rtc_interrupt, IRQF_DISABLED,
                                "rtc 1Hz", dev);
        if (ret) {
                dev_err(dev, "IRQ %d already in use.\n", IRQ_RTC1Hz);
                goto fail_ui;
        }
-       ret = request_irq(IRQ_RTCAlrm, sa1100_rtc_interrupt, SA_INTERRUPT,
+       ret = request_irq(IRQ_RTCAlrm, sa1100_rtc_interrupt, IRQF_DISABLED,
                                "rtc Alrm", dev);
        if (ret) {
                dev_err(dev, "IRQ %d already in use.\n", IRQ_RTCAlrm);
                goto fail_ai;
        }
-       ret = request_irq(IRQ_OST1, timer1_interrupt, SA_INTERRUPT,
+       ret = request_irq(IRQ_OST1, timer1_interrupt, IRQF_DISABLED,
                                "rtc timer", dev);
        if (ret) {
                dev_err(dev, "IRQ %d already in use.\n", IRQ_OST1);
@@ -229,8 +227,6 @@ static int sa1100_rtc_ioctl(struct device *dev, unsigned int cmd,
                spin_unlock_irq(&sa1100_rtc_lock);
                return 0;
        case RTC_PIE_ON:
-               if ((rtc_freq > 64) && !capable(CAP_SYS_RESOURCE))
-                       return -EACCES;
                spin_lock_irq(&sa1100_rtc_lock);
                OSMR1 = TIMER_FREQ/rtc_freq + OSCR;
                OIER |= OIER_E1;
@@ -242,8 +238,6 @@ static int sa1100_rtc_ioctl(struct device *dev, unsigned int cmd,
        case RTC_IRQP_SET:
                if (arg < 1 || arg > TIMER_FREQ)
                        return -EINVAL;
-               if ((arg > 64) && (!capable(CAP_SYS_RESOURCE)))
-                       return -EACCES;
                rtc_freq = arg;
                return 0;
        }
@@ -295,9 +289,7 @@ static int sa1100_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
 
 static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
 {
-       seq_printf(seq, "trim/divider\t: 0x%08lx\n", RTTR);
-       seq_printf(seq, "alarm_IRQ\t: %s\n",
-                       (RTSR & RTSR_ALE) ? "yes" : "no" );
+       seq_printf(seq, "trim/divider\t: 0x%08x\n", (u32) RTTR);
        seq_printf(seq, "update_IRQ\t: %s\n",
                        (RTSR & RTSR_HZE) ? "yes" : "no");
        seq_printf(seq, "periodic_IRQ\t: %s\n",
@@ -307,7 +299,7 @@ static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
        return 0;
 }
 
-static struct rtc_class_ops sa1100_rtc_ops = {
+static const struct rtc_class_ops sa1100_rtc_ops = {
        .open = sa1100_rtc_open,
        .read_callback = sa1100_rtc_read_callback,
        .release = sa1100_rtc_release,