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>pull/10/head
parent
dd8659f1f3
commit
bd904a8045
|
@ -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);
|
||||
|
@ -1240,7 +1250,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)
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue