Message ID | 20200114013442.28448-2-digetx@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | NVIDIA Tegra I2C driver fixes and improvements | expand |
On Tue, Jan 14, 2020 at 04:34:35AM +0300, Dmitry Osipenko wrote: > I noticed that sometime I2C clock is kept enabled during suspend-resume. > This happens because runtime PM defers dynamic suspension and thus it may > happen that runtime PM is in active state when system enters into suspend. > In particular I2C controller that is used for CPU's DVFS is often kept ON > during suspend because CPU's voltage scaling happens quite often. > > Fixes: 8ebf15e9c869 ("i2c: tegra: Move suspend handling to NOIRQ phase") > Cc: <stable@vger.kernel.org> # v5.4+ > Tested-by: Thierry Reding <treding@nvidia.com> > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Applied to for-current, thanks!
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index a98bf31d0e5c..79d19f6ce94e 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -1710,9 +1710,14 @@ static int tegra_i2c_remove(struct platform_device *pdev) static int __maybe_unused tegra_i2c_suspend(struct device *dev) { struct tegra_i2c_dev *i2c_dev = dev_get_drvdata(dev); + int err; i2c_mark_adapter_suspended(&i2c_dev->adapter); + err = pm_runtime_force_suspend(dev); + if (err < 0) + return err; + return 0; } @@ -1733,6 +1738,10 @@ static int __maybe_unused tegra_i2c_resume(struct device *dev) if (err) return err; + err = pm_runtime_force_resume(dev); + if (err < 0) + return err; + i2c_mark_adapter_resumed(&i2c_dev->adapter); return 0;