mmc: renesas-sdhi: Add proper probe error fail path
In case one of the calls in probe fail, trigger a fail path and undo all the steps done in probe until the point of failure. The current implementation failed to stop controller clock and free claimed clock, so fix that. Furthermore, print return code in error prints for easier debugging. Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
This commit is contained in:
parent
6ddffa89cb
commit
f20a61af42
|
|
@ -982,37 +982,45 @@ static int renesas_sdhi_probe(struct udevice *dev)
|
||||||
} else {
|
} else {
|
||||||
ret = clk_set_rate(&priv->clkh, 800000000);
|
ret = clk_set_rate(&priv->clkh, 800000000);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "failed to set rate for SDnH clock\n");
|
dev_err(dev, "failed to set rate for SDnH clock (%d)\n", ret);
|
||||||
clk_free(&priv->clk);
|
goto err_clk;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set to max rate */
|
/* set to max rate */
|
||||||
ret = clk_set_rate(&priv->clk, 200000000);
|
ret = clk_set_rate(&priv->clk, 200000000);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "failed to set rate for host clock\n");
|
dev_err(dev, "failed to set rate for SDn clock (%d)\n", ret);
|
||||||
clk_free(&priv->clk);
|
goto err_clkh;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = clk_enable(&priv->clk);
|
ret = clk_enable(&priv->clk);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(dev, "failed to enable host clock\n");
|
dev_err(dev, "failed to enable SDn clock (%d)\n", ret);
|
||||||
return ret;
|
goto err_clkh;
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->quirks = quirks;
|
priv->quirks = quirks;
|
||||||
ret = tmio_sd_probe(dev, quirks);
|
ret = tmio_sd_probe(dev, quirks);
|
||||||
|
if (ret)
|
||||||
|
goto err_tmio_probe;
|
||||||
|
|
||||||
renesas_sdhi_filter_caps(dev);
|
renesas_sdhi_filter_caps(dev);
|
||||||
|
|
||||||
#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) || \
|
#if CONFIG_IS_ENABLED(MMC_UHS_SUPPORT) || \
|
||||||
CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) || \
|
CONFIG_IS_ENABLED(MMC_HS200_SUPPORT) || \
|
||||||
CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
|
CONFIG_IS_ENABLED(MMC_HS400_SUPPORT)
|
||||||
if (!ret && (priv->caps & TMIO_SD_CAP_RCAR_UHS))
|
if (priv->caps & TMIO_SD_CAP_RCAR_UHS)
|
||||||
renesas_sdhi_reset_tuning(priv);
|
renesas_sdhi_reset_tuning(priv);
|
||||||
#endif
|
#endif
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err_tmio_probe:
|
||||||
|
clk_disable(&priv->clk);
|
||||||
|
err_clkh:
|
||||||
|
clk_free(&priv->clkh);
|
||||||
|
err_clk:
|
||||||
|
clk_free(&priv->clk);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue