zaurus spitz suspend/resume issue

Pavel Machek pavel at ucw.cz
Tue Apr 20 09:36:24 EDT 2010


Hi!

> >>    Since resuming my spitz from a suspended state doesn't work in 2.6.34-rc3
> >>    at the moment, I've tried to find out what the problem is with
> >>    suspend/resume. Using CONFIG_PM_DEBUG I tried to test this by setting
> >>    /sys/power/pm_test to "core" and switching the device off with the power
> >>    button. This indeed suspends and resumes the device, but shows following
> >>    in the system log:
> >
> > It works here.
> 
> Or maybe we should allow these GPIOs to wakeup the system when either
> configured as generic GPIOs or keypad GPIOs.

So... there's a bug in pxa-keypad driver -- it enables wakeup on one
line when it needs wakeup on all.

So we invented a workaround, in mfp-pxa2xx.c, where we change wakeup
on many lines when pxa-keypad wants to toggle wakeup on one.

But that workaround causes problems, so we

> diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c b/arch/arm/mach-pxa/mfp-pxa2xx.c
> index cf6b720..29301d2 100644
> --- a/arch/arm/mach-pxa/mfp-pxa2xx.c
> +++ b/arch/arm/mach-pxa/mfp-pxa2xx.c
> @@ -178,8 +178,17 @@ int gpio_set_wake(unsigned int gpio, unsigned int on)
> -	if (d->keypad_gpio)
> -		return -EINVAL;
> +	/* Allow keypad GPIOs to wakeup system when
> +	 * configured as generic GPIOs.
> +	 */
> +	if (d->keypad_gpio && (MFP_AF(d->config) == 0) &&
> +	    (d->config & MFP_LPM_CAN_WAKEUP)) {
> +		if (on)
> +			PKWR |= d->mask;
> +		else
> +			PKWR &= ~d->mask;
> +		return 0;
> +	}

Add more hacks on top.

What about simply fixing pxa-keypad? Then we can git of workaround,
and spitz will be fixed.

Fix should be as simple as replacing enable_irq_wakeup() with more
enable_irq_wakeup()s. 
								Pavel
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html



More information about the linux-arm-kernel mailing list