|
@@ -1103,8 +1103,13 @@ static int mxcmci_probe(struct platform_device *pdev)
|
|
goto out_free;
|
|
goto out_free;
|
|
}
|
|
}
|
|
|
|
|
|
- clk_prepare_enable(host->clk_per);
|
|
|
|
- clk_prepare_enable(host->clk_ipg);
|
|
|
|
|
|
+ ret = clk_prepare_enable(host->clk_per);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto out_free;
|
|
|
|
+
|
|
|
|
+ ret = clk_prepare_enable(host->clk_ipg);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto out_clk_per_put;
|
|
|
|
|
|
mxcmci_softreset(host);
|
|
mxcmci_softreset(host);
|
|
|
|
|
|
@@ -1173,8 +1178,9 @@ out_free_dma:
|
|
dma_release_channel(host->dma);
|
|
dma_release_channel(host->dma);
|
|
|
|
|
|
out_clk_put:
|
|
out_clk_put:
|
|
- clk_disable_unprepare(host->clk_per);
|
|
|
|
clk_disable_unprepare(host->clk_ipg);
|
|
clk_disable_unprepare(host->clk_ipg);
|
|
|
|
+out_clk_per_put:
|
|
|
|
+ clk_disable_unprepare(host->clk_per);
|
|
|
|
|
|
out_free:
|
|
out_free:
|
|
mmc_free_host(mmc);
|
|
mmc_free_host(mmc);
|
|
@@ -1217,10 +1223,17 @@ static int __maybe_unused mxcmci_resume(struct device *dev)
|
|
{
|
|
{
|
|
struct mmc_host *mmc = dev_get_drvdata(dev);
|
|
struct mmc_host *mmc = dev_get_drvdata(dev);
|
|
struct mxcmci_host *host = mmc_priv(mmc);
|
|
struct mxcmci_host *host = mmc_priv(mmc);
|
|
|
|
+ int ret;
|
|
|
|
|
|
- clk_prepare_enable(host->clk_per);
|
|
|
|
- clk_prepare_enable(host->clk_ipg);
|
|
|
|
- return 0;
|
|
|
|
|
|
+ ret = clk_prepare_enable(host->clk_per);
|
|
|
|
+ if (ret)
|
|
|
|
+ return ret;
|
|
|
|
+
|
|
|
|
+ ret = clk_prepare_enable(host->clk_ipg);
|
|
|
|
+ if (ret)
|
|
|
|
+ clk_disable_unprepare(host->clk_per);
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
|
|
static SIMPLE_DEV_PM_OPS(mxcmci_pm_ops, mxcmci_suspend, mxcmci_resume);
|