|
@@ -1006,7 +1006,7 @@ static int jz4740_mmc_probe(struct platform_device* pdev)
|
|
|
|
|
|
ret = jz4740_mmc_request_gpios(mmc, pdev);
|
|
|
if (ret)
|
|
|
- goto err_release_dma;
|
|
|
+ goto err_free_host;
|
|
|
|
|
|
mmc->ops = &jz4740_mmc_ops;
|
|
|
mmc->f_min = JZ_MMC_CLK_RATE / 128;
|
|
@@ -1038,16 +1038,17 @@ static int jz4740_mmc_probe(struct platform_device* pdev)
|
|
|
jz4740_mmc_clock_disable(host);
|
|
|
timer_setup(&host->timeout_timer, jz4740_mmc_timeout, 0);
|
|
|
|
|
|
- host->use_dma = true;
|
|
|
- if (host->use_dma && jz4740_mmc_acquire_dma_channels(host) != 0)
|
|
|
- host->use_dma = false;
|
|
|
+ ret = jz4740_mmc_acquire_dma_channels(host);
|
|
|
+ if (ret == -EPROBE_DEFER)
|
|
|
+ goto err_free_irq;
|
|
|
+ host->use_dma = !ret;
|
|
|
|
|
|
platform_set_drvdata(pdev, host);
|
|
|
ret = mmc_add_host(mmc);
|
|
|
|
|
|
if (ret) {
|
|
|
dev_err(&pdev->dev, "Failed to add mmc host: %d\n", ret);
|
|
|
- goto err_free_irq;
|
|
|
+ goto err_release_dma;
|
|
|
}
|
|
|
dev_info(&pdev->dev, "JZ SD/MMC card driver registered\n");
|
|
|
|
|
@@ -1057,13 +1058,13 @@ static int jz4740_mmc_probe(struct platform_device* pdev)
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
+err_release_dma:
|
|
|
+ if (host->use_dma)
|
|
|
+ jz4740_mmc_release_dma_channels(host);
|
|
|
err_free_irq:
|
|
|
free_irq(host->irq, host);
|
|
|
err_free_gpios:
|
|
|
jz4740_mmc_free_gpios(pdev);
|
|
|
-err_release_dma:
|
|
|
- if (host->use_dma)
|
|
|
- jz4740_mmc_release_dma_channels(host);
|
|
|
err_free_host:
|
|
|
mmc_free_host(mmc);
|
|
|
|