diff options
author | Nicolas Ferre <nicolas.ferre@atmel.com> | 2012-10-24 10:09:57 -0400 |
---|---|---|
committer | Nicolas Ferre <nicolas.ferre@atmel.com> | 2012-10-24 12:08:40 -0400 |
commit | 738a0fd752dc60e20beeda6f2f0f62e58dc0e344 (patch) | |
tree | bf934cd6db45d9afcd0662203c2a9a69d4981538 | |
parent | 3d9a0183dd3423353e9e363bcc261c1220d05f9f (diff) |
ARM: at91: fix external interrupts in non-DT case
Management of external interrupts has changed but the
non-DT code has not integrated these changes.
Add a mask to pass external irq specification from SoC
specific code to the at91_aic_init() function.
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Cc: stable <stable@vger.kernel.org> [v3.6]
-rw-r--r-- | arch/arm/mach-at91/generic.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-at91/irq.c | 9 | ||||
-rw-r--r-- | arch/arm/mach-at91/setup.c | 2 |
3 files changed, 10 insertions, 4 deletions
diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h index f49650677653..b62f560e6c75 100644 --- a/arch/arm/mach-at91/generic.h +++ b/arch/arm/mach-at91/generic.h | |||
@@ -26,7 +26,8 @@ extern void __init at91_dt_initialize(void); | |||
26 | extern void __init at91_init_irq_default(void); | 26 | extern void __init at91_init_irq_default(void); |
27 | extern void __init at91_init_interrupts(unsigned int priority[]); | 27 | extern void __init at91_init_interrupts(unsigned int priority[]); |
28 | extern void __init at91x40_init_interrupts(unsigned int priority[]); | 28 | extern void __init at91x40_init_interrupts(unsigned int priority[]); |
29 | extern void __init at91_aic_init(unsigned int priority[]); | 29 | extern void __init at91_aic_init(unsigned int priority[], |
30 | unsigned int ext_irq_mask); | ||
30 | extern int __init at91_aic_of_init(struct device_node *node, | 31 | extern int __init at91_aic_of_init(struct device_node *node, |
31 | struct device_node *parent); | 32 | struct device_node *parent); |
32 | extern int __init at91_aic5_of_init(struct device_node *node, | 33 | extern int __init at91_aic5_of_init(struct device_node *node, |
diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index 1e02c0e49dcc..febc2ee901a5 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c | |||
@@ -502,14 +502,19 @@ int __init at91_aic5_of_init(struct device_node *node, | |||
502 | /* | 502 | /* |
503 | * Initialize the AIC interrupt controller. | 503 | * Initialize the AIC interrupt controller. |
504 | */ | 504 | */ |
505 | void __init at91_aic_init(unsigned int *priority) | 505 | void __init at91_aic_init(unsigned int *priority, unsigned int ext_irq_mask) |
506 | { | 506 | { |
507 | unsigned int i; | 507 | unsigned int i; |
508 | int irq_base; | 508 | int irq_base; |
509 | 509 | ||
510 | if (at91_aic_pm_init()) | 510 | at91_extern_irq = kzalloc(BITS_TO_LONGS(n_irqs) |
511 | * sizeof(*at91_extern_irq), GFP_KERNEL); | ||
512 | |||
513 | if (at91_aic_pm_init() || at91_extern_irq == NULL) | ||
511 | panic("Unable to allocate bit maps\n"); | 514 | panic("Unable to allocate bit maps\n"); |
512 | 515 | ||
516 | *at91_extern_irq = ext_irq_mask; | ||
517 | |||
513 | at91_aic_base = ioremap(AT91_AIC, 512); | 518 | at91_aic_base = ioremap(AT91_AIC, 512); |
514 | if (!at91_aic_base) | 519 | if (!at91_aic_base) |
515 | panic("Unable to ioremap AIC registers\n"); | 520 | panic("Unable to ioremap AIC registers\n"); |
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index 6a3d4bb6d2ec..0b32c81730a5 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c | |||
@@ -47,7 +47,7 @@ void __init at91_init_irq_default(void) | |||
47 | void __init at91_init_interrupts(unsigned int *priority) | 47 | void __init at91_init_interrupts(unsigned int *priority) |
48 | { | 48 | { |
49 | /* Initialize the AIC interrupt controller */ | 49 | /* Initialize the AIC interrupt controller */ |
50 | at91_aic_init(priority); | 50 | at91_aic_init(priority, at91_extern_irq); |
51 | 51 | ||
52 | /* Enable GPIO interrupts */ | 52 | /* Enable GPIO interrupts */ |
53 | at91_gpio_irq_setup(); | 53 | at91_gpio_irq_setup(); |