1
0
Fork 0

MLK-24363-1 mxc: emvsim: add error check when enable clk

Add error check when enable clk and register misc device at the end of
probe stage. This patch just improve and clean up the code, no function
change.

Fixes: commit d494420149 ("MLK-23793-2 mxc: emvsim: add runtime pm support")
Reviewed-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
5.4-rM2-2.2.x-imx-squashed
Joakim Zhang 2020-07-01 21:41:06 +08:00
parent 3ae547355e
commit 68f1614266
1 changed files with 22 additions and 11 deletions

View File

@ -1479,7 +1479,6 @@ copy_data:
static int emvsim_open(struct inode *inode, struct file *file)
{
int err;
int errval = SIM_OK;
struct emvsim_t *emvsim = dev_get_drvdata(emvsim_dev.parent);
@ -1492,9 +1491,9 @@ static int emvsim_open(struct inode *inode, struct file *file)
}
emvsim->open_cnt = 1;
err = pm_runtime_get_sync(emvsim_dev.parent);
if (err < 0)
return err;
errval = pm_runtime_get_sync(emvsim_dev.parent);
if (errval < 0)
return errval;
init_completion(&emvsim->xfer_done);
errval = emvsim_reset_module(emvsim);
@ -1646,18 +1645,23 @@ static int emvsim_probe(struct platform_device *pdev)
pm_runtime_set_active(&pdev->dev);
pm_runtime_enable(&pdev->dev);
ret = misc_register(&emvsim_dev);
emvsim->open_cnt = 1;
clk_prepare_enable(emvsim->ipg);
clk_prepare_enable(emvsim->clk);
ret = clk_prepare_enable(emvsim->ipg);
if (ret)
return ret;
ret = clk_prepare_enable(emvsim->clk);
if (ret) {
clk_disable_unprepare(emvsim->ipg);
return ret;
}
/* Let pm_runtime_put() disable the clocks.
* If CONFIG_PM is not enabled, the clocks will stay powered.
*/
pm_runtime_put(&pdev->dev);
emvsim->open_cnt = 0;
ret = misc_register(&emvsim_dev);
dev_info(&pdev->dev, "emvsim register %s\n", ret ? "fail" : "success");
return ret;
@ -1712,11 +1716,18 @@ static int __maybe_unused emvsim_resume(struct device *dev)
static int __maybe_unused emvsim_runtime_resume(struct device *dev)
{
int err;
struct emvsim_t *emvsim = dev_get_drvdata(dev);
if (emvsim->open_cnt) {
clk_prepare_enable(emvsim->ipg);
clk_prepare_enable(emvsim->clk);
err = clk_prepare_enable(emvsim->ipg);
if (err)
return err;
err = clk_prepare_enable(emvsim->clk);
if (err) {
clk_disable_unprepare(emvsim->ipg);
return err;
}
}
return 0;