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
parent
3ae547355e
commit
68f1614266
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue