diff options
Diffstat (limited to 'arch/sh/boards/mach-dreamcast/irq.c')
-rw-r--r-- | arch/sh/boards/mach-dreamcast/irq.c | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/arch/sh/boards/mach-dreamcast/irq.c b/arch/sh/boards/mach-dreamcast/irq.c index f63d323f411f..2789647abebe 100644 --- a/arch/sh/boards/mach-dreamcast/irq.c +++ b/arch/sh/boards/mach-dreamcast/irq.c | |||
@@ -8,10 +8,11 @@ | |||
8 | * This file is part of the LinuxDC project (www.linuxdc.org) | 8 | * This file is part of the LinuxDC project (www.linuxdc.org) |
9 | * Released under the terms of the GNU GPL v2.0 | 9 | * Released under the terms of the GNU GPL v2.0 |
10 | */ | 10 | */ |
11 | |||
12 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
13 | #include <linux/io.h> | 12 | #include <linux/io.h> |
14 | #include <asm/irq.h> | 13 | #include <linux/irq.h> |
14 | #include <linux/export.h> | ||
15 | #include <linux/err.h> | ||
15 | #include <mach/sysasic.h> | 16 | #include <mach/sysasic.h> |
16 | 17 | ||
17 | /* | 18 | /* |
@@ -141,26 +142,15 @@ int systemasic_irq_demux(int irq) | |||
141 | 142 | ||
142 | void systemasic_irq_init(void) | 143 | void systemasic_irq_init(void) |
143 | { | 144 | { |
144 | int i, nid = cpu_to_node(boot_cpu_data); | 145 | int irq_base, i; |
145 | |||
146 | /* Assign all virtual IRQs to the System ASIC int. handler */ | ||
147 | for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) { | ||
148 | unsigned int irq; | ||
149 | |||
150 | irq = create_irq_nr(i, nid); | ||
151 | if (unlikely(irq == 0)) { | ||
152 | pr_err("%s: failed hooking irq %d for systemasic\n", | ||
153 | __func__, i); | ||
154 | return; | ||
155 | } | ||
156 | 146 | ||
157 | if (unlikely(irq != i)) { | 147 | irq_base = irq_alloc_descs(HW_EVENT_IRQ_BASE, HW_EVENT_IRQ_BASE, |
158 | pr_err("%s: got irq %d but wanted %d, bailing.\n", | 148 | HW_EVENT_IRQ_MAX - HW_EVENT_IRQ_BASE, -1); |
159 | __func__, irq, i); | 149 | if (IS_ERR_VALUE(irq_base)) { |
160 | destroy_irq(irq); | 150 | pr_err("%s: failed hooking irqs\n", __func__); |
161 | return; | 151 | return; |
162 | } | 152 | } |
163 | 153 | ||
154 | for (i = HW_EVENT_IRQ_BASE; i < HW_EVENT_IRQ_MAX; i++) | ||
164 | irq_set_chip_and_handler(i, &systemasic_int, handle_level_irq); | 155 | irq_set_chip_and_handler(i, &systemasic_int, handle_level_irq); |
165 | } | ||
166 | } | 156 | } |