mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
mailbox: imx: Use devm_pm_runtime_enable()
sashiko complained about early usage of the device while probe isn't completed. This can be mitigated by delaying the pm_runtime_enable() into the removal path instead doing it early. This ensures that in an error case the device is removed (and imx_mu_shutdown()) before pm_runtime_disable() so we don't have to do this manually. For the order to work, lets move devm_mbox_controller_register() until after the pm-runtime part. So the reverse order will be mbox-controller removal followed by disabling pm runtime. Use devm_pm_runtime_enable(), remove manual pm_runtime_disable() invocations and move the pm_runtime handling in probe before devm_mbox_controller_register(). Reviewed-by: Peng Fan <peng.fan@nxp.com> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
This commit is contained in:
parent
5ccea7eacb
commit
1f602619e4
|
|
@ -966,38 +966,36 @@ static int imx_mu_probe(struct platform_device *pdev)
|
|||
|
||||
platform_set_drvdata(pdev, priv);
|
||||
|
||||
ret = devm_mbox_controller_register(dev, &priv->mbox);
|
||||
if (ret)
|
||||
ret = devm_pm_runtime_enable(dev);
|
||||
if (ret < 0)
|
||||
goto disable_clk;
|
||||
|
||||
of_platform_populate(dev->of_node, NULL, NULL, dev);
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
ret = pm_runtime_resume_and_get(dev);
|
||||
if (ret < 0)
|
||||
goto disable_runtime_pm;
|
||||
goto disable_clk;
|
||||
|
||||
ret = pm_runtime_put_sync(dev);
|
||||
if (ret < 0)
|
||||
goto disable_runtime_pm;
|
||||
goto disable_clk;
|
||||
|
||||
clk_disable_unprepare(priv->clk);
|
||||
|
||||
ret = devm_mbox_controller_register(dev, &priv->mbox);
|
||||
if (ret)
|
||||
goto err_out;
|
||||
|
||||
of_platform_populate(dev->of_node, NULL, NULL, dev);
|
||||
|
||||
return 0;
|
||||
|
||||
disable_runtime_pm:
|
||||
pm_runtime_disable(dev);
|
||||
disable_clk:
|
||||
clk_disable_unprepare(priv->clk);
|
||||
err_out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void imx_mu_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct imx_mu_priv *priv = platform_get_drvdata(pdev);
|
||||
|
||||
pm_runtime_disable(priv->dev);
|
||||
}
|
||||
|
||||
static const struct imx_mu_dcfg imx_mu_cfg_imx6sx = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user