[SDHCI] Initialise Marvell CAFÉ controller with/without write-protect

David Woodhouse dwmw2 at infradead.org
Thu Nov 2 22:07:23 EST 2006


Commit:     66b92381533d570263ea8c709049859229e408ff
Parent:     bb5ae6ddf2ff42502d52d3cae843ba59589fff29
commit 66b92381533d570263ea8c709049859229e408ff
Author:     David Woodhouse <dwmw2 at infradead.org>
AuthorDate: Fri Nov 3 11:10:50 2006 +0800
Commit:     David Woodhouse <dwmw2 at infradead.org>
CommitDate: Fri Nov 3 11:10:50 2006 +0800

    [SDHCI] Initialise Marvell CAFÉ controller with/without write-protect
    
    Signed-off-by: David Woodhouse <dwmw2 at infradead.org>
---
 drivers/mmc/sdhci.c |   21 ++++++++++++++++-----
 1 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index daafb82..5ad520d 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -156,17 +156,28 @@ static void sdhci_reset(struct sdhci_hos
 	}
 }
 
+static int cafe_wp;
+module_param(cafe_wp, int, 0444);
+
 static void sdhci_init(struct sdhci_host *host)
 {
 	u32 intmask;
 
 	sdhci_reset(host, SDHCI_RESET_ALL);
 
-	/* write bits to some magic register to turn on the device;
-	 * FIXME: this should only be done for CAFE chip!  -dilinger */
-	writeb(0x06, host->ioaddr + 0x3038);
-	writel(0x60006, host->ioaddr + 0x315C);
-	/* XXX: any delays necessary? */
+	if (host->chip->pdev->vendor == 0x11ab &&
+	    host->chip->pdev->device == 0x4101) {
+		/* Marvell CAFÉ controller --
+		   Write bits to some magic register to turn on the device. */
+		if (cafe_wp) {
+			writeb(0x04, host->ioaddr + 0x3038);
+			writel(0x40004, host->ioaddr + 0x315C);
+		} else {
+			writeb(0x06, host->ioaddr + 0x3038);
+			writel(0x60006, host->ioaddr + 0x315C);
+		}
+		/* XXX: any delays necessary? */
+	}
 
 	intmask = SDHCI_INT_BUS_POWER | SDHCI_INT_DATA_END_BIT |
 		SDHCI_INT_DATA_CRC | SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_INDEX |


More information about the Commits-kernel mailing list