diff options
author | Bridge Wu <mingqiao.wu@gmail.com> | 2007-09-25 13:09:19 -0400 |
---|---|---|
committer | Pierre Ossman <drzeus@drzeus.cx> | 2007-09-25 13:11:39 -0400 |
commit | df456f479aa6fdc812df51627c6f2c21d8a1aed8 (patch) | |
tree | 8f8dd50213d429850e974fb3e996e5a150c8e1b2 /drivers/mmc | |
parent | fe2dc44eac1223a0e92859242f58fd2a58a6f8fa (diff) |
mmc: pxamci: set proper buswidth capabilities according to PXA flavor
From PXA27x, it is possible to do 4-bit data transfers.
Signed-off-by: Bridge Wu <mingqiao.wu@gmail.com>
Signed-off-by: Nicolas Pitre <nico@marvell.com>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/pxamci.c | 10 | ||||
-rw-r--r-- | drivers/mmc/host/pxamci.h | 1 |
2 files changed, 10 insertions, 1 deletions
diff --git a/drivers/mmc/host/pxamci.c b/drivers/mmc/host/pxamci.c index 67acc6a00895..6549f546df55 100644 --- a/drivers/mmc/host/pxamci.c +++ b/drivers/mmc/host/pxamci.c | |||
@@ -284,7 +284,7 @@ static int pxamci_data_done(struct pxamci_host *host, unsigned int stat) | |||
284 | host->data = NULL; | 284 | host->data = NULL; |
285 | if (host->mrq->stop) { | 285 | if (host->mrq->stop) { |
286 | pxamci_stop_clock(host); | 286 | pxamci_stop_clock(host); |
287 | pxamci_start_cmd(host, host->mrq->stop, 0); | 287 | pxamci_start_cmd(host, host->mrq->stop, host->cmdat); |
288 | } else { | 288 | } else { |
289 | pxamci_finish_request(host, host->mrq); | 289 | pxamci_finish_request(host, host->mrq); |
290 | } | 290 | } |
@@ -382,6 +382,11 @@ static void pxamci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) | |||
382 | host->cmdat |= CMDAT_INIT; | 382 | host->cmdat |= CMDAT_INIT; |
383 | } | 383 | } |
384 | 384 | ||
385 | if (ios->bus_width == MMC_BUS_WIDTH_4) | ||
386 | host->cmdat |= CMDAT_SD_4DAT; | ||
387 | else | ||
388 | host->cmdat &= ~CMDAT_SD_4DAT; | ||
389 | |||
385 | pr_debug("PXAMCI: clkrt = %x cmdat = %x\n", | 390 | pr_debug("PXAMCI: clkrt = %x cmdat = %x\n", |
386 | host->clkrt, host->cmdat); | 391 | host->clkrt, host->cmdat); |
387 | } | 392 | } |
@@ -460,6 +465,9 @@ static int pxamci_probe(struct platform_device *pdev) | |||
460 | mmc->ocr_avail = host->pdata ? | 465 | mmc->ocr_avail = host->pdata ? |
461 | host->pdata->ocr_mask : | 466 | host->pdata->ocr_mask : |
462 | MMC_VDD_32_33|MMC_VDD_33_34; | 467 | MMC_VDD_32_33|MMC_VDD_33_34; |
468 | mmc->caps = 0; | ||
469 | if (!cpu_is_pxa21x() && !cpu_is_pxa25x()) | ||
470 | mmc->caps |= MMC_CAP_4_BIT_DATA; | ||
463 | 471 | ||
464 | host->sg_cpu = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, &host->sg_dma, GFP_KERNEL); | 472 | host->sg_cpu = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, &host->sg_dma, GFP_KERNEL); |
465 | if (!host->sg_cpu) { | 473 | if (!host->sg_cpu) { |
diff --git a/drivers/mmc/host/pxamci.h b/drivers/mmc/host/pxamci.h index df17c281278a..5655be823a00 100644 --- a/drivers/mmc/host/pxamci.h +++ b/drivers/mmc/host/pxamci.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #define SPI_EN (1 << 0) | 25 | #define SPI_EN (1 << 0) |
26 | 26 | ||
27 | #define MMC_CMDAT 0x0010 | 27 | #define MMC_CMDAT 0x0010 |
28 | #define CMDAT_SD_4DAT (1 << 8) | ||
28 | #define CMDAT_DMAEN (1 << 7) | 29 | #define CMDAT_DMAEN (1 << 7) |
29 | #define CMDAT_INIT (1 << 6) | 30 | #define CMDAT_INIT (1 << 6) |
30 | #define CMDAT_BUSY (1 << 5) | 31 | #define CMDAT_BUSY (1 << 5) |