Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 738a0fd7 authored by Nicolas Ferre's avatar Nicolas Ferre
Browse files

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: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: default avatarJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Acked-by: default avatarLudovic Desroches <ludovic.desroches@atmel.com>
Cc: stable <stable@vger.kernel.org> [v3.6]
parent 3d9a0183
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -26,7 +26,8 @@ extern void __init at91_dt_initialize(void);
extern void __init at91_init_irq_default(void);
extern void __init at91_init_irq_default(void);
extern void __init at91_init_interrupts(unsigned int priority[]);
extern void __init at91_init_interrupts(unsigned int priority[]);
extern void __init at91x40_init_interrupts(unsigned int priority[]);
extern void __init at91x40_init_interrupts(unsigned int priority[]);
extern void __init at91_aic_init(unsigned int priority[]);
extern void __init at91_aic_init(unsigned int priority[],
				 unsigned int ext_irq_mask);
extern int  __init at91_aic_of_init(struct device_node *node,
extern int  __init at91_aic_of_init(struct device_node *node,
				    struct device_node *parent);
				    struct device_node *parent);
extern int  __init at91_aic5_of_init(struct device_node *node,
extern int  __init at91_aic5_of_init(struct device_node *node,
+7 −2
Original line number Original line Diff line number Diff line
@@ -502,14 +502,19 @@ int __init at91_aic5_of_init(struct device_node *node,
/*
/*
 * Initialize the AIC interrupt controller.
 * Initialize the AIC interrupt controller.
 */
 */
void __init at91_aic_init(unsigned int *priority)
void __init at91_aic_init(unsigned int *priority, unsigned int ext_irq_mask)
{
{
	unsigned int i;
	unsigned int i;
	int irq_base;
	int irq_base;


	if (at91_aic_pm_init())
	at91_extern_irq = kzalloc(BITS_TO_LONGS(n_irqs)
				  * sizeof(*at91_extern_irq), GFP_KERNEL);

	if (at91_aic_pm_init() || at91_extern_irq == NULL)
		panic("Unable to allocate bit maps\n");
		panic("Unable to allocate bit maps\n");


	*at91_extern_irq = ext_irq_mask;

	at91_aic_base = ioremap(AT91_AIC, 512);
	at91_aic_base = ioremap(AT91_AIC, 512);
	if (!at91_aic_base)
	if (!at91_aic_base)
		panic("Unable to ioremap AIC registers\n");
		panic("Unable to ioremap AIC registers\n");
+1 −1
Original line number Original line Diff line number Diff line
@@ -47,7 +47,7 @@ void __init at91_init_irq_default(void)
void __init at91_init_interrupts(unsigned int *priority)
void __init at91_init_interrupts(unsigned int *priority)
{
{
	/* Initialize the AIC interrupt controller */
	/* Initialize the AIC interrupt controller */
	at91_aic_init(priority);
	at91_aic_init(priority, at91_extern_irq);


	/* Enable GPIO interrupts */
	/* Enable GPIO interrupts */
	at91_gpio_irq_setup();
	at91_gpio_irq_setup();