Merge branch 'for-linus' of git://neil.brown.name/md
[pandora-kernel.git] / arch / mips / sgi-ip22 / ip22-reset.c
index 7a941ec..4ad5c33 100644 (file)
 #define POWERDOWN_FREQ         (HZ / 4)
 #define PANIC_FREQ             (HZ / 8)
 
-static struct timer_list power_timer, blink_timer, debounce_timer, volume_timer;
+static struct timer_list power_timer, blink_timer, debounce_timer;
 
 #define MACHINE_PANICED                1
 #define MACHINE_SHUTTING_DOWN  2
 
 static int machine_state;
 
-static void ATTRIB_NORET sgi_machine_power_off(void)
+static void __noreturn sgi_machine_power_off(void)
 {
        unsigned int tmp;
 
@@ -68,7 +68,7 @@ static void ATTRIB_NORET sgi_machine_power_off(void)
        }
 }
 
-static void ATTRIB_NORET sgi_machine_restart(char *command)
+static void __noreturn sgi_machine_restart(char *command)
 {
        if (machine_state & MACHINE_SHUTTING_DOWN)
                sgi_machine_power_off();
@@ -76,7 +76,7 @@ static void ATTRIB_NORET sgi_machine_restart(char *command)
        while (1);
 }
 
-static void ATTRIB_NORET sgi_machine_halt(void)
+static void __noreturn sgi_machine_halt(void)
 {
        if (machine_state & MACHINE_SHUTTING_DOWN)
                sgi_machine_power_off();
@@ -139,37 +139,7 @@ static inline void power_button(void)
        add_timer(&power_timer);
 }
 
-void (*indy_volume_button)(int) = NULL;
-
-EXPORT_SYMBOL(indy_volume_button);
-
-static inline void volume_up_button(unsigned long data)
-{
-       del_timer(&volume_timer);
-
-       if (indy_volume_button)
-               indy_volume_button(1);
-
-       if (sgint->istat1 & SGINT_ISTAT1_PWR) {
-               volume_timer.expires = jiffies + (HZ / 100);
-               add_timer(&volume_timer);
-       }
-}
-
-static inline void volume_down_button(unsigned long data)
-{
-       del_timer(&volume_timer);
-
-       if (indy_volume_button)
-               indy_volume_button(-1);
-
-       if (sgint->istat1 & SGINT_ISTAT1_PWR) {
-               volume_timer.expires = jiffies + (HZ / 100);
-               add_timer(&volume_timer);
-       }
-}
-
-static irqreturn_t panel_int(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t panel_int(int irq, void *dev_id)
 {
        unsigned int buttons;
 
@@ -190,25 +160,8 @@ static irqreturn_t panel_int(int irq, void *dev_id, struct pt_regs *regs)
         * House. Only lowest 2 bits are used. Guiness uses upper four bits
         * for volume control". This is not true, all bits are pulled high
         * on fullhouse */
-       if (ip22_is_fullhouse() || !(buttons & SGIOC_PANEL_POWERINTR)) {
+       if (!(buttons & SGIOC_PANEL_POWERINTR))
                power_button();
-               return IRQ_HANDLED;
-       }
-       /* TODO: mute/unmute */
-       /* Volume up button was pressed */
-       if (!(buttons & SGIOC_PANEL_VOLUPINTR)) {
-               init_timer(&volume_timer);
-               volume_timer.function = volume_up_button;
-               volume_timer.expires = jiffies + (HZ / 100);
-               add_timer(&volume_timer);
-       }
-       /* Volume down button was pressed */
-       if (!(buttons & SGIOC_PANEL_VOLDNINTR)) {
-               init_timer(&volume_timer);
-               volume_timer.function = volume_down_button;
-               volume_timer.expires = jiffies + (HZ / 100);
-               add_timer(&volume_timer);
-       }
 
        return IRQ_HANDLED;
 }
@@ -232,11 +185,18 @@ static struct notifier_block panic_block = {
 
 static int __init reboot_setup(void)
 {
+       int res;
+
        _machine_restart = sgi_machine_restart;
        _machine_halt = sgi_machine_halt;
        pm_power_off = sgi_machine_power_off;
 
-       request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL);
+       res = request_irq(SGI_PANEL_IRQ, panel_int, 0, "Front Panel", NULL);
+       if (res) {
+               printk(KERN_ERR "Allocation of front panel IRQ failed\n");
+               return res;
+       }
+
        init_timer(&blink_timer);
        blink_timer.function = blink_timeout;
        atomic_notifier_chain_register(&panic_notifier_list, &panic_block);