Skip to content

Commit

Permalink
mmc: sh_mmcif: maximize power saving
Browse files Browse the repository at this point in the history
This patch uses runtime PM to allow the system to power down the MMC
controller, when the MMC closk is switched off.

Signed-off-by: Guennadi Liakhovetski <[email protected]>
Signed-off-by: Chris Ball <[email protected]>
  • Loading branch information
lyakh authored and cjb committed Jul 21, 2011
1 parent 71d111c commit c9b0cef
Showing 1 changed file with 18 additions and 9 deletions.
27 changes: 18 additions & 9 deletions drivers/mmc/host/sh_mmcif.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ struct sh_mmcif_host {
enum mmcif_state state;
spinlock_t lock;
bool power;
bool card_present;

/* DMA support */
struct dma_chan *chan_rx;
Expand Down Expand Up @@ -877,32 +878,40 @@ static void sh_mmcif_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
spin_unlock_irqrestore(&host->lock, flags);

if (ios->power_mode == MMC_POWER_UP) {
if (p->set_pwr)
p->set_pwr(host->pd, ios->power_mode);
if (!host->power) {
if (!host->card_present) {
/* See if we also get DMA */
sh_mmcif_request_dma(host, host->pd->dev.platform_data);
pm_runtime_get_sync(&host->pd->dev);
host->power = true;
host->card_present = true;
}
} else if (ios->power_mode == MMC_POWER_OFF || !ios->clock) {
/* clock stop */
sh_mmcif_clock_control(host, 0);
if (ios->power_mode == MMC_POWER_OFF) {
if (host->power) {
pm_runtime_put(&host->pd->dev);
if (host->card_present) {
sh_mmcif_release_dma(host);
host->power = false;
host->card_present = false;
}
}
if (host->power) {
pm_runtime_put(&host->pd->dev);
host->power = false;
if (p->down_pwr)
p->down_pwr(host->pd);
}
host->state = STATE_IDLE;
return;
}

if (ios->clock)
if (ios->clock) {
if (!host->power) {
if (p->set_pwr)
p->set_pwr(host->pd, ios->power_mode);
pm_runtime_get_sync(&host->pd->dev);
host->power = true;
sh_mmcif_sync_reset(host);
}
sh_mmcif_clock_control(host, ios->clock);
}

host->bus_width = ios->bus_width;
host->state = STATE_IDLE;
Expand Down

0 comments on commit c9b0cef

Please sign in to comment.