Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cac3a478 authored by Heiner Kallweit's avatar Heiner Kallweit Committed by Ulf Hansson
Browse files

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: default avatarMichał Zegan <webczat_200@poczta.onet.pl>
Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
Acked-by: default avatarKevin Hilman <khilman@baylibre.com>
Tested-by: default avatarKevin Hilman <khilman@baylibre.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent e9883ef2
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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);

	ret = meson_mmc_clk_set(host, host->mmc->f_min);
	if (!ret)
	if (ret)
		clk_disable_unprepare(host->cfg_div_clk);

	return ret;
@@ -771,7 +771,7 @@ static int meson_mmc_probe(struct platform_device *pdev)
					meson_mmc_irq_thread, IRQF_SHARED,
					DRIVER_NAME, host);
	if (ret)
		goto free_host;
		goto err_div_clk;

	mmc->max_blk_count = CMD_CFG_LENGTH_MASK;
	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)
	if (host->bounce_buf == NULL) {
		dev_err(host->dev, "Unable to map allocate DMA bounce buffer.\n");
		ret = -ENOMEM;
		goto free_host;
		goto err_div_clk;
	}

	mmc->ops = &meson_mmc_ops;
@@ -792,8 +792,9 @@ static int meson_mmc_probe(struct platform_device *pdev)

	return 0;

free_host:
err_div_clk:
	clk_disable_unprepare(host->cfg_div_clk);
free_host:
	clk_disable_unprepare(host->core_clk);
	mmc_free_host(mmc);
	return ret;