r6040: use __aligned(size)
[cascardo/linux.git] / drivers / mmc / host / sdhci-of-esdhc.c
index fe604df..01e5f62 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Freescale eSDHC controller driver.
  *
- * Copyright (c) 2007 Freescale Semiconductor, Inc.
+ * Copyright (c) 2007, 2010 Freescale Semiconductor, Inc.
  * Copyright (c) 2009 MontaVista Software, Inc.
  *
  * Authors: Xiaobo Xie <X.Xie@freescale.com>
@@ -15,6 +15,7 @@
 
 #include <linux/io.h>
 #include <linux/delay.h>
+#include <linux/module.h>
 #include <linux/mmc/host.h>
 #include "sdhci-pltfm.h"
 #include "sdhci-esdhc.h"
 static u16 esdhc_readw(struct sdhci_host *host, int reg)
 {
        u16 ret;
+       int base = reg & ~0x3;
+       int shift = (reg & 0x2) * 8;
 
        if (unlikely(reg == SDHCI_HOST_VERSION))
-               ret = in_be16(host->ioaddr + reg);
+               ret = in_be32(host->ioaddr + base) & 0xffff;
        else
-               ret = sdhci_be32bs_readw(host, reg);
+               ret = (in_be32(host->ioaddr + base) >> shift) & 0xffff;
+       return ret;
+}
+
+static u8 esdhc_readb(struct sdhci_host *host, int reg)
+{
+       int base = reg & ~0x3;
+       int shift = (reg & 0x3) * 8;
+       u8 ret = (in_be32(host->ioaddr + base) >> shift) & 0xff;
        return ret;
 }
 
@@ -74,7 +85,7 @@ static unsigned int esdhc_of_get_min_clock(struct sdhci_host *host)
 static struct sdhci_ops sdhci_esdhc_ops = {
        .read_l = sdhci_be32bs_readl,
        .read_w = esdhc_readw,
-       .read_b = sdhci_be32bs_readb,
+       .read_b = esdhc_readb,
        .write_l = sdhci_be32bs_writel,
        .write_w = esdhc_writew,
        .write_b = esdhc_writeb,
@@ -114,13 +125,10 @@ static struct platform_driver sdhci_esdhc_driver = {
                .name = "sdhci-esdhc",
                .owner = THIS_MODULE,
                .of_match_table = sdhci_esdhc_of_match,
+               .pm = SDHCI_PLTFM_PMOPS,
        },
        .probe = sdhci_esdhc_probe,
        .remove = __devexit_p(sdhci_esdhc_remove),
-#ifdef CONFIG_PM
-       .suspend = sdhci_pltfm_suspend,
-       .resume = sdhci_pltfm_resume,
-#endif
 };
 
 static int __init sdhci_esdhc_init(void)