Skip to content

Commit

Permalink
mmc: core: Handle both poweroff notification types for eMMC
Browse files Browse the repository at this point in the history
Depending on the context of the operation while powering down the card,
either POWER_OFF_NOTIFY_SHORT or POWER_OFF_NOTIFY_LONG will be used. In
suspend context a short timeout is preferred while a long timeout would
be acceptable in a shutdown/hibernation context.

We add a new parameter to the mmc_suspend function so we can provide an
indication of what notification type to use.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Chris Ball <cjb@laptop.org>
  • Loading branch information
Ulf Hansson authored and Chris Ball committed Jun 27, 2013
1 parent 5992e78 commit 03d071f
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions drivers/mmc/core/mmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1464,12 +1464,11 @@ static void mmc_detect(struct mmc_host *host)
}
}

/*
* Suspend callback from host.
*/
static int mmc_suspend(struct mmc_host *host)
static int _mmc_suspend(struct mmc_host *host, bool is_suspend)
{
int err = 0;
unsigned int notify_type = is_suspend ? EXT_CSD_POWER_OFF_SHORT :
EXT_CSD_POWER_OFF_LONG;

BUG_ON(!host);
BUG_ON(!host->card);
Expand All @@ -1487,7 +1486,7 @@ static int mmc_suspend(struct mmc_host *host)
goto out;

if (mmc_can_poweroff_notify(host->card))
err = mmc_poweroff_notify(host->card, EXT_CSD_POWER_OFF_SHORT);
err = mmc_poweroff_notify(host->card, notify_type);
else if (mmc_can_sleep(host->card))
err = mmc_sleep(host);
else if (!mmc_host_is_spi(host))
Expand All @@ -1501,6 +1500,14 @@ static int mmc_suspend(struct mmc_host *host)
return err;
}

/*
* Suspend callback from host.
*/
static int mmc_suspend(struct mmc_host *host)
{
return _mmc_suspend(host, true);
}

/*
* Resume callback from host.
*
Expand Down

0 comments on commit 03d071f

Please sign in to comment.