[PATCH v7 09/11] ARM: pxa: change gpio to platform device

Chris Ball cjb at laptop.org
Fri Apr 6 00:04:22 EDT 2012


Hi Haojian,

On Tue, Nov 08 2011, Haojian Zhuang wrote:
> Remove most gpio macros and change gpio driver to platform driver.
>
> Signed-off-by: Haojian Zhuang <haojian.zhuang at marvell.com>

Please could you help me understand how this patch (which was merged
in 3.2) relates to mach-mmp's use of gpio-pxa?  The patch changes
pxa_gpio_probe() to check for gpio0/gpio1/gpio_mux in platform data:

[..]
> +static int __devinit pxa_gpio_probe(struct platform_device *pdev)
>  {
>  	struct pxa_gpio_chip *c;
> +	struct resource *res;
>  	int gpio, irq;
> +	int irq0 = 0, irq1 = 0, irq_mux, gpio_offset = 0;
>  
>  	pxa_last_gpio = pxa_gpio_nums();
>  	if (!pxa_last_gpio)
> -		return;
> +		return -EINVAL;
> +
> +	irq0 = platform_get_irq_byname(pdev, "gpio0");
> +	irq1 = platform_get_irq_byname(pdev, "gpio1");
> +	irq_mux = platform_get_irq_byname(pdev, "gpio_mux");
> +	if ((irq0 > 0 && irq1 <= 0) || (irq0 <= 0 && irq1 > 0)
> +		|| (irq_mux <= 0))
> +		return -EINVAL;

But the patch only adds these resources to arch/arm/mach-pxa/devices.c:

[..]
> diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
> index 2e04254..5bc1312 100644
> --- a/arch/arm/mach-pxa/devices.c
> +++ b/arch/arm/mach-pxa/devices.c
> @@ -1051,6 +1051,36 @@ struct platform_device pxa3xx_device_ssp4 = {
>  };
>  #endif /* CONFIG_PXA3xx || CONFIG_PXA95x */
>  
> +struct resource pxa_resource_gpio[] = {
> +	{
> +		.start	= 0x40e00000,
> +		.end	= 0x40e0ffff,
> +		.flags	= IORESOURCE_MEM,
> +	}, {
> +		.start	= IRQ_GPIO0,
> +		.end	= IRQ_GPIO0,
> +		.name	= "gpio0",
> +		.flags	= IORESOURCE_IRQ,
> +	}, {
> +		.start	= IRQ_GPIO1,
> +		.end	= IRQ_GPIO1,
> +		.name	= "gpio1",
> +		.flags	= IORESOURCE_IRQ,
> +	}, {
> +		.start	= IRQ_GPIO_2_x,
> +		.end	= IRQ_GPIO_2_x,
> +		.name	= "gpio_mux",
> +		.flags	= IORESOURCE_IRQ,
> +	},
> +};
> +
> +struct platform_device pxa_device_gpio = {
> +	.name		= "pxa-gpio",
> +	.id		= -1,
> +	.num_resources	= ARRAY_SIZE(pxa_resource_gpio),
> +	.resource	= pxa_resource_gpio,
> +};

and not anywhere under arch/arm/mach-mmp, which means that when we look
for these names on a mach-mmp device (in my case, OLPC XO-1.75/MMP2),
we hit the "return -EINVAL" above due to the missing platform resources.
Using gpio-pxa on mach-mmp devices worked fine on kernels before 3.2.

How is this supposed to work for mach-mmp boards?

Thanks,

- Chris.
-- 
Chris Ball   <cjb at laptop.org>   <http://printf.net/>
One Laptop Per Child



More information about the linux-arm-kernel mailing list