Re: [PATCH V2 4/32] mmc: add ability to save power by powering off cards

Adrian Hunter
2009-07-30T07:16:18Z

Madhusudhan wrote:
>
>> -----Original Message-----
>> From: linux-omap-owner@vger.kernel.org [mailto:linux-omap-
>> owner@vger.kernel.org] On Behalf Of Adrian Hunter
>> Sent: Tuesday, July 28, 2009 5:39 AM
>> To: Andrew Morton
>> Cc: Jarkko Lavinen; Adrian Hunter; linux-omap Mailing List; Pierre Ossman;
>> Denis Karpov; Matt Fleming; lkml
>> Subject: [PATCH V2 4/32] mmc: add ability to save power by powering off
>> cards
>>
>> From e6355578d082d94707c8fda1e1342c478019b5c8 Mon Sep 17 00:00:00 2001
>> From: Adrian Hunter <adrian.hunter@nokia.com>
>> Date: Mon, 11 May 2009 12:20:57 +0300
>> Subject: [PATCH] mmc: add ability to save power by powering off cards
>>
>> Power can be saved by powering off cards that are not
>> in use. This is similar to suspend / resume except
>> it is under the control of the driver, and does not
>> require any power management support. It can only
>> be used when the driver can monitor whether the card
>> is removed, otherwise it is unsafe. This is possible
>> because, unlike suspend, the driver still receives
>> card detect and / or cover switch interrupts.
>>
>> Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
>> ---
>> drivers/mmc/core/core.c | 34 ++++++++++++++++++++++++++++++++++
>> drivers/mmc/core/core.h | 2 ++
>> drivers/mmc/core/mmc.c | 11 +++++++++++
>> drivers/mmc/core/sd.c | 11 +++++++++++
>> include/linux/mmc/host.h | 3 +++
>> 5 files changed, 61 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
>> index bab5015..39f7bd1 100644
>> --- a/drivers/mmc/core/core.c
>> +++ b/drivers/mmc/core/core.c
>> @@ -1145,6 +1145,40 @@ void mmc_stop_host(struct mmc_host *host)
>> mmc_power_off(host);
>> }
>>
>> +void mmc_power_save_host(struct mmc_host *host)
>> +{
>> + mmc_bus_get(host);
>> +
>> + if (!host->bus_ops || host->bus_dead || !host->bus_ops-
>>> power_restore) {
>> + mmc_bus_put(host);
>> + return;
>> + }
>> +
>> + if (host->bus_ops->power_save)
>> + host->bus_ops->power_save(host);
>> +
>> + mmc_bus_put(host);
>> +
>> + mmc_power_off(host);
>> +}
>> +EXPORT_SYMBOL(mmc_power_save_host);
>> +
>> +void mmc_power_restore_host(struct mmc_host *host)
>> +{
>> + mmc_bus_get(host);
>> +
>> + if (!host->bus_ops || host->bus_dead || !host->bus_ops-
>>> power_restore) {
>> + mmc_bus_put(host);
>> + return;
>> + }
>> +
>> + mmc_power_up(host);
>> + host->bus_ops->power_restore(host);
>> +
>> + mmc_bus_put(host);
>> +}
>> +EXPORT_SYMBOL(mmc_power_restore_host);
>> +
>
> Who calls these exported functions " mmc_power_save_host" and "
> mmc_power_restore_host"?

The present design has the host driver calling them i.e. for us it
is omap_hsmmc. See the "support for deeper power saving states"
patch.