diff options
author | Kyle McMartin <kyle@dreadnought.i.jkkm.org> | 2010-10-13 21:00:55 -0400 |
---|---|---|
committer | Kyle McMartin <kyle@dreadnought.i.jkkm.org> | 2010-10-14 01:30:11 -0400 |
commit | ba20085c20f1c9e8af546dea6ad0efa421bdef32 (patch) | |
tree | a5f0574f6b1e60526eb7d1b1e1a50125f10d463c /drivers/parisc/gsc.c | |
parent | caf96194c05cd97ce96546fbcb1f35ec06aaaac7 (diff) |
parisc: lay groundwork for killing __do_IRQ
Use proper accessors and handlers for generic irq cleanups. We just
call back into __do_IRQ through desc->handler now, and remove the
explicit calls.
Signed-off-by: Kyle McMartin <kyle@redhat.com>
Diffstat (limited to 'drivers/parisc/gsc.c')
-rw-r--r-- | drivers/parisc/gsc.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/parisc/gsc.c b/drivers/parisc/gsc.c index 20a1bce1a031..68bccdafa897 100644 --- a/drivers/parisc/gsc.c +++ b/drivers/parisc/gsc.c | |||
@@ -86,7 +86,7 @@ irqreturn_t gsc_asic_intr(int gsc_asic_irq, void *dev) | |||
86 | do { | 86 | do { |
87 | int local_irq = __ffs(irr); | 87 | int local_irq = __ffs(irr); |
88 | unsigned int irq = gsc_asic->global_irq[local_irq]; | 88 | unsigned int irq = gsc_asic->global_irq[local_irq]; |
89 | __do_IRQ(irq); | 89 | generic_handle_irq(irq); |
90 | irr &= ~(1 << local_irq); | 90 | irr &= ~(1 << local_irq); |
91 | } while (irr); | 91 | } while (irr); |
92 | 92 | ||
@@ -107,8 +107,7 @@ int gsc_find_local_irq(unsigned int irq, int *global_irqs, int limit) | |||
107 | 107 | ||
108 | static void gsc_asic_disable_irq(unsigned int irq) | 108 | static void gsc_asic_disable_irq(unsigned int irq) |
109 | { | 109 | { |
110 | struct irq_desc *desc = irq_to_desc(irq); | 110 | struct gsc_asic *irq_dev = get_irq_chip_data(irq); |
111 | struct gsc_asic *irq_dev = desc->chip_data; | ||
112 | int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32); | 111 | int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32); |
113 | u32 imr; | 112 | u32 imr; |
114 | 113 | ||
@@ -123,8 +122,7 @@ static void gsc_asic_disable_irq(unsigned int irq) | |||
123 | 122 | ||
124 | static void gsc_asic_enable_irq(unsigned int irq) | 123 | static void gsc_asic_enable_irq(unsigned int irq) |
125 | { | 124 | { |
126 | struct irq_desc *desc = irq_to_desc(irq); | 125 | struct gsc_asic *irq_dev = get_irq_chip_data(irq); |
127 | struct gsc_asic *irq_dev = desc->chip_data; | ||
128 | int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32); | 126 | int local_irq = gsc_find_local_irq(irq, irq_dev->global_irq, 32); |
129 | u32 imr; | 127 | u32 imr; |
130 | 128 | ||
@@ -160,14 +158,13 @@ static struct irq_chip gsc_asic_interrupt_type = { | |||
160 | int gsc_assign_irq(struct irq_chip *type, void *data) | 158 | int gsc_assign_irq(struct irq_chip *type, void *data) |
161 | { | 159 | { |
162 | static int irq = GSC_IRQ_BASE; | 160 | static int irq = GSC_IRQ_BASE; |
163 | struct irq_desc *desc; | ||
164 | 161 | ||
165 | if (irq > GSC_IRQ_MAX) | 162 | if (irq > GSC_IRQ_MAX) |
166 | return NO_IRQ; | 163 | return NO_IRQ; |
167 | 164 | ||
168 | desc = irq_to_desc(irq); | 165 | set_irq_chip_and_handler(irq, type, parisc_do_IRQ); |
169 | desc->chip = type; | 166 | set_irq_chip_data(irq, data); |
170 | desc->chip_data = data; | 167 | |
171 | return irq++; | 168 | return irq++; |
172 | } | 169 | } |
173 | 170 | ||