diff options
author | Gao Pan <pandy.gao@nxp.com> | 2017-08-18 18:35:11 +0800 |
---|---|---|
committer | Leonard Crestez <leonard.crestez@nxp.com> | 2018-08-24 12:41:33 +0300 |
commit | 360d0e1f825042fc4ab118a1184e1d920a59984e (patch) | |
tree | 080dc5b0a7ff38a47c44d52ea268e699e2e9b9b6 /drivers/i2c/busses | |
parent | 8907f9c94417405fb441025949678b97e997fddd (diff) |
MLK-16203 enable runtime pm of i2c temporary when do system suspend
When we do system suspend, the runtime pm will be disabled, but we need
to control the PMIC to power on/off the regulator, if the runtime pm is
disabled, if will failed to request runtime wakeup. So data transfer will
failed.
Signed-off-by: Bai Ping <ping.bai@nxp.com>
Signed-off-by: Gao Pan <pandy.gao@nxp.com>
Diffstat (limited to 'drivers/i2c/busses')
-rw-r--r-- | drivers/i2c/busses/i2c-imx.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index fab088d8ba12..56865b2022c3 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -884,10 +884,17 @@ static int i2c_imx_xfer(struct i2c_adapter *adapter, unsigned int i, temp; int result; bool is_lastmsg = false; + bool enable_runtime_pm = false; struct imx_i2c_struct *i2c_imx = i2c_get_adapdata(adapter); dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__); + + if (!pm_runtime_enabled(i2c_imx->adapter.dev.parent)) { + pm_runtime_enable(i2c_imx->adapter.dev.parent); + enable_runtime_pm = true; + } + result = pm_runtime_get_sync(i2c_imx->adapter.dev.parent); if (result < 0) goto out; @@ -959,6 +966,9 @@ fail0: pm_runtime_put_autosuspend(i2c_imx->adapter.dev.parent); out: + if (enable_runtime_pm) + pm_runtime_disable(i2c_imx->adapter.dev.parent); + dev_dbg(&i2c_imx->adapter.dev, "<%s> exit with: %s: %d\n", __func__, (result < 0) ? "error" : "success msg", (result < 0) ? result : num); @@ -1239,7 +1249,7 @@ static int i2c_imx_resume(struct device *dev) } static const struct dev_pm_ops i2c_imx_pm_ops = { - SET_SYSTEM_SLEEP_PM_OPS(i2c_imx_suspend, i2c_imx_resume) + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(i2c_imx_suspend, i2c_imx_resume) SET_RUNTIME_PM_OPS(i2c_imx_runtime_suspend, i2c_imx_runtime_resume, NULL) }; |