From 2249409876a2b8f198d7f9689ebf41d71920863b Mon Sep 17 00:00:00 2001 From: Teresa Remmet <t.remmet@phytec.de> Date: Mon, 11 Jan 2021 11:34:02 +0100 Subject: [PATCH] i2c: imx: Fix ABBA deadlock again Like other i2c controllers we see deadlock issues with clock prepare mutex. In our case this came up with a clock output of a rtc connected to i2c bus. This issue has already been fixed upstream by: (d9a22d713acb) i2c: imx: avoid taking clk_prepare mutex in PM callbacks But was reintroduced by a wrongly resolved merge conflict with this commit: (d59c71856a8e) MLK-11403: I2C: imx: restore pin setting for i2c So again we keep the i2c clock prepared and only enable and disable it for a transfer. REFERENCE: https://github.com/nxp-imx/linux-imx/pull/21 --- drivers/i2c/busses/i2c-imx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 8aaf40593070ac..6fc44a423b78bb 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -1755,7 +1755,7 @@ static int __maybe_unused i2c_imx_runtime_suspend(struct device *dev) { struct imx_i2c_struct *i2c_imx = dev_get_drvdata(dev); - clk_disable_unprepare(i2c_imx->clk); + clk_disable(i2c_imx->clk); pinctrl_pm_select_sleep_state(dev); return 0; @@ -1767,7 +1767,7 @@ static int __maybe_unused i2c_imx_runtime_resume(struct device *dev) int ret; pinctrl_pm_select_default_state(dev); - ret = clk_prepare_enable(i2c_imx->clk); + ret = clk_enable(i2c_imx->clk); if (ret) dev_err(dev, "can't enable I2C clock, ret=%d\n", ret); -- GitLab