mmc: msm_sdcc: Handle dma resource not present case
authorSubhash Jadavani <subhashj@codeaurora.org>
Mon, 2 May 2011 12:40:40 +0000 (18:10 +0530)
committerChris Ball <cjb@laptop.org>
Wed, 26 Oct 2011 19:43:37 +0000 (15:43 -0400)
If DMA resource is not available then SDCC driver
should atleast work in PIO data transfer mode.

Signed-off-by: Subhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
Signed-off-by: David Brown <davidb@codeaurora.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/host/msm_sdcc.c

index a835ac0269e077143570c276edc2aa7040a9d1b1..61c7d385fd3afbfd78f18531a7f23d2c126c942a 100644 (file)
@@ -1242,9 +1242,13 @@ msmsdcc_probe(struct platform_device *pdev)
        /*
         * Setup DMA
         */
-       ret = msmsdcc_init_dma(host);
-       if (ret)
-               goto ioremap_free;
+       if (host->dmares) {
+               ret = msmsdcc_init_dma(host);
+               if (ret)
+                       goto ioremap_free;
+       } else {
+               host->dma.channel = -1;
+       }
 
        /* Get our clocks */
        host->pclk = clk_get(&pdev->dev, "sdc_pclk");
@@ -1388,8 +1392,9 @@ msmsdcc_probe(struct platform_device *pdev)
  pclk_put:
        clk_put(host->pclk);
 dma_free:
-       dma_free_coherent(NULL, sizeof(struct msmsdcc_nc_dmadata),
-                               host->dma.nc, host->dma.nc_busaddr);
+       if (host->dmares)
+               dma_free_coherent(NULL, sizeof(struct msmsdcc_nc_dmadata),
+                                       host->dma.nc, host->dma.nc_busaddr);
 ioremap_free:
        tasklet_kill(&host->dma_tlet);
        iounmap(host->base);