diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-10-17 08:10:23 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-10-17 08:10:23 +0200 |
commit | 41be2a023dc9b8e4a790ca129b72cfa9e58be865 (patch) | |
tree | 66188250d8cc5de2c778350844d5db82a7939a40 /drivers | |
parent | ee6d4a74eb6efa643e7b834b32e04d01c6b29b7f (diff) | |
parent | f3db31188849c0f7f603789d125eb60e5f139061 (diff) | |
download | barebox-41be2a023dc9b8e4a790ca129b72cfa9e58be865.tar.gz |
Merge branch 'for-next/mmc'
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mci/imx-esdhc.c | 30 | ||||
-rw-r--r-- | drivers/mci/mci-core.c | 4 |
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; } |