Observed some issues during the initialization of SDIO cards. The initialization sequence for SDIO card is not according to the SDIO specification. Hence the card is not getting initialized during module reload with card always present in the slot. This patch fixes the issue.
Signed-off-by: [email protected] --- drivers/mmc/core/core.c | 1 + drivers/mmc/core/sdio_ops.c | 22 ++++++++++++++++++++++ drivers/mmc/core/sdio_ops.h | 1 + 3 files changed, 24 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index d84c880..5ec7e75 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -890,6 +890,7 @@ void mmc_rescan(struct work_struct *work) mmc_claim_host(host); mmc_power_up(host); + mmc_reset_sdio(host); mmc_go_idle(host); mmc_send_if_cond(host, host->ocr_avail); diff --git a/drivers/mmc/core/sdio_ops.c b/drivers/mmc/core/sdio_ops.c index 4eb7825..2e77ab8 100644 --- a/drivers/mmc/core/sdio_ops.c +++ b/drivers/mmc/core/sdio_ops.c @@ -19,6 +19,28 @@ #include "core.h" #include "sdio_ops.h" +int mmc_reset_sdio(struct mmc_host *host) +{ + struct mmc_command cmd; + int err = 0; + + BUG_ON(!host); + + memset(&cmd, 0, sizeof(struct mmc_command)); + + cmd.opcode = SD_IO_RW_DIRECT; + cmd.arg = 0x80000000; + cmd.arg |= (SDIO_CCCR_ABORT) << 9; + cmd.arg |= (1<<3); + cmd.flags = MMC_RSP_R5 | MMC_CMD_AC; + + err = mmc_wait_for_cmd(host, &cmd, 0); + if (err) + return err; + + return 0; +} + int mmc_send_io_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr) { struct mmc_command cmd; diff --git a/drivers/mmc/core/sdio_ops.h b/drivers/mmc/core/sdio_ops.h index e2e74b0..2ef70b8 100644 --- a/drivers/mmc/core/sdio_ops.h +++ b/drivers/mmc/core/sdio_ops.h @@ -17,6 +17,7 @@ int mmc_io_rw_direct(struct mmc_card *card, int write, unsigned fn, unsigned addr, u8 in, u8* out); int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn, unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz); +int mmc_reset_sdio(struct mmc_host *host); #endif -- 1.6.0.4 _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
