aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorBridge Wu <mingqiao.wu@gmail.com>2007-09-25 13:09:19 -0400
committerPierre Ossman <drzeus@drzeus.cx>2007-09-25 13:11:39 -0400
commitdf456f479aa6fdc812df51627c6f2c21d8a1aed8 (patch)
tree8f8dd50213d429850e974fb3e996e5a150c8e1b2 /drivers/mmc
parentfe2dc44eac1223a0e92859242f58fd2a58a6f8fa (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.c10
-rw-r--r--drivers/mmc/host/pxamci.h1
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)