diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mmc/mmc.c | 3 | ||||
-rw-r--r-- | drivers/mmc/mmc_legacy.c | 9 | ||||
-rw-r--r-- | drivers/mmc/omap_hsmmc.c | 2 |
3 files changed, 12 insertions, 2 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 3daa7488226..43ea0bba763 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 040728b45d3..25361d10f60 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 e80ac3d7220..fceafe1f156 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; } |