#include <asm/scatterlist.h>
#include <linux/scatterlist.h>
+#include <asm/mach-types.h>
+
#include <linux/mmc/card.h>
#include <linux/mmc/host.h>
#include <linux/mmc/protocol.h>
int bit = fls(host->ocr_avail) - 1;
host->ios.vdd = bit;
+ host->ios.clock = host->f_min;
host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN;
host->ios.chip_select = MMC_CS_DONTCARE;
host->ios.power_mode = MMC_POWER_UP;
mmc_delay(1);
- host->ios.clock = host->f_min;
host->ios.power_mode = MMC_POWER_ON;
host->ops->set_ios(host, &host->ios);
if (cmd.resp[0] & MMC_CARD_BUSY || ocr == 0)
break;
-
+ mmc_delay(1);
err = MMC_ERR_TIMEOUT;
mmc_delay(10);
mmc_decode_scr(card);
}
-
- mmc_deselect_cards(host);
+ if (!machine_is_omap_h6300()) {
+ mmc_deselect_cards(host);
+ }
}
static unsigned int mmc_calculate_clock(struct mmc_host *host)
host->ios.bus_mode = MMC_BUSMODE_PUSHPULL;
host->ops->set_ios(host, &host->ios);
+ /*
+ * Some already detectd cards get confused in the card identification
+ * mode and futher commands can fail. Doing an extra status inquiry
+ * after the identification mode seems to get cards back to their
+ * senses.
+ */
+ mmc_check_cards(host);
+
mmc_read_csds(host);
if (host->mode == MMC_MODE_SD)