diff options
author | Thierry Reding <thierry.reding@avionic-design.de> | 2012-01-02 01:15:37 +0000 |
---|---|---|
committer | Andy Fleming <afleming@freescale.com> | 2012-01-08 21:28:27 -0600 |
commit | 48972d907a28de17c2a5108a3ee3d5f3eb434376 (patch) | |
tree | bfaf84d0cd7a3ed6e027e52cdd5cbf673ae788e7 /drivers/mmc/mmc.c | |
parent | 314284b1567f1ce29c19060641e7f213146f7ab8 (diff) | |
download | u-boot-imx-48972d907a28de17c2a5108a3ee3d5f3eb434376.zip u-boot-imx-48972d907a28de17c2a5108a3ee3d5f3eb434376.tar.gz u-boot-imx-48972d907a28de17c2a5108a3ee3d5f3eb434376.tar.bz2 |
mmc: Implement card detection.
Check for card detect each time an MMC/SD device is initialized. If card
detection is not implemented, this code behaves as before and continues
assuming a card is present. If no card is detected, has_init is reset
for the MMC/SD device (to force initialization next time) and an error
is returned.
Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Tested-by: Jason Liu <jason.hui@linaro.org>
Diffstat (limited to 'drivers/mmc/mmc.c')
-rw-r--r-- | drivers/mmc/mmc.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 11c6aa6..6db37b1 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -674,6 +674,18 @@ int mmc_switch_part(int dev_num, unsigned int part_num) | (part_num & PART_ACCESS_MASK)); } +int mmc_getcd(struct mmc *mmc) +{ + int cd; + + cd = board_mmc_getcd(mmc); + + if ((cd < 0) && mmc->getcd) + cd = mmc->getcd(mmc); + + return cd; +} + int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp) { struct mmc_cmd cmd; @@ -1202,6 +1214,12 @@ int mmc_init(struct mmc *mmc) { int err; + if (mmc_getcd(mmc) == 0) { + mmc->has_init = 0; + printf("MMC: no card present\n"); + return NO_CARD_ERR; + } + if (mmc->has_init) return 0; |