[PATCH] gpio: pxa: Set PXA GPIO irq_chip IRQCHIP_SKIP_SET_WAKE flag

Robert Jarzmik robert.jarzmik at free.fr
Wed Apr 18 16:59:58 EDT 2012


Paul Parsons <lost.distance at yahoo.com> writes:

> I had a quick look at arch/arm/mach-pxa/mioa701.c and
> noticed that it didn't call gpio_set_wake() for GPIO0.
> Does this help:
>
> diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
> index 061d570..23190bf 100644
> --- a/arch/arm/mach-pxa/mioa701.c
> +++ b/arch/arm/mach-pxa/mioa701.c
> @@ -726,6 +726,7 @@ static void __init mioa701_machine_init(void)
>  
>  
>  	pxa2xx_mfp_config(ARRAY_AND_SIZE(mioa701_pin_config));
> +	gpio_set_wake(GPIO0_KEY_POWER, 1);
>  	pxa_set_ffuart_info(NULL);
>  	pxa_set_btuart_info(NULL);
>  	pxa_set_stuart_info(NULL);

Yes, the wakeup works again with the gpio_set_wake() call.
But that shouldn't be necessary. The legacy method that worked, if I remember
correctly, was :
 - suspend is triggered
 - gpio_keys.c: gpio_keys_suspend() is called
 - as mioa701 setup the platform data for gpio_keys_data as :
   MIO_KEY(KEY_EXIT, GPIO0_KEY_POWER, "Power button", 1),
     => implies struct gpio_keys_button has the button with .wakeup=1
   This triggers in gpio_keys_suspend():
                     -> enable_irq_wake(bdata->irq)

This enable_irq_wake() should in the end call gpio_set_wake(0, 1), but apparently
it doesn't for some reason. This the part I have to check.

Cheers.

-- 
Robert



More information about the linux-arm-kernel mailing list