提交 cac3a478 编写于 作者: H Heiner Kallweit 提交者: Ulf Hansson

mmc: meson-gx: fix error path in meson_mmc_clk_init / meson_mmc_probe

The condition should be "if (ret)" as the disable/unprepare is
supposed to be executed if the previous command fails.
In addition adjust the error path in probe to properly deal
with the case that cfg_div_clk can be registered successfully
but enable/prepare fails.
In this case we shouldn't call clk_disable_unprepare.
Reported-by: NMichał Zegan <webczat_200@poczta.onet.pl>
Signed-off-by: NHeiner Kallweit <hkallweit1@gmail.com>
Acked-by: NKevin Hilman <khilman@baylibre.com>
Tested-by: NKevin Hilman <khilman@baylibre.com>
Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
上级 e9883ef2
...@@ -321,7 +321,7 @@ static int meson_mmc_clk_init(struct meson_host *host) ...@@ -321,7 +321,7 @@ static int meson_mmc_clk_init(struct meson_host *host)
host->mmc->f_min = clk_round_rate(host->cfg_div_clk, 400000); host->mmc->f_min = clk_round_rate(host->cfg_div_clk, 400000);
ret = meson_mmc_clk_set(host, host->mmc->f_min); ret = meson_mmc_clk_set(host, host->mmc->f_min);
if (!ret) if (ret)
clk_disable_unprepare(host->cfg_div_clk); clk_disable_unprepare(host->cfg_div_clk);
return ret; return ret;
...@@ -771,7 +771,7 @@ static int meson_mmc_probe(struct platform_device *pdev) ...@@ -771,7 +771,7 @@ static int meson_mmc_probe(struct platform_device *pdev)
meson_mmc_irq_thread, IRQF_SHARED, meson_mmc_irq_thread, IRQF_SHARED,
DRIVER_NAME, host); DRIVER_NAME, host);
if (ret) if (ret)
goto free_host; goto err_div_clk;
mmc->max_blk_count = CMD_CFG_LENGTH_MASK; mmc->max_blk_count = CMD_CFG_LENGTH_MASK;
mmc->max_req_size = mmc->max_blk_count * mmc->max_blk_size; mmc->max_req_size = mmc->max_blk_count * mmc->max_blk_size;
...@@ -784,7 +784,7 @@ static int meson_mmc_probe(struct platform_device *pdev) ...@@ -784,7 +784,7 @@ static int meson_mmc_probe(struct platform_device *pdev)
if (host->bounce_buf == NULL) { if (host->bounce_buf == NULL) {
dev_err(host->dev, "Unable to map allocate DMA bounce buffer.\n"); dev_err(host->dev, "Unable to map allocate DMA bounce buffer.\n");
ret = -ENOMEM; ret = -ENOMEM;
goto free_host; goto err_div_clk;
} }
mmc->ops = &meson_mmc_ops; mmc->ops = &meson_mmc_ops;
...@@ -792,8 +792,9 @@ static int meson_mmc_probe(struct platform_device *pdev) ...@@ -792,8 +792,9 @@ static int meson_mmc_probe(struct platform_device *pdev)
return 0; return 0;
free_host: err_div_clk:
clk_disable_unprepare(host->cfg_div_clk); clk_disable_unprepare(host->cfg_div_clk);
free_host:
clk_disable_unprepare(host->core_clk); clk_disable_unprepare(host->core_clk);
mmc_free_host(mmc); mmc_free_host(mmc);
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册