aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/sni/a20r.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/sni/a20r.c')
-rw-r--r--arch/mips/sni/a20r.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c
index e6980892834a..c48194c3073b 100644
--- a/arch/mips/sni/a20r.c
+++ b/arch/mips/sni/a20r.c
@@ -10,6 +10,7 @@
10 10
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/interrupt.h> 12#include <linux/interrupt.h>
13#include <linux/irq.h>
13#include <linux/platform_device.h> 14#include <linux/platform_device.h>
14#include <linux/serial_8250.h> 15#include <linux/serial_8250.h>
15 16
@@ -167,33 +168,22 @@ static u32 a20r_ack_hwint(void)
167 return status; 168 return status;
168} 169}
169 170
170static inline void unmask_a20r_irq(unsigned int irq) 171static inline void unmask_a20r_irq(struct irq_data *d)
171{ 172{
172 set_c0_status(0x100 << (irq - SNI_A20R_IRQ_BASE)); 173 set_c0_status(0x100 << (d->irq - SNI_A20R_IRQ_BASE));
173 irq_enable_hazard(); 174 irq_enable_hazard();
174} 175}
175 176
176static inline void mask_a20r_irq(unsigned int irq) 177static inline void mask_a20r_irq(struct irq_data *d)
177{ 178{
178 clear_c0_status(0x100 << (irq - SNI_A20R_IRQ_BASE)); 179 clear_c0_status(0x100 << (d->irq - SNI_A20R_IRQ_BASE));
179 irq_disable_hazard(); 180 irq_disable_hazard();
180} 181}
181 182
182static void end_a20r_irq(unsigned int irq)
183{
184 if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
185 a20r_ack_hwint();
186 unmask_a20r_irq(irq);
187 }
188}
189
190static struct irq_chip a20r_irq_type = { 183static struct irq_chip a20r_irq_type = {
191 .name = "A20R", 184 .name = "A20R",
192 .ack = mask_a20r_irq, 185 .irq_mask = mask_a20r_irq,
193 .mask = mask_a20r_irq, 186 .irq_unmask = unmask_a20r_irq,
194 .mask_ack = mask_a20r_irq,
195 .unmask = unmask_a20r_irq,
196 .end = end_a20r_irq,
197}; 187};
198 188
199/* 189/*
@@ -219,7 +209,7 @@ void __init sni_a20r_irq_init(void)
219 int i; 209 int i;
220 210
221 for (i = SNI_A20R_IRQ_BASE + 2 ; i < SNI_A20R_IRQ_BASE + 8; i++) 211 for (i = SNI_A20R_IRQ_BASE + 2 ; i < SNI_A20R_IRQ_BASE + 8; i++)
222 set_irq_chip_and_handler(i, &a20r_irq_type, handle_level_irq); 212 irq_set_chip_and_handler(i, &a20r_irq_type, handle_level_irq);
223 sni_hwint = a20r_hwint; 213 sni_hwint = a20r_hwint;
224 change_c0_status(ST0_IM, IE_IRQ0); 214 change_c0_status(ST0_IM, IE_IRQ0);
225 setup_irq(SNI_A20R_IRQ_BASE + 3, &sni_isa_irq); 215 setup_irq(SNI_A20R_IRQ_BASE + 3, &sni_isa_irq);