[PATCH v2 4/4] mmc: sd: add hw_reset callback

Johan Rudholm
2014-11-04T15:07:25Z

Enable power cycle and re-initialization of SD cards via the hw_reset
bus_ops. Power cycling a buggy SD card sometimes helps it get back on
track.

Signed-off-by: Johan Rudholm <johanru@axis.com>
---
drivers/mmc/core/sd.c | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 0c44510..383320e 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -1177,6 +1177,18 @@ static int mmc_sd_runtime_resume(struct mmc_host *host)
return 0;
}

+static int mmc_sd_hw_reset(struct mmc_host *host, int test)
+{
+ struct mmc_card *card = host->card;
+
+ if (test == MMC_HW_RESET_TEST)
+ return 0;
+
+ mmc_power_cycle(host, card->ocr);
+
+ return 0;
+}
+
static int mmc_sd_power_restore(struct mmc_host *host)
{
int ret;
@@ -1198,6 +1210,7 @@ static const struct mmc_bus_ops mmc_sd_ops = {
.power_restore = mmc_sd_power_restore,
.alive = mmc_sd_alive,
.shutdown = mmc_sd_suspend,
+ .hw_reset = mmc_sd_hw_reset,
};

/*
--
1.7.2.5