Subject: Panda ES board hang when using GPIO as interrupt

From: [email-masked] (Franky Lin)
Date: Thu, 28 Jun 2012 17:59:04 -0700

On 06/28/2012 04:54 PM, Jon Hunter wrote:
> I am wondering if this could be the bug ... on start-up I see that we do
> a context restore on bank1 during the probe which is before we have done
> the first suspend! In other words, we could restore a bad/uninitialised
> context for bank1. In the case of bank1, the loss count starts at 1 and
> not 0 and so we falsely think we need to perform a restore :-(
>
> [    0.176269] omap_gpio_runtime_resume: bank @ 0xfc310000
> [    0.177276] omap_gpio_runtime_resume: count 0, now 1
> [    0.177276] gpiochip_add: registered GPIOs 0 to 31 on device: gpio
> [    0.177642] omap_gpio_runtime_suspend: bank @ 0xfc310000
>
> Can you try ...
>
> diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
> index c4ed172..9623408 100644
> --- a/drivers/gpio/gpio-omap.c
> +++ b/drivers/gpio/gpio-omap.c
> @@ -1086,6 +1086,9 @@ static int __devinit omap_gpio_probe(struct
> platform_device *pdev)
>   #ifdef CONFIG_OF_GPIO
>          bank->chip.of_node = of_node_get(node);
>   #endif
> +       if (bank->get_context_loss_count)
> +               bank->context_loss_count =
> +                               bank->get_context_loss_count(bank->dev);
>
>          bank->irq_base = irq_alloc_descs(-1, 0, bank->width, 0);
>          if (bank->irq_base < 0) {
>

Looks like you found the culprit. :) It does fix the problem.

Franky