]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/mmc/mv_sdhci.c
karo: tx6ul: make board string dependent on cpurev
[karo-tx-uboot.git] / drivers / mmc / mv_sdhci.c
index f92caeb8fd5f43884e720f311fc9e3f58b03f6d2..75fa014931dd651afb6267711adf7228e7a7bd99 100644 (file)
@@ -12,7 +12,7 @@ static struct sdhci_ops mv_ops;
 static inline void mv_sdhci_writeb(struct sdhci_host *host, u8 val, int reg)
 {
        struct mmc *mmc = host->mmc;
-       u32 ata = (u32)host->ioaddr + SD_CE_ATA_2;
+       u32 ata = (unsigned long)host->ioaddr + SD_CE_ATA_2;
 
        if (!IS_SD(mmc) && reg == SDHCI_HOST_CONTROL) {
                if (mmc->bus_width == 8)
@@ -30,7 +30,7 @@ static inline void mv_sdhci_writeb(struct sdhci_host *host, u8 val, int reg)
 #endif /* CONFIG_MMC_SDHCI_IO_ACCESSORS */
 
 static char *MVSDH_NAME = "mv_sdh";
-int mv_sdh_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks)
+int mv_sdh_init(unsigned long regbase, u32 max_clk, u32 min_clk, u32 quirks)
 {
        struct sdhci_host *host = NULL;
        host = (struct sdhci_host *)malloc(sizeof(struct sdhci_host));
@@ -44,11 +44,12 @@ int mv_sdh_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks)
        host->quirks = quirks;
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
        memset(&mv_ops, 0, sizeof(struct sdhci_ops));
-       if (mv_sdhci_writeb != NULL)
-               mv_ops.write_b = mv_sdhci_writeb;
+       mv_ops.write_b = mv_sdhci_writeb;
        host->ops = &mv_ops;
 #endif
-       host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
-       add_sdhci(host, max_clk, min_clk);
-       return 0;
+       if (quirks & SDHCI_QUIRK_REG32_RW)
+               host->version = sdhci_readl(host, SDHCI_HOST_VERSION - 2) >> 16;
+       else
+               host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
+       return add_sdhci(host, max_clk, min_clk);
 }