Commit 31ee9181 authored by Tony Lindgren's avatar Tony Lindgren

mmc: omap: Fix DMA configuration to not rely on device id

We are wrongly relying on device id for the DMA configuration
which can lead to wrong DMA channel being selected.

Fix the issue by using the standard resources like we should.

Cc: linux-mmc@vger.kernel.org
Acked-by: default avatarChris Ball <cjb@laptop.org>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 30023a7e
...@@ -90,17 +90,6 @@ ...@@ -90,17 +90,6 @@
#define OMAP_MMC_CMDTYPE_AC 2 #define OMAP_MMC_CMDTYPE_AC 2
#define OMAP_MMC_CMDTYPE_ADTC 3 #define OMAP_MMC_CMDTYPE_ADTC 3
#define OMAP_DMA_MMC_TX 21
#define OMAP_DMA_MMC_RX 22
#define OMAP_DMA_MMC2_TX 54
#define OMAP_DMA_MMC2_RX 55
#define OMAP24XX_DMA_MMC2_TX 47
#define OMAP24XX_DMA_MMC2_RX 48
#define OMAP24XX_DMA_MMC1_TX 61
#define OMAP24XX_DMA_MMC1_RX 62
#define DRIVER_NAME "mmci-omap" #define DRIVER_NAME "mmci-omap"
/* Specifies how often in millisecs to poll for card status changes /* Specifies how often in millisecs to poll for card status changes
...@@ -1330,7 +1319,7 @@ static int mmc_omap_probe(struct platform_device *pdev) ...@@ -1330,7 +1319,7 @@ static int mmc_omap_probe(struct platform_device *pdev)
struct mmc_omap_host *host = NULL; struct mmc_omap_host *host = NULL;
struct resource *res; struct resource *res;
dma_cap_mask_t mask; dma_cap_mask_t mask;
unsigned sig; unsigned sig = 0;
int i, ret = 0; int i, ret = 0;
int irq; int irq;
...@@ -1407,19 +1396,20 @@ static int mmc_omap_probe(struct platform_device *pdev) ...@@ -1407,19 +1396,20 @@ static int mmc_omap_probe(struct platform_device *pdev)
host->dma_tx_burst = -1; host->dma_tx_burst = -1;
host->dma_rx_burst = -1; host->dma_rx_burst = -1;
if (mmc_omap2()) res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
sig = host->id == 0 ? OMAP24XX_DMA_MMC1_TX : OMAP24XX_DMA_MMC2_TX; if (res)
else sig = res->start;
sig = host->id == 0 ? OMAP_DMA_MMC_TX : OMAP_DMA_MMC2_TX; host->dma_tx = dma_request_slave_channel_compat(mask,
host->dma_tx = dma_request_channel(mask, omap_dma_filter_fn, &sig); omap_dma_filter_fn, &sig, &pdev->dev, "tx");
if (!host->dma_tx) if (!host->dma_tx)
dev_warn(host->dev, "unable to obtain TX DMA engine channel %u\n", dev_warn(host->dev, "unable to obtain TX DMA engine channel %u\n",
sig); sig);
if (mmc_omap2())
sig = host->id == 0 ? OMAP24XX_DMA_MMC1_RX : OMAP24XX_DMA_MMC2_RX; res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
else if (res)
sig = host->id == 0 ? OMAP_DMA_MMC_RX : OMAP_DMA_MMC2_RX; sig = res->start;
host->dma_rx = dma_request_channel(mask, omap_dma_filter_fn, &sig); host->dma_rx = dma_request_slave_channel_compat(mask,
omap_dma_filter_fn, &sig, &pdev->dev, "rx");
if (!host->dma_rx) if (!host->dma_rx)
dev_warn(host->dev, "unable to obtain RX DMA engine channel %u\n", dev_warn(host->dev, "unable to obtain RX DMA engine channel %u\n",
sig); sig);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment