[PATCH v4 3/8] ARM: pxa: rename gpio_to_irq and irq_to_gpio
Grant Likely
grant.likely at secretlab.ca
Thu Oct 13 15:18:48 EDT 2011
On Thu, Oct 13, 2011 at 12:07:00PM +0800, Haojian Zhuang wrote:
> Avoid to define gpio_to_irq() and irq_to_gpio() for potential name
> confliction since multiple architecture will be built together.
>
> Signed-off-by: Haojian Zhuang <haojian.zhuang at marvell.com>
> ---
> @@ -55,6 +66,49 @@ static inline struct pxa_gpio_chip *gpio_to_pxachip(unsigned gpio)
> return &pxa_gpio_chips[gpio_to_bank(gpio)];
> }
>
> +static inline int gpio_is_pxa_type(int type)
> +{
> + if (type & MMP_GPIO)
> + return 0;
> + return 1;
> +}
or simply: "return (type & MMP_GPIO) == 0;"
> +
> +static inline int gpio_is_mmp_type(int type)
> +{
> + if (type & MMP_GPIO)
> + return 1;
> + return 0;
return (type & MMP_GPIO) != 0;
> +}
> +
> +static int pxa_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
> +{
> + int gpio;
> +
> + gpio = chip->base + offset;
> +#ifdef CONFIG_ARCH_PXA
> + if (gpio_is_pxa_type(gpio_type))
> + return PXA_GPIO_TO_IRQ(gpio);
> +#endif
> +#ifdef CONFIG_ARCH_MMP
> + if (gpio_is_mmp_type(gpio_type))
> + return MMP_GPIO_TO_IRQ(gpio);
> +#endif
Blech! Ugly #ifdef blocks. It would be better to have the #ifdef
around the gpio_is_*_type macros with empty versions when the arch
isn't enabled.
> + return 0;
> +}
> +
> +int pxa_irq_to_gpio(int irq)
> +{
> +#ifdef CONFIG_ARCH_PXA
> + if (gpio_is_pxa_type(gpio_type))
> + return irq - PXA_GPIO_TO_IRQ(0);
> +#endif
> +#ifdef CONFIG_ARCH_MMP
> + if (gpio_is_mmp_type(gpio_type))
> + return irq - MMP_GPIO_TO_IRQ(0);
> +#endif
Ditto here.
> +static int pxa_gpio_nums(void)
> +{
> + int count = 0;
> +
> +#ifdef CONFIG_ARCH_PXA
> + if (cpu_is_pxa25x()) {
> +#ifdef CONFIG_CPU_PXA26x
> + count = 89;
> + gpio_type = PXA26X_GPIO;
> +#elif defined(CONFIG_PXA25x)
> + count = 84;
> + gpio_type = PXA26X_GPIO;
> +#endif /* CONFIG_CPU_PXA26x */
This isn't multiplatform friendly. My expectation is that new driver
code will not have either/or #ifdef CONFIG blocks like this. The
driver should be written in a way that either option can be turned on.
> + } else if (cpu_is_pxa27x()) {
> + count = 120;
> + gpio_type = PXA27X_GPIO;
> + } else if (cpu_is_pxa93x() || cpu_is_pxa95x()) {
> + count = 191;
> + gpio_type = PXA93X_GPIO;
> + } else if (cpu_is_pxa3xx()) {
> + count = 127;
> + gpio_type = PXA3XX_GPIO;
> + }
> +#endif /* CONFIG_ARCH_PXA */
> +
> +#ifdef CONFIG_ARCH_MMP
> + if (cpu_is_pxa168() || cpu_is_pxa910()) {
> + count = 127;
> + gpio_type = MMP_GPIO;
> + } else if (cpu_is_mmp2()) {
> + count = 191;
> + gpio_type = MMP2_GPIO;
> + }
> +#endif /* CONFIG_ARCH_MMP */
> + return count;
> +}
> +
> void __init pxa_init_gpio(int mux_irq, int start, int end, set_wake_t fn)
> {
> struct pxa_gpio_chip *c;
> int gpio, irq;
>
> - pxa_last_gpio = end;
> + pxa_last_gpio = pxa_gpio_nums();
> + if (!pxa_last_gpio)
> + return -EINVAL;
>
> /* Initialize GPIO chips */
> pxa_init_gpio_chip(end);
> --
> 1.7.2.5
>
More information about the linux-arm-kernel
mailing list