Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
[sfrench/cifs-2.6.git] / arch / mips / sgi-ip32 / ip32-reset.c
index b6cab089561e117cc4a4fc785cdd10d5b0f736bf..9b95d80ebc6e8150f0a24dd125127e72efed26dd 100644 (file)
@@ -53,7 +53,7 @@ static inline void ip32_machine_halt(void)
 
 static void ip32_machine_power_off(void)
 {
-       volatile unsigned char reg_a, xctrl_a, xctrl_b;
+       unsigned char reg_a, xctrl_a, xctrl_b;
 
        disable_irq(MACEISA_RTC_IRQ);
        reg_a = CMOS_READ(RTC_REG_A);
@@ -91,9 +91,10 @@ static void blink_timeout(unsigned long data)
 
 static void debounce(unsigned long data)
 {
-       volatile unsigned char reg_a, reg_c, xctrl_a;
+       unsigned char reg_a, reg_c, xctrl_a;
 
        reg_c = CMOS_READ(RTC_INTR_FLAGS);
+       reg_a = CMOS_READ(RTC_REG_A);
        CMOS_WRITE(reg_a | DS_REGA_DV0, RTC_REG_A);
        wbflush();
        xctrl_a = CMOS_READ(DS_B1_XCTRL4A);
@@ -137,7 +138,7 @@ static inline void ip32_power_button(void)
 
 static irqreturn_t ip32_rtc_int(int irq, void *dev_id)
 {
-       volatile unsigned char reg_c;
+       unsigned char reg_c;
 
        reg_c = CMOS_READ(RTC_INTR_FLAGS);
        if (!(reg_c & RTC_IRQF)) {
@@ -145,7 +146,7 @@ static irqreturn_t ip32_rtc_int(int irq, void *dev_id)
                        "%s: RTC IRQ without RTC_IRQF\n", __func__);
        }
        /* Wait until interrupt goes away */
-       disable_irq(MACEISA_RTC_IRQ);
+       disable_irq_nosync(MACEISA_RTC_IRQ);
        init_timer(&debounce_timer);
        debounce_timer.function = debounce;
        debounce_timer.expires = jiffies + 50;