aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core/core.c
diff options
context:
space:
mode:
authorJarkko Lavinen <jarkko.lavinen@nokia.com>2009-09-22 19:44:34 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 10:39:33 -0400
commitb1ebe38456f7fe61a88af2844361e763ac6ea5ae (patch)
treeb45a2e7afe4f1f6d66d6d38dd1627fa2d6c0e7c7 /drivers/mmc/core/core.c
parenteae1aeeed852aae37621b82a9e7f6c05096a18fd (diff)
mmc: add mmc card sleep and awake support
Add support for the new MMC command SLEEP_AWAKE. Signed-off-by: Jarkko Lavinen <jarkko.lavinen@nokia.com> Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com> Acked-by: Matt Fleming <matt@console-pimps.org> Cc: Ian Molton <ian@mnementh.co.uk> Cc: "Roberto A. Foglietta" <roberto.foglietta@gmail.com> Cc: Jarkko Lavinen <jarkko.lavinen@nokia.com> Cc: Denis Karpov <ext-denis.2.karpov@nokia.com> Cc: Pierre Ossman <pierre@ossman.eu> Cc: Philip Langdale <philipl@overt.org> Cc: "Madhusudhan" <madhu.cr@ti.com> Cc: <linux-mmc@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/mmc/core/core.c')
-rw-r--r--drivers/mmc/core/core.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index be1fc013fbe..828e60ea528 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -1185,6 +1185,46 @@ void mmc_power_restore_host(struct mmc_host *host)
1185} 1185}
1186EXPORT_SYMBOL(mmc_power_restore_host); 1186EXPORT_SYMBOL(mmc_power_restore_host);
1187 1187
1188int mmc_card_awake(struct mmc_host *host)
1189{
1190 int err = -ENOSYS;
1191
1192 mmc_bus_get(host);
1193
1194 if (host->bus_ops && !host->bus_dead && host->bus_ops->awake)
1195 err = host->bus_ops->awake(host);
1196
1197 mmc_bus_put(host);
1198
1199 return err;
1200}
1201EXPORT_SYMBOL(mmc_card_awake);
1202
1203int mmc_card_sleep(struct mmc_host *host)
1204{
1205 int err = -ENOSYS;
1206
1207 mmc_bus_get(host);
1208
1209 if (host->bus_ops && !host->bus_dead && host->bus_ops->awake)
1210 err = host->bus_ops->sleep(host);
1211
1212 mmc_bus_put(host);
1213
1214 return err;
1215}
1216EXPORT_SYMBOL(mmc_card_sleep);
1217
1218int mmc_card_can_sleep(struct mmc_host *host)
1219{
1220 struct mmc_card *card = host->card;
1221
1222 if (card && mmc_card_mmc(card) && card->ext_csd.rev >= 3)
1223 return 1;
1224 return 0;
1225}
1226EXPORT_SYMBOL(mmc_card_can_sleep);
1227
1188#ifdef CONFIG_PM 1228#ifdef CONFIG_PM
1189 1229
1190/** 1230/**