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 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html