I forgot to include my changes in arch/powerpc/include/asm/gpio.h: diff --git a/arch/powerpc/include/asm/gpio.h b/arch/powerpc/include/asm/gpio.h index ea04632..38762ed 100644 --- a/arch/powerpc/include/asm/gpio.h +++ b/arch/powerpc/include/asm/gpio.h @@ -38,12 +38,9 @@ static inline int gpio_cansleep(unsigned int gpio) return __gpio_cansleep(gpio); }
-/* - * Not implemented, yet. - */ static inline int gpio_to_irq(unsigned int gpio) { - return -ENOSYS; + return __gpio_to_irq(gpio); } static inline int irq_to_gpio(unsigned int irq) On Thu, Mar 5, 2009 at 12:15 PM, Henk Stegeman <henk.stege...@gmail.com> wrote: > Hello, > > I have an SPI device that sends an IRQ to the CPU (MPC5200) via GPIO (GPT6): > > gpt6: ti...@660 { // General Purpose Timer GPT6 in GPIO mode for > SMC4000IO sample irq. > compatible = "fsl,mpc5200b-gpt-gpio","fsl,mpc5200-gpt-gpio"; > cell-index = <6>; > reg = <0x660 0x10>; > interrupts = <1 15 0>; > interrupt-parent = <&mpc5200_pic>; > gpio-controller; > #gpio-cells = <2>; > }; > > s...@f00 { > #address-cells = <1>; > #size-cells = <0>; > compatible = "fsl,mpc5200b-spi","fsl,mpc5200-spi"; > reg = <0xf00 0x20>; > interrupts = <2 13 0 2 14 0>; > interrupt-parent = <&mpc5200_pic>; > gpios = <&gpt4 0 0>; > > io-control...@0 { > compatible = "microkey,smc4000io"; > linux,modalias = "of_smc4000io"; > spi-max-frequency = <1000000>; > spi-cpha; > reg = <0>; > // gpios: first is IRQ to cpu > gpios = <&gpt6 0 0>; > word-delay-us = <0>; > }; > }; > > I've got it working for a mm_gpio, but it's probably not the right > approach, I have the following questions to get to the right solution: > - Should gpiolib's gpio_to_irq function indeed return the IRQ that was > specified at the GPIO by the DTS (interrupts = <1 15 0>)? > The effect is that if the IRQ is not specified in the DTS the > gpio_to_irq returns NO_IRQ. > (On the MPC5200 the IRQ is fixed for GPT6, so instead the cell-index > could also be used to return a gpio's IRQ) > - If a GPIO controller supports several GPIOs but one IRQ, is it > defined what gpio_to_irq should return? > - Is it okay for gpio_to_irq to return NO_IRQ? (returned by > irq_of_parse_and_map) if irq is not defined? > > > Henk. > > diff --git a/drivers/of/gpio.c b/drivers/of/gpio.c > index 6eea601..81927d7 100644 > --- a/drivers/of/gpio.c > +++ b/drivers/of/gpio.c > @@ -150,6 +150,17 @@ int of_gpio_simple_xlate(struct of_gpio_chip > *of_gc, struct device_node *np, > } > EXPORT_SYMBOL(of_gpio_simple_xlate); > > +static int of_mm_gpio_to_irq(struct gpio_chip *gc, unsigned int gpio) > +{ > + struct of_mm_gpio_chip *mm_gc; > + struct of_gpio_chip *of_gc; > + > + of_gc = container_of(gc, struct of_gpio_chip, gc); > + mm_gc = container_of(of_gc, struct of_mm_gpio_chip, of_gc); > + return mm_gc->irq; > + > +} > + > /** > * of_mm_gpiochip_add - Add memory mapped GPIO chip (bank) > * @np: device node of the GPIO chip > @@ -188,6 +199,9 @@ int of_mm_gpiochip_add(struct device_node *np, > > gc->base = -1; > > + mm_gc->irq = irq_of_parse_and_map(np, 0); > + gc->to_irq = of_mm_gpio_to_irq; > + > if (!of_gc->xlate) > of_gc->xlate = of_gpio_simple_xlate; > > diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h > index fc2472c..17fe9ed 100644 > --- a/include/linux/of_gpio.h > +++ b/include/linux/of_gpio.h > @@ -54,6 +54,7 @@ struct of_mm_gpio_chip { > struct of_gpio_chip of_gc; > void (*save_regs)(struct of_mm_gpio_chip *mm_gc); > void __iomem *regs; > + int irq; > }; > > static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip > *gc) > _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev