diff options
author | Jarkko Lavinen <jarkko.lavinen@nokia.com> | 2009-09-22 19:44:34 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 10:39:33 -0400 |
commit | b1ebe38456f7fe61a88af2844361e763ac6ea5ae (patch) | |
tree | b45a2e7afe4f1f6d66d6d38dd1627fa2d6c0e7c7 /drivers/mmc/core/core.c | |
parent | eae1aeeed852aae37621b82a9e7f6c05096a18fd (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.c | 40 |
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 | } |
1186 | EXPORT_SYMBOL(mmc_power_restore_host); | 1186 | EXPORT_SYMBOL(mmc_power_restore_host); |
1187 | 1187 | ||
1188 | int 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 | } | ||
1201 | EXPORT_SYMBOL(mmc_card_awake); | ||
1202 | |||
1203 | int 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 | } | ||
1216 | EXPORT_SYMBOL(mmc_card_sleep); | ||
1217 | |||
1218 | int 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 | } | ||
1226 | EXPORT_SYMBOL(mmc_card_can_sleep); | ||
1227 | |||
1188 | #ifdef CONFIG_PM | 1228 | #ifdef CONFIG_PM |
1189 | 1229 | ||
1190 | /** | 1230 | /** |