Re: [PATCH] mfd: twl-core: disable irq while suspended

2019-04-01 Thread Lee Jones
On Sat, 23 Feb 2019, Andreas Kemnade wrote:

> Since commit
> 6e2bd956936 ("i2c: omap: Use noirq system sleep pm ops to idle device for 
> suspend")
> on gta04 we have handle_twl4030_pih() called in situations where 
> pm_runtime_get()
> in i2c-omap.c returns -EACCES.
> [   86.474365] Freezing remaining freezable tasks ... (elapsed 0.002 seconds) 
> done.
> [   86.485473] printk: Suspending console(s) (use no_console_suspend to debug)
> [   86.72] Disabling non-boot CPUs ...
> [   86.555664] Successfully put all powerdomains to target state
> [   86.563720] twl: Read failed (mod 1, reg 0x01 count 1)
> [   86.563751] twl4030: I2C error -13 reading PIH ISR
> [   86.563812] twl: Read failed (mod 1, reg 0x01 count 1)
> [   86.563812] twl4030: I2C error -13 reading PIH ISR
> [   86.563873] twl: Read failed (mod 1, reg 0x01 count 1)
> [   86.563903] twl4030: I2C error -13 reading PIH ISR
> 
> This happens when we wakeup via something behing twl4030
> (powerbutton or rtc alarm).
> This goes on for minutes until the system is finally resumed.
> Disable the irq on suspend and enable it on resume to avoid
> having i2c access problems when the irq registers are checked.
> 
> Signed-off-by: Andreas Kemnade 
> ---
>  drivers/mfd/twl-core.c | 23 +++
>  1 file changed, 23 insertions(+)

Applied, thanks.

-- 
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog


Re: [PATCH] mfd: twl-core: disable irq while suspended

2019-02-28 Thread Andreas Kemnade
Hi,

On Sat, 23 Feb 2019 10:23:23 -0800
Tony Lindgren  wrote:

> * Andreas Kemnade  [190223 11:48]:
> > Since commit
> > 6e2bd956936 ("i2c: omap: Use noirq system sleep pm ops to idle device for 
> > suspend")
> > on gta04 we have handle_twl4030_pih() called in situations where 
> > pm_runtime_get()
> > in i2c-omap.c returns -EACCES.
> > [   86.474365] Freezing remaining freezable tasks ... (elapsed 0.002 
> > seconds) done.
> > [   86.485473] printk: Suspending console(s) (use no_console_suspend to 
> > debug)
> > [   86.72] Disabling non-boot CPUs ...
> > [   86.555664] Successfully put all powerdomains to target state
> > [   86.563720] twl: Read failed (mod 1, reg 0x01 count 1)
> > [   86.563751] twl4030: I2C error -13 reading PIH ISR
> > [   86.563812] twl: Read failed (mod 1, reg 0x01 count 1)
> > [   86.563812] twl4030: I2C error -13 reading PIH ISR
> > [   86.563873] twl: Read failed (mod 1, reg 0x01 count 1)
> > [   86.563903] twl4030: I2C error -13 reading PIH ISR
> > 
> > This happens when we wakeup via something behing twl4030
> > (powerbutton or rtc alarm).
> > This goes on for minutes until the system is finally resumed.
> > Disable the irq on suspend and enable it on resume to avoid
> > having i2c access problems when the irq registers are checked.  
> 
> Thanks for fixing this, still works fine for me for rtcwake:
> 
> Tested-by: Tony Lindgren 
> 
hmm, in which version we will see this regression fixed?

I consider this whole thing as a reminder to finally
improve my automated test facilities and finally add the suspend/power
consumption test scripts I have to it so I can catch such things earlier.

Regards,
Andreas


pgp6s9ib6PNT9.pgp
Description: OpenPGP digital signature


Re: [PATCH] mfd: twl-core: disable irq while suspended

2019-02-23 Thread Tony Lindgren
* Andreas Kemnade  [190223 11:48]:
> Since commit
> 6e2bd956936 ("i2c: omap: Use noirq system sleep pm ops to idle device for 
> suspend")
> on gta04 we have handle_twl4030_pih() called in situations where 
> pm_runtime_get()
> in i2c-omap.c returns -EACCES.
> [   86.474365] Freezing remaining freezable tasks ... (elapsed 0.002 seconds) 
> done.
> [   86.485473] printk: Suspending console(s) (use no_console_suspend to debug)
> [   86.72] Disabling non-boot CPUs ...
> [   86.555664] Successfully put all powerdomains to target state
> [   86.563720] twl: Read failed (mod 1, reg 0x01 count 1)
> [   86.563751] twl4030: I2C error -13 reading PIH ISR
> [   86.563812] twl: Read failed (mod 1, reg 0x01 count 1)
> [   86.563812] twl4030: I2C error -13 reading PIH ISR
> [   86.563873] twl: Read failed (mod 1, reg 0x01 count 1)
> [   86.563903] twl4030: I2C error -13 reading PIH ISR
> 
> This happens when we wakeup via something behing twl4030
> (powerbutton or rtc alarm).
> This goes on for minutes until the system is finally resumed.
> Disable the irq on suspend and enable it on resume to avoid
> having i2c access problems when the irq registers are checked.

Thanks for fixing this, still works fine for me for rtcwake:

Tested-by: Tony Lindgren 


[PATCH] mfd: twl-core: disable irq while suspended

2019-02-23 Thread Andreas Kemnade
Since commit
6e2bd956936 ("i2c: omap: Use noirq system sleep pm ops to idle device for 
suspend")
on gta04 we have handle_twl4030_pih() called in situations where 
pm_runtime_get()
in i2c-omap.c returns -EACCES.
[   86.474365] Freezing remaining freezable tasks ... (elapsed 0.002 seconds) 
done.
[   86.485473] printk: Suspending console(s) (use no_console_suspend to debug)
[   86.72] Disabling non-boot CPUs ...
[   86.555664] Successfully put all powerdomains to target state
[   86.563720] twl: Read failed (mod 1, reg 0x01 count 1)
[   86.563751] twl4030: I2C error -13 reading PIH ISR
[   86.563812] twl: Read failed (mod 1, reg 0x01 count 1)
[   86.563812] twl4030: I2C error -13 reading PIH ISR
[   86.563873] twl: Read failed (mod 1, reg 0x01 count 1)
[   86.563903] twl4030: I2C error -13 reading PIH ISR

This happens when we wakeup via something behing twl4030
(powerbutton or rtc alarm).
This goes on for minutes until the system is finally resumed.
Disable the irq on suspend and enable it on resume to avoid
having i2c access problems when the irq registers are checked.

Signed-off-by: Andreas Kemnade 
---
 drivers/mfd/twl-core.c | 23 +++
 1 file changed, 23 insertions(+)

diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
index 299016bc46d9..104477b512a2 100644
--- a/drivers/mfd/twl-core.c
+++ b/drivers/mfd/twl-core.c
@@ -1245,6 +1245,28 @@ twl_probe(struct i2c_client *client, const struct 
i2c_device_id *id)
return status;
 }
 
+static int __maybe_unused twl_suspend(struct device *dev)
+{
+   struct i2c_client *client = to_i2c_client(dev);
+
+   if (client->irq)
+   disable_irq(client->irq);
+
+   return 0;
+}
+
+static int __maybe_unused twl_resume(struct device *dev)
+{
+   struct i2c_client *client = to_i2c_client(dev);
+
+   if (client->irq)
+   enable_irq(client->irq);
+
+   return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(twl_dev_pm_ops, twl_suspend, twl_resume);
+
 static const struct i2c_device_id twl_ids[] = {
{ "twl4030", TWL4030_VAUX2 },   /* "Triton 2" */
{ "twl5030", 0 },   /* T2 updated */
@@ -1262,6 +1284,7 @@ static const struct i2c_device_id twl_ids[] = {
 /* One Client Driver , 4 Clients */
 static struct i2c_driver twl_driver = {
.driver.name= DRIVER_NAME,
+   .driver.pm  = _dev_pm_ops,
.id_table   = twl_ids,
.probe  = twl_probe,
.remove = twl_remove,
-- 
2.11.0