mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
i2c: imx-lpi2c: avoid taking clk_prepare mutex in PM callbacks
This is unsafe, as the runtime PM callbacks are called from the PM workqueue, so this may deadlock when handling an i2c attached clock, which may already hold the clk_prepare mutex from another context. Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com> Signed-off-by: Wolfram Sang <wsa@kernel.org>
This commit is contained in:
parent
c770657bd2
commit
fa39065833
1 changed files with 2 additions and 2 deletions
|
@ -639,7 +639,7 @@ static int __maybe_unused lpi2c_runtime_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
|
struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
|
||||||
|
|
||||||
clk_bulk_disable_unprepare(lpi2c_imx->num_clks, lpi2c_imx->clks);
|
clk_bulk_disable(lpi2c_imx->num_clks, lpi2c_imx->clks);
|
||||||
pinctrl_pm_select_sleep_state(dev);
|
pinctrl_pm_select_sleep_state(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -651,7 +651,7 @@ static int __maybe_unused lpi2c_runtime_resume(struct device *dev)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pinctrl_pm_select_default_state(dev);
|
pinctrl_pm_select_default_state(dev);
|
||||||
ret = clk_bulk_prepare_enable(lpi2c_imx->num_clks, lpi2c_imx->clks);
|
ret = clk_bulk_enable(lpi2c_imx->num_clks, lpi2c_imx->clks);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "failed to enable I2C clock, ret=%d\n", ret);
|
dev_err(dev, "failed to enable I2C clock, ret=%d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue