linux-mmc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] MMC: atmel-mci: enable SD high speed support
@ 2010-04-19 10:12 Nicolas Ferre
  2010-04-19  9:22 ` Haavard Skinnemoen
  2010-04-27 14:36 ` [PATCH 1/4] MMC: atmel-mci: fix two parameters swapped Nicolas Ferre
  0 siblings, 2 replies; 11+ messages in thread
From: Nicolas Ferre @ 2010-04-19 10:12 UTC (permalink / raw)
  To: haavard.skinnemoen, linux-arm-kernel, akpm, linux-mmc
  Cc: linux-kernel, kernel, Nicolas Ferre

Enable high speed support for atmel-mci driver. This support is dependent of
the revision of the IP and, of course, the capacity of the SD card used.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
---
 drivers/mmc/host/atmel-mci.c |   22 +++++++++++++++++++---
 1 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index 88be37d..4338750 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -951,10 +951,21 @@ static void atmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
 		if (mci_has_rwproof())
 			host->mode_reg |= (MCI_MR_WRPROOF | MCI_MR_RDPROOF);
 
-		if (list_empty(&host->queue))
+		if (atmci_is_mci2()) {
+			/* setup High Speed mode in relation with card capacity */
+			if (ios->timing == MMC_TIMING_SD_HS)
+				host->cfg_reg |= MCI_CFG_HSMODE;
+			else
+				host->cfg_reg &= ~MCI_CFG_HSMODE;
+		}
+
+		if (list_empty(&host->queue)) {
 			mci_writel(host, MR, host->mode_reg);
-		else
+			if (atmci_is_mci2())
+				mci_writel(host, CFG, host->cfg_reg);
+		} else {
 			host->need_clock_update = true;
+		}
 
 		spin_unlock_bh(&host->lock);
 	} else {
@@ -1051,8 +1062,11 @@ static void atmci_request_end(struct atmel_mci *host, struct mmc_request *mrq)
 	 * necessary if set_ios() is called when a different slot is
 	 * busy transfering data.
 	 */
-	if (host->need_clock_update)
+	if (host->need_clock_update) {
 		mci_writel(host, MR, host->mode_reg);
+		if (atmci_is_mci2())
+			mci_writel(host, CFG, host->cfg_reg);
+	}
 
 	host->cur_slot->mrq = NULL;
 	host->mrq = NULL;
@@ -1563,6 +1577,8 @@ static int __init atmci_init_slot(struct atmel_mci *host,
 	mmc->f_min = DIV_ROUND_UP(host->bus_hz, 512);
 	mmc->f_max = host->bus_hz / 2;
 	mmc->ocr_avail	= MMC_VDD_32_33 | MMC_VDD_33_34;
+	if (atmci_is_mci2())
+		mmc->caps |= MMC_CAP_SD_HIGHSPEED;
 	if (slot_data->bus_width >= 4)
 		mmc->caps |= MMC_CAP_4_BIT_DATA;
 
-- 
1.5.6.5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2010-04-30 14:32 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-19 10:12 [PATCH] MMC: atmel-mci: enable SD high speed support Nicolas Ferre
2010-04-19  9:22 ` Haavard Skinnemoen
2010-04-27 14:36 ` [PATCH 1/4] MMC: atmel-mci: fix two parameters swapped Nicolas Ferre
2010-04-27 14:36   ` [PATCH 2/4] MMC: atmel-mci: prevent kernel oops while removing card Nicolas Ferre
2010-04-27 14:36   ` [PATCH 3/4] MMC: atmel-mci: remove data error interrupt after xfer Nicolas Ferre
2010-04-27 14:36   ` [PATCH 4/4] MMC: atmel-mci: Add support for SDIO interrupts Nicolas Ferre
2010-04-30 14:32     ` [PATCH] MMC: atmel-mci: fix in debugfs: response value printing Nicolas Ferre
2010-04-27 15:27   ` [PATCH 1/4] MMC: atmel-mci: fix two parameters swapped Sergei Shtylyov
2010-04-27 15:34     ` Nicolas Ferre
2010-04-28 18:22   ` Andrew Morton
2010-04-29  7:45     ` Nicolas Ferre

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).