aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/au1000/common/irq.c
diff options
context:
space:
mode:
authorPete Popov <ppopov@embeddedalley.com>2005-07-19 07:05:36 +0000
committerRalf Baechle <ralf@linux-mips.org>2005-10-29 19:31:56 +0100
commit3ce86ee14ba7c4b0f8ddae6030df9d0dee15b236 (patch)
tree9283cd659849be0deaea5fa80b7d8343edd5d926 /arch/mips/au1000/common/irq.c
parentDrop IP27 support for Qlogic ISP. This driver is buggy and has been (diff)
downloadlinux-dev-3ce86ee14ba7c4b0f8ddae6030df9d0dee15b236.tar.xz
linux-dev-3ce86ee14ba7c4b0f8ddae6030df9d0dee15b236.zip
Au1x PM fixes.
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/au1000/common/irq.c')
-rw-r--r--arch/mips/au1000/common/irq.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/arch/mips/au1000/common/irq.c b/arch/mips/au1000/common/irq.c
index 6a25677bf3cb..112beb7fe001 100644
--- a/arch/mips/au1000/common/irq.c
+++ b/arch/mips/au1000/common/irq.c
@@ -83,7 +83,7 @@ inline void local_disable_irq(unsigned int irq_nr);
void (*board_init_irq)(void);
#ifdef CONFIG_PM
-extern void counter0_irq(int irq, void *dev_id, struct pt_regs *regs);
+extern irqreturn_t counter0_irq(int irq, void *dev_id, struct pt_regs *regs);
#endif
static DEFINE_SPINLOCK(irq_lock);
@@ -293,29 +293,31 @@ static struct hw_interrupt_type level_irq_type = {
};
#ifdef CONFIG_PM
-void startup_match20_interrupt(void (*handler)(int, void *, struct pt_regs *))
+void startup_match20_interrupt(irqreturn_t (*handler)(int, void *, struct pt_regs *))
{
- static struct irqaction action;
- /* This is a big problem.... since we didn't use request_irq
- when kernel/irq.c calls probe_irq_xxx this interrupt will
- be probed for usage. This will end up disabling the device :(
+ struct irq_desc *desc = &irq_desc[AU1000_TOY_MATCH2_INT];
- Give it a bogus "action" pointer -- this will keep it from
- getting auto-probed!
+ static struct irqaction action;
+ memset(&action, 0, sizeof(struct irqaction));
- By setting the status to match that of request_irq() we
- can avoid it. --cgray
+ /* This is a big problem.... since we didn't use request_irq
+ * when kernel/irq.c calls probe_irq_xxx this interrupt will
+ * be probed for usage. This will end up disabling the device :(
+ * Give it a bogus "action" pointer -- this will keep it from
+ * getting auto-probed!
+ *
+ * By setting the status to match that of request_irq() we
+ * can avoid it. --cgray
*/
action.dev_id = handler;
- action.flags = 0;
- action.mask = 0;
+ action.flags = SA_INTERRUPT;
+ cpus_clear(action.mask);
action.name = "Au1xxx TOY";
action.handler = handler;
action.next = NULL;
- irq_desc[AU1000_TOY_MATCH2_INT].action = &action;
- irq_desc[AU1000_TOY_MATCH2_INT].status
- &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS);
+ desc->action = &action;
+ desc->status &= ~(IRQ_DISABLED | IRQ_AUTODETECT | IRQ_WAITING | IRQ_INPROGRESS);
local_enable_irq(AU1000_TOY_MATCH2_INT);
}