[PATCH 00/19] ARM: OMAP4 device off support
Tero Kristo
t-kristo at ti.com
Fri Apr 20 10:43:22 EDT 2012
On Fri, 2012-04-20 at 06:55 -0700, Kevin Hilman wrote:
> Tero Kristo <t-kristo at ti.com> writes:
>
> [...]
>
> >> I tried your branch on gp/emu devices but could not reproduce this issue.
> >> My observation is that while resuming, omap_hsmmc.1 eMMC is
> >> trying to turn on phoenix vaux1 regulator via i2c which fails due
> >> to controller timeout.
> >> Note: eMMC is present only on sdp/blaze
> >
> > Did you try this with off-mode enabled and did you check the device
> > actually goes to off? (see pm_debug/count and verify core off count is
> > increasing.) And as said, I was only able to see this problem on a blaze
> > device, panda works fine. But yes, you are probably right and it is not
> > an MMC driver issue but I2C.
>
> Can you try the patch below? It sounds like the same problem.
Doesn't help with this one. I guess I2C loses context during device off
and it is not restored properly.
-Tero
>
> Kevin
>
>
> From 999f34629140f436099050eb7aac514bfd2a2235 Mon Sep 17 00:00:00 2001
> From: NeilBrown <neilb at suse.de>
> Date: Fri, 30 Dec 2011 12:40:30 +1100
> Subject: [PATCH] OMAP/I2C - Fix timeout problem during suspend.
>
> On a board with OMAP3 processor and TWL4030 Power management,
> we need to talk to the TWL4030 during late suspend but cannot
> because the I2C interrupt is disabled (as late suspend disables
> interrupt).
>
> e.g. I get messages like:
>
> [ 62.161102] musb-omap2430 musb-omap2430: LATE power domain suspend
> [ 63.167205] omap_i2c omap_i2c.1: controller timed out
> [ 63.183044] twl: i2c_read failed to transfer all messages
> [ 64.182861] omap_i2c omap_i2c.1: controller timed out
> [ 64.198455] twl: i2c_write failed to transfer all messages
> [ 65.198455] omap_i2c omap_i2c.1: controller timed out
> [ 65.203765] twl: i2c_write failed to transfer all messages
>
> The stack shows omap2430_runtime_suspend calling twl4030_set_suspend
> which tries to power-down the USB PHY (twl4030_phy_suspend ->
> twl4030_phy_power -> __twl4030_phy_power which as a nice WARN_ON
> that helps).
>
> Then we get the same in resume:
>
> [ 69.603912] musb-omap2430 musb-omap2430: EARLY power domain resume
> [ 70.610473] omap_i2c omap_i2c.1: controller timed out
> [ 70.626129] twl: i2c_write failed to transfer all messages
> etc.
>
> So don't disable interrupts for I2C.
>
> Signed-off-by: NeilBrown <neilb at suse.de>
> ---
> drivers/i2c/busses/i2c-omap.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
> index 801df60..e024c50 100644
> --- a/drivers/i2c/busses/i2c-omap.c
> +++ b/drivers/i2c/busses/i2c-omap.c
> @@ -1092,7 +1092,7 @@ omap_i2c_probe(struct platform_device *pdev)
>
> isr = (dev->rev < OMAP_I2C_OMAP1_REV_2) ? omap_i2c_omap1_isr :
> omap_i2c_isr;
> - r = request_irq(dev->irq, isr, 0, pdev->name, dev);
> + r = request_irq(dev->irq, isr, IRQF_NO_SUSPEND, pdev->name, dev);
>
> if (r) {
> dev_err(dev->dev, "failure requesting irq %i\n", dev->irq);
More information about the linux-arm-kernel
mailing list