]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
omap: hsmmc: fix the hsmmc driver for am3517
authorstanley.miao <stanley.miao@windriver.com>
Thu, 13 May 2010 12:39:31 +0000 (12:39 +0000)
committerTony Lindgren <tony@atomide.com>
Thu, 20 May 2010 18:17:51 +0000 (11:17 -0700)
AM3517 don't have the register OMAP343X_CONTROL_PBIAS_LITE and the regulators
like "vmmc", so we set a noop "set_power" function for it.

Signed-off-by: Stanley.Miao <stanley.miao@windriver.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/hsmmc.c
arch/arm/plat-omap/include/plat/mmc.h

index 9ad229594b46e2f2c259d2e549d7c61525319e10..2d36f3afbd4e884d07e9f3eae45d22ec661f10b9 100644 (file)
@@ -139,6 +139,12 @@ static void hsmmc23_before_set_reg(struct device *dev, int slot,
        }
 }
 
+static int nop_mmc_set_power(struct device *dev, int slot, int power_on,
+                                                       int vdd)
+{
+       return 0;
+}
+
 static struct omap_mmc_platform_data *hsmmc_data[OMAP34XX_NR_MMC] __initdata;
 
 void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
@@ -216,11 +222,18 @@ void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
                 */
                mmc->slots[0].ocr_mask = c->ocr_mask;
 
+               if (cpu_is_omap3517() || cpu_is_omap3505())
+                       mmc->slots[0].set_power = nop_mmc_set_power;
+               else
+                       mmc->slots[0].features |= HSMMC_HAS_PBIAS;
+
                switch (c->mmc) {
                case 1:
-                       /* on-chip level shifting via PBIAS0/PBIAS1 */
-                       mmc->slots[0].before_set_reg = hsmmc1_before_set_reg;
-                       mmc->slots[0].after_set_reg = hsmmc1_after_set_reg;
+                       if (mmc->slots[0].features & HSMMC_HAS_PBIAS) {
+                               /* on-chip level shifting via PBIAS0/PBIAS1 */
+                               mmc->slots[0].before_set_reg = hsmmc1_before_set_reg;
+                               mmc->slots[0].after_set_reg = hsmmc1_after_set_reg;
+                       }
 
                        /* Omap3630 HSMMC1 supports only 4-bit */
                        if (cpu_is_omap3630() && c->wires > 4) {
@@ -235,9 +248,11 @@ void __init omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
                                c->wires = 4;
                        /* FALLTHROUGH */
                case 3:
-                       /* off-chip level shifting, or none */
-                       mmc->slots[0].before_set_reg = hsmmc23_before_set_reg;
-                       mmc->slots[0].after_set_reg = NULL;
+                       if (mmc->slots[0].features & HSMMC_HAS_PBIAS) {
+                               /* off-chip level shifting, or none */
+                               mmc->slots[0].before_set_reg = hsmmc23_before_set_reg;
+                               mmc->slots[0].after_set_reg = NULL;
+                       }
                        break;
                default:
                        pr_err("MMC%d configuration not supported!\n", c->mmc);
index a1bac07c89ebe98ee37582b5ea26af339f966473..c835f1e994c6dfd33a13b959be68f9a7ed640b57 100644 (file)
@@ -102,6 +102,10 @@ struct omap_mmc_platform_data {
                /* Regulator off remapped to sleep */
                unsigned vcc_aux_disable_is_sleep:1;
 
+               /* we can put the features above into this variable */
+#define HSMMC_HAS_PBIAS                (1 << 0)
+               unsigned features;
+
                int switch_pin;                 /* gpio (card detect) */
                int gpio_wp;                    /* gpio (write protect) */