[PATCH v4 3/8] ARM: pxa: rename gpio_to_irq and irq_to_gpio
Haojian Zhuang
haojian.zhuang at gmail.com
Fri Oct 14 04:27:13 EDT 2011
On Fri, Oct 14, 2011 at 3:18 AM, Grant Likely <grant.likely at secretlab.ca> wrote:
> 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;
>
Your code is better than me. I'll change it.
>> +}
>> +
>> +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.
>
OK. I'll append some small API to cover the transition. So #ifdef will
around the new API.
>> + 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.
>
Yes, it's not friendly. But the question is that I can't identify
PXA26x by cpuid.
Now we have to identify pxa25x and pxa26x depends on the macro
CONFIG_CPU_PXA26x.
>> + } 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
>>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
More information about the linux-arm-kernel
mailing list