diff options
-rw-r--r-- | arch/blackfin/mach-common/ints-priority.c | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c index c00915156f0c..a233c3ec8824 100644 --- a/arch/blackfin/mach-common/ints-priority.c +++ b/arch/blackfin/mach-common/ints-priority.c | |||
@@ -176,6 +176,11 @@ static void bfin_internal_mask_irq(unsigned int irq) | |||
176 | hard_local_irq_restore(flags); | 176 | hard_local_irq_restore(flags); |
177 | } | 177 | } |
178 | 178 | ||
179 | static void bfin_internal_mask_irq_chip(struct irq_data *d) | ||
180 | { | ||
181 | bfin_internal_mask_irq(d->irq); | ||
182 | } | ||
183 | |||
179 | #ifdef CONFIG_SMP | 184 | #ifdef CONFIG_SMP |
180 | static void bfin_internal_unmask_irq_affinity(unsigned int irq, | 185 | static void bfin_internal_unmask_irq_affinity(unsigned int irq, |
181 | const struct cpumask *affinity) | 186 | const struct cpumask *affinity) |
@@ -211,19 +216,24 @@ static void bfin_internal_unmask_irq(unsigned int irq) | |||
211 | } | 216 | } |
212 | 217 | ||
213 | #ifdef CONFIG_SMP | 218 | #ifdef CONFIG_SMP |
214 | static void bfin_internal_unmask_irq(unsigned int irq) | 219 | static void bfin_internal_unmask_irq_chip(struct irq_data *d) |
215 | { | 220 | { |
216 | struct irq_desc *desc = irq_to_desc(irq); | 221 | bfin_internal_unmask_irq_affinity(d->irq, d->affinity); |
217 | bfin_internal_unmask_irq_affinity(irq, desc->affinity); | ||
218 | } | 222 | } |
219 | 223 | ||
220 | static int bfin_internal_set_affinity(unsigned int irq, const struct cpumask *mask) | 224 | static int bfin_internal_set_affinity(struct irq_data *d, |
225 | const struct cpumask *mask, bool force) | ||
221 | { | 226 | { |
222 | bfin_internal_mask_irq(irq); | 227 | bfin_internal_mask_irq(d->irq); |
223 | bfin_internal_unmask_irq_affinity(irq, mask); | 228 | bfin_internal_unmask_irq_affinity(d->irq, mask); |
224 | 229 | ||
225 | return 0; | 230 | return 0; |
226 | } | 231 | } |
232 | #else | ||
233 | static void bfin_internal_unmask_irq_chip(struct irq_data *d) | ||
234 | { | ||
235 | bfin_internal_unmask_irq(d->irq); | ||
236 | } | ||
227 | #endif | 237 | #endif |
228 | 238 | ||
229 | #ifdef CONFIG_PM | 239 | #ifdef CONFIG_PM |
@@ -279,6 +289,11 @@ int bfin_internal_set_wake(unsigned int irq, unsigned int state) | |||
279 | 289 | ||
280 | return 0; | 290 | return 0; |
281 | } | 291 | } |
292 | |||
293 | static int bfin_internal_set_wake_chip(struct irq_data *d, unsigned int state) | ||
294 | { | ||
295 | return bfin_internal_set_wake(d->irq, state); | ||
296 | } | ||
282 | #endif | 297 | #endif |
283 | 298 | ||
284 | static struct irq_chip bfin_core_irqchip = { | 299 | static struct irq_chip bfin_core_irqchip = { |
@@ -291,16 +306,16 @@ static struct irq_chip bfin_core_irqchip = { | |||
291 | static struct irq_chip bfin_internal_irqchip = { | 306 | static struct irq_chip bfin_internal_irqchip = { |
292 | .name = "INTN", | 307 | .name = "INTN", |
293 | .irq_ack = bfin_ack_noop, | 308 | .irq_ack = bfin_ack_noop, |
294 | .mask = bfin_internal_mask_irq, | 309 | .irq_mask = bfin_internal_mask_irq_chip, |
295 | .unmask = bfin_internal_unmask_irq, | 310 | .irq_unmask = bfin_internal_unmask_irq_chip, |
296 | .mask_ack = bfin_internal_mask_irq, | 311 | .irq_mask_ack = bfin_internal_mask_irq_chip, |
297 | .disable = bfin_internal_mask_irq, | 312 | .irq_disable = bfin_internal_mask_irq_chip, |
298 | .enable = bfin_internal_unmask_irq, | 313 | .irq_enable = bfin_internal_unmask_irq_chip, |
299 | #ifdef CONFIG_SMP | 314 | #ifdef CONFIG_SMP |
300 | .set_affinity = bfin_internal_set_affinity, | 315 | .irq_set_affinity = bfin_internal_set_affinity, |
301 | #endif | 316 | #endif |
302 | #ifdef CONFIG_PM | 317 | #ifdef CONFIG_PM |
303 | .set_wake = bfin_internal_set_wake, | 318 | .irq_set_wake = bfin_internal_set_wake_chip, |
304 | #endif | 319 | #endif |
305 | }; | 320 | }; |
306 | 321 | ||