summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJohan Rudholm <johan.rudholm@axis.com>2015-01-12 15:38:06 +0100
committerUlf Hansson <ulf.hansson@linaro.org>2015-01-19 09:56:28 +0100
commitdc0ecfef29c60d3765f8e7991b3a4527733238b1 (patch)
tree7211940653a7201ad99cc07df6f243619bf71851 /drivers
parentmmc: core: refactor the hw_reset routines (diff)
downloadlinux-dc0ecfef29c60d3765f8e7991b3a4527733238b1.tar.xz
linux-dc0ecfef29c60d3765f8e7991b3a4527733238b1.zip
mmc: sd: add reset bus_ops callback
Enable power cycle and re-initialization of SD cards via the reset bus_ops. Power cycling a buggy SD card sometimes helps it get back on track. Signed-off-by: Johan Rudholm <johanru@axis.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/core/sd.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 29fccdcacd68..36d5333838cb 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -1197,6 +1197,12 @@ static int mmc_sd_power_restore(struct mmc_host *host)
return ret;
}
+static int mmc_sd_reset(struct mmc_host *host)
+{
+ mmc_power_cycle(host, host->card->ocr);
+ return mmc_sd_power_restore(host);
+}
+
static const struct mmc_bus_ops mmc_sd_ops = {
.remove = mmc_sd_remove,
.detect = mmc_sd_detect,
@@ -1207,6 +1213,7 @@ static const struct mmc_bus_ops mmc_sd_ops = {
.power_restore = mmc_sd_power_restore,
.alive = mmc_sd_alive,
.shutdown = mmc_sd_suspend,
+ .reset = mmc_sd_reset,
};
/*