gpio: do not set up hardware for IRQ_TYPE_NONE
Some GPIO irqchip drivers exploit the irqdomain mapping function to set up the IRQ default type in the hardware, make sure that if we pass IRQ_TYPE_NONE, no hardware setup whatsoever takes place (this should be the norm) until later when the IRQ gets utilized. Cc: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> Cc: Santosh Shilimkar <santosh.shilimkar@ti.com> Cc: linux-omap <linux-omap@vger.kernel.org> Tested-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Tested-by: Javier Martinez Canillas <javier@dowhile0.org> Tested-by: Nishanth Menon <nm@ti.com> Acked-by: Nishanth Menon <nm@ti.com> Tested-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
95ad6b9da5
commit
1333b90f33
1 changed files with 8 additions and 2 deletions
|
@ -1409,7 +1409,12 @@ static int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
|
|||
#else
|
||||
irq_set_noprobe(irq);
|
||||
#endif
|
||||
irq_set_irq_type(irq, chip->irq_default_type);
|
||||
/*
|
||||
* No set-up of the hardware will happen if IRQ_TYPE_NONE
|
||||
* is passed as default type.
|
||||
*/
|
||||
if (chip->irq_default_type != IRQ_TYPE_NONE)
|
||||
irq_set_irq_type(irq, chip->irq_default_type);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1490,7 +1495,8 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
|
|||
* @first_irq: if not dynamically assigned, the base (first) IRQ to
|
||||
* allocate gpiochip irqs from
|
||||
* @handler: the irq handler to use (often a predefined irq core function)
|
||||
* @type: the default type for IRQs on this irqchip
|
||||
* @type: the default type for IRQs on this irqchip, pass IRQ_TYPE_NONE
|
||||
* to have the core avoid setting up any default type in the hardware.
|
||||
*
|
||||
* This function closely associates a certain irqchip with a certain
|
||||
* gpiochip, providing an irq domain to translate the local IRQs to
|
||||
|
|
Loading…
Reference in a new issue