summaryrefslogtreecommitdiffstats
path: root/drivers/mci
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-10-17 08:10:23 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2019-10-17 08:10:23 +0200
commit41be2a023dc9b8e4a790ca129b72cfa9e58be865 (patch)
tree66188250d8cc5de2c778350844d5db82a7939a40 /drivers/mci
parentee6d4a74eb6efa643e7b834b32e04d01c6b29b7f (diff)
parentf3db31188849c0f7f603789d125eb60e5f139061 (diff)
downloadbarebox-41be2a023dc9b8e4a790ca129b72cfa9e58be865.tar.gz
barebox-41be2a023dc9b8e4a790ca129b72cfa9e58be865.tar.xz
Merge branch 'for-next/mmc'
Diffstat (limited to 'drivers/mci')
-rw-r--r--drivers/mci/imx-esdhc.c30
-rw-r--r--drivers/mci/mci-core.c4
2 files changed, 28 insertions, 6 deletions
diff --git a/drivers/mci/imx-esdhc.c b/drivers/mci/imx-esdhc.c
index f71ca539ed..db3450a26d 100644
--- a/drivers/mci/imx-esdhc.c
+++ b/drivers/mci/imx-esdhc.c
@@ -653,20 +653,24 @@ static int fsl_esdhc_probe(struct device_d *dev)
dma_set_mask(dev, DMA_BIT_MASK(32));
host->clk = clk_get(dev, socdata->clkidx);
- if (IS_ERR(host->clk))
- return PTR_ERR(host->clk);
+ if (IS_ERR(host->clk)) {
+ ret = PTR_ERR(host->clk);
+ goto err_free;
+ }
ret = clk_enable(host->clk);
if (ret) {
dev_err(dev, "Failed to enable clock: %s\n",
strerror(ret));
- return ret;
+ goto err_clk_put;
}
host->dev = dev;
iores = dev_request_mem_resource(dev, 0);
- if (IS_ERR(iores))
- return PTR_ERR(iores);
+ if (IS_ERR(iores)) {
+ ret = PTR_ERR(iores);
+ goto err_clk_disable;
+ }
host->regs = IOMEM(iores->start);
caps = esdhc_read32(host, SDHCI_CAPABILITIES);
@@ -709,7 +713,21 @@ static int fsl_esdhc_probe(struct device_d *dev)
dev->priv = host;
- return mci_register(&host->mci);
+ ret = mci_register(&host->mci);
+ if (ret)
+ goto err_release_res;
+
+ return 0;
+
+err_release_res:
+ release_region(iores);
+err_clk_disable:
+ clk_disable(host->clk);
+err_clk_put:
+ clk_put(host->clk);
+err_free:
+ free(host);
+ return ret;
}
static struct esdhc_soc_data esdhc_imx25_data = {
diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
index 67257bcd18..9e39cbbb55 100644
--- a/drivers/mci/mci-core.c
+++ b/drivers/mci/mci-core.c
@@ -1819,6 +1819,10 @@ int mci_register(struct mci_host *host)
host->supply = regulator_get(host->hw_dev, "vmmc");
if (IS_ERR(host->supply)) {
+ if (host->supply == ERR_PTR(-EPROBE_DEFER)) {
+ ret = -EPROBE_DEFER;
+ goto err_free;
+ }
dev_err(&mci->dev, "Failed to get 'vmmc' regulator.\n");
host->supply = NULL;
}