Message ID | 1462988400-21738-1-git-send-email-slemieux.tyco@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, May 11, 2016 at 7:40 PM, Sylvain Lemieux <slemieux.tyco@gmail.com> wrote: > From: Sylvain Lemieux <slemieux@tycoint.com> > > The "to_irq" functionality is broken inside this driver since commit > 76ba59f8366f ("genirq: Add irq_domain-aware core IRQ handler"). > > The addition of the new lpc32xx irqchip driver in 4.7, fixed the > lpc32xx platform interrupt issue. > > When switching to the new lpc32xx irqchip driver, a warning appear > in the lpc32xx gpio driver: warning: "NR_IRQS" redefined. > > To remove this warning (temporary solution), this patch > disables the broken "to_irq" mapping functionality support. > > Signed-off-by: Sylvain Lemieux <slemieux@tycoint.com> Patch applied for fixes with Vladimir's ACK. > * The final solution is to replace the existing lpc32xx gpio driver. > This work is currently in progress; refer to the following URL: > http://thread.gmane.org/gmane.linux.drivers.devicetree/144696 Hm, I see that the ambition was to merge the new irqchip driver and the new GPIO driver in the same merge window. Sorry if I was being too lazy/picky/whatever about the patch(es) I guess I didn't quite get the scope of this change. :( I should say that as long as we can agree that the new code makes the kernel as a whole a better place, I am happy to merge it. Sometimes also I need to zoom out from the GPIO and pin control subsystem(s) and see the big picture. Yours, Linus Walleij
Hi Linus, On Tue, 2016-05-24 at 12:57 +0200, Linus Walleij wrote: > On Wed, May 11, 2016 at 7:40 PM, Sylvain Lemieux > <slemieux.tyco@gmail.com> wrote: > > > From: Sylvain Lemieux <slemieux@tycoint.com> > > > > The "to_irq" functionality is broken inside this driver since commit > > 76ba59f8366f ("genirq: Add irq_domain-aware core IRQ handler"). > > > > The addition of the new lpc32xx irqchip driver in 4.7, fixed the > > lpc32xx platform interrupt issue. > > > > When switching to the new lpc32xx irqchip driver, a warning appear > > in the lpc32xx gpio driver: warning: "NR_IRQS" redefined. > > > > To remove this warning (temporary solution), this patch > > disables the broken "to_irq" mapping functionality support. > > > > Signed-off-by: Sylvain Lemieux <slemieux@tycoint.com> > > Patch applied for fixes with Vladimir's ACK. > > > * The final solution is to replace the existing lpc32xx gpio driver. > > This work is currently in progress; refer to the following URL: > > http://thread.gmane.org/gmane.linux.drivers.devicetree/144696 > > Hm, I see that the ambition was to merge the new irqchip > driver and the new GPIO driver in the same merge window. > Sorry if I was being too lazy/picky/whatever about the patch(es) > I guess I didn't quite get the scope of this change. :( > The new LPC32xx GPIO driver can go in a separate merge window; another version of the patchset is required. For 4.7, the goal was to remove the broken dependency in the existing driver. > I should say that as long as we can agree that the new code > makes the kernel as a whole a better place, I am happy to > merge it. Sometimes also I need to zoom out from the GPIO > and pin control subsystem(s) and see the big picture. > > Yours, > Linus Walleij Sylvain Lemieux
diff --git a/drivers/gpio/gpio-lpc32xx.c b/drivers/gpio/gpio-lpc32xx.c index d39014d..fc5f197 100644 --- a/drivers/gpio/gpio-lpc32xx.c +++ b/drivers/gpio/gpio-lpc32xx.c @@ -29,7 +29,6 @@ #include <mach/hardware.h> #include <mach/platform.h> -#include <mach/irqs.h> #define LPC32XX_GPIO_P3_INP_STATE _GPREG(0x000) #define LPC32XX_GPIO_P3_OUTP_SET _GPREG(0x004) @@ -371,61 +370,16 @@ static int lpc32xx_gpio_request(struct gpio_chip *chip, unsigned pin) static int lpc32xx_gpio_to_irq_p01(struct gpio_chip *chip, unsigned offset) { - return IRQ_LPC32XX_P0_P1_IRQ; + return -ENXIO; } -static const char lpc32xx_gpio_to_irq_gpio_p3_table[] = { - IRQ_LPC32XX_GPIO_00, - IRQ_LPC32XX_GPIO_01, - IRQ_LPC32XX_GPIO_02, - IRQ_LPC32XX_GPIO_03, - IRQ_LPC32XX_GPIO_04, - IRQ_LPC32XX_GPIO_05, -}; - static int lpc32xx_gpio_to_irq_gpio_p3(struct gpio_chip *chip, unsigned offset) { - if (offset < ARRAY_SIZE(lpc32xx_gpio_to_irq_gpio_p3_table)) - return lpc32xx_gpio_to_irq_gpio_p3_table[offset]; return -ENXIO; } -static const char lpc32xx_gpio_to_irq_gpi_p3_table[] = { - IRQ_LPC32XX_GPI_00, - IRQ_LPC32XX_GPI_01, - IRQ_LPC32XX_GPI_02, - IRQ_LPC32XX_GPI_03, - IRQ_LPC32XX_GPI_04, - IRQ_LPC32XX_GPI_05, - IRQ_LPC32XX_GPI_06, - IRQ_LPC32XX_GPI_07, - IRQ_LPC32XX_GPI_08, - IRQ_LPC32XX_GPI_09, - -ENXIO, /* 10 */ - -ENXIO, /* 11 */ - -ENXIO, /* 12 */ - -ENXIO, /* 13 */ - -ENXIO, /* 14 */ - -ENXIO, /* 15 */ - -ENXIO, /* 16 */ - -ENXIO, /* 17 */ - -ENXIO, /* 18 */ - IRQ_LPC32XX_GPI_19, - -ENXIO, /* 20 */ - -ENXIO, /* 21 */ - -ENXIO, /* 22 */ - -ENXIO, /* 23 */ - -ENXIO, /* 24 */ - -ENXIO, /* 25 */ - -ENXIO, /* 26 */ - -ENXIO, /* 27 */ - IRQ_LPC32XX_GPI_28, -}; - static int lpc32xx_gpio_to_irq_gpi_p3(struct gpio_chip *chip, unsigned offset) { - if (offset < ARRAY_SIZE(lpc32xx_gpio_to_irq_gpi_p3_table)) - return lpc32xx_gpio_to_irq_gpi_p3_table[offset]; return -ENXIO; }