[GIT PULL] gpio/omap: cleanups for v3.5
DebBarma, Tarun Kanti
tarun.kanti at ti.com
Thu Jun 14 13:54:10 EDT 2012
On Thu, Jun 14, 2012 at 5:45 AM, NeilBrown <neilb at suse.de> wrote:
> On Fri, 11 May 2012 17:30:48 -0700 Kevin Hilman <khilman at ti.com> wrote:
>
>> Hi Grant,
>>
>> Here's the final round of GPIO cleanups for v3.5. This branch is based
>> on my for_3.5/fixes/gpio branch you just pulled.
>>
>> Kevin
>
> Hi.
>
> I'm not sure if it was this series or the following cleanups which broke
> things for me, but I've been trying 3.5-rc2 on my GTA04 and the serial
> console (ttyO2) dies as soon as the omap-gpio driver initialises.
>
> After some digging I came up with this patch to gpio-omap.c
>
> @@ -1124,6 +1124,9 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
>
> platform_set_drvdata(pdev, bank);
>
> + if (bank->get_context_loss_count)
> + bank->context_loss_count =
> + bank->get_context_loss_count(bank->dev);
> pm_runtime_enable(bank->dev);
> pm_runtime_irq_safe(bank->dev);
> pm_runtime_get_sync(bank->dev);
>
> which fixes it.
>
> What was happening was that when omap_gpio_probe calls pm_runtime_get_sync,
> it calls
> _od_runtime_resume -> pm_generic_runtime_resume -> omap_gpio_runtime_resume
> -> omap_gpio_restore_context
>
> and then the serial port stops.
> I reasoned that the context probably hadn't been set up yet, so restoring
> from it broke things.
> Initialising bank->context_loss_count seems sensible and would ensure that
> we didn't try to restore the context until it has actually been lost.
I thought the following code exactly does that. That is context_lost_cnt_after
would be zero until there is context loss. The bank->context_loss_count is zero
at the beginning. So, (context_lost_cnt_after != bank->context_loss_count) would
be false and hence context restore should NOT happen? Not sure if I am
over looking
anything here....
omap_gpio_runtime_resume(...)
{
...
if (bank->get_context_loss_count) {
context_lost_cnt_after =
bank->get_context_loss_count(bank->dev);
if (context_lost_cnt_after != bank->context_loss_count) {
omap_gpio_restore_context(bank);
} else {
spin_unlock_irqrestore(&bank->lock, flags);
return 0;
}
}
...
}
--
Tarun
>
> Thanks,
> NeilBrown
More information about the linux-arm-kernel
mailing list