summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/dts/k2g-evm.dts8
-rw-r--r--arch/arm/dts/k2g.dtsi23
-rw-r--r--configs/k2g_evm_defconfig1
-rw-r--r--drivers/mmc/mmc.c3
-rw-r--r--drivers/mmc/mmc_legacy.c9
-rw-r--r--drivers/mmc/omap_hsmmc.c2
6 files changed, 44 insertions, 2 deletions
diff --git a/arch/arm/dts/k2g-evm.dts b/arch/arm/dts/k2g-evm.dts
index e95efd4..61d0d55 100644
--- a/arch/arm/dts/k2g-evm.dts
+++ b/arch/arm/dts/k2g-evm.dts
@@ -100,3 +100,11 @@
};
};
};
+
+&mmc0 {
+ status = "okay";
+};
+
+&mmc1 {
+ status = "okay";
+};
diff --git a/arch/arm/dts/k2g.dtsi b/arch/arm/dts/k2g.dtsi
index 00cd492..add03b7 100644
--- a/arch/arm/dts/k2g.dtsi
+++ b/arch/arm/dts/k2g.dtsi
@@ -149,5 +149,28 @@
#size-cells = <0>;
status = "disabled";
};
+
+ mmc0: mmc@23000000 {
+ compatible = "ti,omap4-hsmmc";
+ reg = <0x23000000 0x400>;
+ interrupts = <GIC_SPI 96 IRQ_TYPE_EDGE_RISING>;
+ bus-width = <4>;
+ ti,needs-special-reset;
+ no-1-8-v;
+ max-frequency = <96000000>;
+ status = "disabled";
+ };
+
+ mmc1: mmc@23100000 {
+ compatible = "ti,omap4-hsmmc";
+ reg = <0x23100000 0x400>;
+ interrupts = <GIC_SPI 97 IRQ_TYPE_EDGE_RISING>;
+ bus-width = <8>;
+ ti,needs-special-reset;
+ ti,non-removable;
+ max-frequency = <96000000>;
+ status = "disabled";
+ clock-names = "fck";
+ };
};
};
diff --git a/configs/k2g_evm_defconfig b/configs/k2g_evm_defconfig
index 5d44e8d..825de72 100644
--- a/configs/k2g_evm_defconfig
+++ b/configs/k2g_evm_defconfig
@@ -32,6 +32,7 @@ CONFIG_DM_SPI_FLASH=y
CONFIG_SPI_FLASH=y
CONFIG_SPI_FLASH_STMICRO=y
CONFIG_DM_ETH=y
+CONFIG_DM_MMC=y
CONFIG_REMOTEPROC_TI_POWER=y
CONFIG_SYS_NS16550=y
CONFIG_USB=y
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 3daa748..43ea0bb 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -422,6 +422,9 @@ static int mmc_complete_op_cond(struct mmc *mmc)
mmc->op_cond_pending = 0;
if (!(mmc->ocr & OCR_BUSY)) {
+ /* Some cards seem to need this */
+ mmc_go_idle(mmc);
+
start = get_timer(0);
while (1) {
err = mmc_send_op_cond_iter(mmc, 1);
diff --git a/drivers/mmc/mmc_legacy.c b/drivers/mmc/mmc_legacy.c
index 040728b..25361d1 100644
--- a/drivers/mmc/mmc_legacy.c
+++ b/drivers/mmc/mmc_legacy.c
@@ -115,10 +115,15 @@ struct mmc *mmc_create(const struct mmc_config *cfg, void *priv)
struct mmc *mmc;
/* quick validation */
- if (cfg == NULL || cfg->ops == NULL || cfg->ops->send_cmd == NULL ||
- cfg->f_min == 0 || cfg->f_max == 0 || cfg->b_max == 0)
+ if (cfg == NULL || cfg->f_min == 0 ||
+ cfg->f_max == 0 || cfg->b_max == 0)
return NULL;
+#ifndef CONFIG_DM_MMC_OPS
+ if (cfg->ops == NULL || cfg->ops->send_cmd == NULL)
+ return NULL;
+#endif
+
mmc = calloc(1, sizeof(*mmc));
if (mmc == NULL)
return NULL;
diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c
index e80ac3d..fceafe1 100644
--- a/drivers/mmc/omap_hsmmc.c
+++ b/drivers/mmc/omap_hsmmc.c
@@ -801,7 +801,9 @@ static int omap_hsmmc_ofdata_to_platdata(struct udevice *dev)
cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
+#ifdef OMAP_HSMMC_USE_GPIO
priv->cd_inverted = fdtdec_get_bool(fdt, node, "cd-inverted");
+#endif
return 0;
}