From 4a76bb8458cbe93309314c58f276087569b2fc48 Mon Sep 17 00:00:00 2001 From: Gao Pan Date: Fri, 18 Aug 2017 18:35:11 +0800 Subject: [PATCH] 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 Signed-off-by: Gao Pan Signed-off-by: Vipul Kumar (cherry picked from commit 93adab71408f1f162015e77715dd04ce2301d673) --- drivers/i2c/busses/i2c-imx.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -896,10 +896,17 @@ static int i2c_imx_xfer(struct i2c_adapt 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; @@ -971,6 +978,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); @@ -1259,7 +1269,7 @@ static int i2c_imx_resume(struct device } 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) };