summaryrefslogtreecommitdiff
path: root/drivers/mmc
diff options
context:
space:
mode:
authorThierry Reding <thierry.reding@avionic-design.de>2012-01-02 01:15:36 +0000
committerAndy Fleming <afleming@freescale.com>2012-01-08 21:28:27 -0600
commit314284b1567f1ce29c19060641e7f213146f7ab8 (patch)
tree116155fe43126dbd7a94cff179e16b084c9f1e04 /drivers/mmc
parentbfe6f6235fdfa130ad8c5a8898ef4d3a37bcad8c (diff)
mmc: Change board_mmc_getcd() function prototype.
The new API no longer uses the extra cd parameter that was used to store the card presence state. Instead, this information is returned via the function's return value. board_mmc_getcd() returns -1 to indicate that no card-detection mechanism is implemented; 0 indicates that no card is present and 1 is returned if it was detected that a card is present. The rationale for this change can be found in the following email thread: http://lists.denx.de/pipermail/u-boot/2011-November/110180.html In summary, the old API was not consistent with the rest of the MMC API which always passes a struct mmc as the first parameter. Furthermore the cd parameter was used to mean "card absence" in some implementations and "card presence" in others. Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> Tested-by: Jason Liu <jason.hui@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/fsl_esdhc.c8
-rw-r--r--drivers/mmc/mmc.c4
2 files changed, 7 insertions, 5 deletions
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index ddd1b4c6f3..f038acc863 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -419,7 +419,6 @@ static int esdhc_init(struct mmc *mmc)
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base;
int timeout = 1000;
int ret = 0;
- u8 card_absent;
/* Reset the entire host controller */
esdhc_write32(&regs->sysctl, SYSCTL_RSTA);
@@ -447,7 +446,8 @@ static int esdhc_init(struct mmc *mmc)
esdhc_clrsetbits32(&regs->sysctl, SYSCTL_TIMEOUT_MASK, 14 << 16);
/* Check if there is a callback for detecting the card */
- if (board_mmc_getcd(&card_absent, mmc)) {
+ ret = board_mmc_getcd(mmc);
+ if (ret < 0) {
timeout = 1000;
while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_CINS) &&
--timeout)
@@ -456,8 +456,10 @@ static int esdhc_init(struct mmc *mmc)
if (timeout <= 0)
ret = NO_CARD_ERR;
} else {
- if (card_absent)
+ if (ret == 0)
ret = NO_CARD_ERR;
+ else
+ ret = 0;
}
return ret;
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 98abf1c8e8..11c6aa67c1 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -40,11 +40,11 @@
static struct list_head mmc_devices;
static int cur_dev_num = -1;
-int __board_mmc_getcd(u8 *cd, struct mmc *mmc) {
+int __board_mmc_getcd(struct mmc *mmc) {
return -1;
}
-int board_mmc_getcd(u8 *cd, struct mmc *mmc)__attribute__((weak,
+int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
alias("__board_mmc_getcd")));
int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)