diff options
Diffstat (limited to 'arch/blackfin/mach-common/ints-priority.c')
-rw-r--r-- | arch/blackfin/mach-common/ints-priority.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c index 5fa536727c61..34e8a726ffda 100644 --- a/arch/blackfin/mach-common/ints-priority.c +++ b/arch/blackfin/mach-common/ints-priority.c | |||
@@ -243,12 +243,14 @@ int bfin_internal_set_wake(unsigned int irq, unsigned int state) | |||
243 | #endif | 243 | #endif |
244 | 244 | ||
245 | static struct irq_chip bfin_core_irqchip = { | 245 | static struct irq_chip bfin_core_irqchip = { |
246 | .name = "CORE", | ||
246 | .ack = bfin_ack_noop, | 247 | .ack = bfin_ack_noop, |
247 | .mask = bfin_core_mask_irq, | 248 | .mask = bfin_core_mask_irq, |
248 | .unmask = bfin_core_unmask_irq, | 249 | .unmask = bfin_core_unmask_irq, |
249 | }; | 250 | }; |
250 | 251 | ||
251 | static struct irq_chip bfin_internal_irqchip = { | 252 | static struct irq_chip bfin_internal_irqchip = { |
253 | .name = "INTN", | ||
252 | .ack = bfin_ack_noop, | 254 | .ack = bfin_ack_noop, |
253 | .mask = bfin_internal_mask_irq, | 255 | .mask = bfin_internal_mask_irq, |
254 | .unmask = bfin_internal_unmask_irq, | 256 | .unmask = bfin_internal_unmask_irq, |
@@ -278,6 +280,7 @@ static void bfin_generic_error_unmask_irq(unsigned int irq) | |||
278 | } | 280 | } |
279 | 281 | ||
280 | static struct irq_chip bfin_generic_error_irqchip = { | 282 | static struct irq_chip bfin_generic_error_irqchip = { |
283 | .name = "ERROR", | ||
281 | .ack = bfin_ack_noop, | 284 | .ack = bfin_ack_noop, |
282 | .mask_ack = bfin_generic_error_mask_irq, | 285 | .mask_ack = bfin_generic_error_mask_irq, |
283 | .mask = bfin_generic_error_mask_irq, | 286 | .mask = bfin_generic_error_mask_irq, |
@@ -361,6 +364,14 @@ static void bfin_demux_error_irq(unsigned int int_err_irq, | |||
361 | } | 364 | } |
362 | #endif /* BF537_GENERIC_ERROR_INT_DEMUX */ | 365 | #endif /* BF537_GENERIC_ERROR_INT_DEMUX */ |
363 | 366 | ||
367 | static inline void bfin_set_irq_handler(unsigned irq, irq_flow_handler_t handle) | ||
368 | { | ||
369 | struct irq_desc *desc = irq_desc + irq; | ||
370 | /* May not call generic set_irq_handler() due to spinlock | ||
371 | recursion. */ | ||
372 | desc->handle_irq = handle; | ||
373 | } | ||
374 | |||
364 | #if !defined(CONFIG_BF54x) | 375 | #if !defined(CONFIG_BF54x) |
365 | 376 | ||
366 | static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)]; | 377 | static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)]; |
@@ -473,9 +484,9 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) | |||
473 | SSYNC(); | 484 | SSYNC(); |
474 | 485 | ||
475 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) | 486 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) |
476 | set_irq_handler(irq, handle_edge_irq); | 487 | bfin_set_irq_handler(irq, handle_edge_irq); |
477 | else | 488 | else |
478 | set_irq_handler(irq, handle_level_irq); | 489 | bfin_set_irq_handler(irq, handle_level_irq); |
479 | 490 | ||
480 | return 0; | 491 | return 0; |
481 | } | 492 | } |
@@ -495,6 +506,7 @@ int bfin_gpio_set_wake(unsigned int irq, unsigned int state) | |||
495 | #endif | 506 | #endif |
496 | 507 | ||
497 | static struct irq_chip bfin_gpio_irqchip = { | 508 | static struct irq_chip bfin_gpio_irqchip = { |
509 | .name = "GPIO", | ||
498 | .ack = bfin_gpio_ack_irq, | 510 | .ack = bfin_gpio_ack_irq, |
499 | .mask = bfin_gpio_mask_irq, | 511 | .mask = bfin_gpio_mask_irq, |
500 | .mask_ack = bfin_gpio_mask_ack_irq, | 512 | .mask_ack = bfin_gpio_mask_ack_irq, |
@@ -804,10 +816,10 @@ static int bfin_gpio_irq_type(unsigned int irq, unsigned int type) | |||
804 | 816 | ||
805 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { | 817 | if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) { |
806 | pint[bank]->edge_set = pintbit; | 818 | pint[bank]->edge_set = pintbit; |
807 | set_irq_handler(irq, handle_edge_irq); | 819 | bfin_set_irq_handler(irq, handle_edge_irq); |
808 | } else { | 820 | } else { |
809 | pint[bank]->edge_clear = pintbit; | 821 | pint[bank]->edge_clear = pintbit; |
810 | set_irq_handler(irq, handle_level_irq); | 822 | bfin_set_irq_handler(irq, handle_level_irq); |
811 | } | 823 | } |
812 | 824 | ||
813 | SSYNC(); | 825 | SSYNC(); |
@@ -884,6 +896,7 @@ void bfin_pm_restore(void) | |||
884 | #endif | 896 | #endif |
885 | 897 | ||
886 | static struct irq_chip bfin_gpio_irqchip = { | 898 | static struct irq_chip bfin_gpio_irqchip = { |
899 | .name = "GPIO", | ||
887 | .ack = bfin_gpio_ack_irq, | 900 | .ack = bfin_gpio_ack_irq, |
888 | .mask = bfin_gpio_mask_irq, | 901 | .mask = bfin_gpio_mask_irq, |
889 | .mask_ack = bfin_gpio_mask_ack_irq, | 902 | .mask_ack = bfin_gpio_mask_ack_irq, |
@@ -1136,8 +1149,4 @@ void do_irq(int vec, struct pt_regs *fp) | |||
1136 | vec = ivg->irqno; | 1149 | vec = ivg->irqno; |
1137 | } | 1150 | } |
1138 | asm_do_IRQ(vec, fp); | 1151 | asm_do_IRQ(vec, fp); |
1139 | |||
1140 | #ifdef CONFIG_KGDB | ||
1141 | kgdb_process_breakpoint(); | ||
1142 | #endif | ||
1143 | } | 1152 | } |