ARM: tegra30: pm: flush L1 data before exit coherency on secondary CPU
[linux-2.6.git] / drivers / rtc / rtc-at91rm9200.c
index bc8bbca..e39b77a 100644 (file)
@@ -60,7 +60,7 @@ static void at91_rtc_decodetime(unsigned int timereg, unsigned int calreg,
        /*
         * The Calendar Alarm register does not have a field for
         * the year - so these will return an invalid value.  When an
-        * alarm is set, at91_alarm_year wille store the current year.
+        * alarm is set, at91_alarm_year will store the current year.
         */
        tm->tm_year  = bcd2bin(date & AT91_RTC_CENT) * 100;     /* century */
        tm->tm_year += bcd2bin((date & AT91_RTC_YEAR) >> 8);    /* year */
@@ -183,40 +183,18 @@ static int at91_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
        return 0;
 }
 
-/*
- * Handle commands from user-space
- */
-static int at91_rtc_ioctl(struct device *dev, unsigned int cmd,
-                       unsigned long arg)
+static int at91_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
 {
-       int ret = 0;
+       pr_debug("%s(): cmd=%08x\n", __func__, enabled);
 
-       pr_debug("%s(): cmd=%08x, arg=%08lx.\n", __func__, cmd, arg);
-
-       /* important:  scrub old status before enabling IRQs */
-       switch (cmd) {
-       case RTC_AIE_OFF:       /* alarm off */
-               at91_sys_write(AT91_RTC_IDR, AT91_RTC_ALARM);
-               break;
-       case RTC_AIE_ON:        /* alarm on */
+       if (enabled) {
                at91_sys_write(AT91_RTC_SCCR, AT91_RTC_ALARM);
                at91_sys_write(AT91_RTC_IER, AT91_RTC_ALARM);
-               break;
-       case RTC_UIE_OFF:       /* update off */
-               at91_sys_write(AT91_RTC_IDR, AT91_RTC_SECEV);
-               break;
-       case RTC_UIE_ON:        /* update on */
-               at91_sys_write(AT91_RTC_SCCR, AT91_RTC_SECEV);
-               at91_sys_write(AT91_RTC_IER, AT91_RTC_SECEV);
-               break;
-       default:
-               ret = -ENOIOCTLCMD;
-               break;
-       }
+       } else
+               at91_sys_write(AT91_RTC_IDR, AT91_RTC_ALARM);
 
-       return ret;
+       return 0;
 }
-
 /*
  * Provide additional RTC information in /proc/driver/rtc
  */
@@ -264,12 +242,12 @@ static irqreturn_t at91_rtc_interrupt(int irq, void *dev_id)
 }
 
 static const struct rtc_class_ops at91_rtc_ops = {
-       .ioctl          = at91_rtc_ioctl,
        .read_time      = at91_rtc_readtime,
        .set_time       = at91_rtc_settime,
        .read_alarm     = at91_rtc_readalarm,
        .set_alarm      = at91_rtc_setalarm,
        .proc           = at91_rtc_proc,
+       .alarm_irq_enable = at91_rtc_alarm_irq_enable,
 };
 
 /*