@@ -865,6 +865,9 @@ static int omap_hsmmc_context_restore(struct omap_hsmmc_host *host)
else
hctl = SDVS30;
capa = VS30 | VS18;
+ } else if (host->pdata->controller_flags & OMAP_HSMMC_NO_1_8_V) {
+ hctl = SDVS30;
+ capa = VS30;
} else {
hctl = SDVS18;
capa = VS18;
@@ -2121,11 +2124,14 @@ static void omap_hsmmc_set_capabilities(struct omap_hsmmc_host *host)
val = OMAP_HSMMC_READ(host->base, CAPA);
- /* Only MMC1 supports 3.0V */
- if (host->pdata->controller_flags & OMAP_HSMMC_SUPPORTS_DUAL_VOLT)
+ if (host->pdata->controller_flags & OMAP_HSMMC_SUPPORTS_DUAL_VOLT) {
val |= (VS30 | VS18);
- else
+ } else if (host->pdata->controller_flags & OMAP_HSMMC_NO_1_8_V) {
+ val |= VS30;
+ val &= ~VS18;
+ } else {
val |= VS18;
+ }
OMAP_HSMMC_WRITE(host->base, CAPA, val);
}
@@ -2567,6 +2573,9 @@ static struct omap_hsmmc_platform_data *of_get_hsmmc_pdata(struct device *dev)
if (of_find_property(np, "ti,dual-volt", NULL))
pdata->controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT;
+ if (of_find_property(np, "no-1-8-v", NULL))
+ pdata->controller_flags |= OMAP_HSMMC_NO_1_8_V;
+
pdata->gpio_cd = -EINVAL;
pdata->gpio_cod = -EINVAL;
pdata->gpio_wp = -EINVAL;
@@ -23,12 +23,17 @@
* for example Advisory 2.1.1.128 "MMC: Multiple Block Read
* Operation Issue" in _OMAP3530/3525/3515/3503 Silicon Errata_
* Revision F (October 2010) (SPRZ278F).
+ *
+ * OMAP_HSMMC_NO_1_8_V: The controller does not support 1.8V IO voltage
+ * irrespective of what the capability states.
+ *
*/
#define OMAP_HSMMC_SUPPORTS_DUAL_VOLT BIT(0)
#define OMAP_HSMMC_BROKEN_MULTIBLOCK_READ BIT(1)
#define OMAP_HSMMC_SWAKEUP_MISSING BIT(2)
#define OMAP_HSMMC_REQUIRE_IODELAY BIT(3)
#define OMAP_HSMMC_HAS_HWPARAM BIT(4)
+#define OMAP_HSMMC_NO_1_8_V BIT(5)
struct omap_hsmmc_dev_attr {
u8 flags;