Merge "mmc: block: Disable clock scaling during shutdown"

This commit is contained in:
Linux Build Service Account 2017-05-25 15:51:51 -07:00 committed by Gerrit - the friendly Code Review server
commit b133f848d1
3 changed files with 24 additions and 6 deletions

View file

@ -4695,10 +4695,6 @@ static int _mmc_blk_suspend(struct mmc_card *card, bool wait)
static void mmc_blk_shutdown(struct mmc_card *card) static void mmc_blk_shutdown(struct mmc_card *card)
{ {
_mmc_blk_suspend(card, 1); _mmc_blk_suspend(card, 1);
/* send power off notification */
if (mmc_card_mmc(card))
mmc_send_pon(card);
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP

View file

@ -790,10 +790,15 @@ int mmc_resume_clk_scaling(struct mmc_host *host)
if (!mmc_can_scale_clk(host)) if (!mmc_can_scale_clk(host))
return 0; return 0;
/*
* If clock scaling is already exited when resume is called, like
* during mmc shutdown, it is not an error and should not fail the
* API calling this.
*/
if (!host->clk_scaling.devfreq) { if (!host->clk_scaling.devfreq) {
pr_err("%s: %s: no devfreq is assosiated with this device\n", pr_warn("%s: %s: no devfreq is assosiated with this device\n",
mmc_hostname(host), __func__); mmc_hostname(host), __func__);
return -EPERM; return 0;
} }
atomic_set(&host->clk_scaling.devfreq_abort, 0); atomic_set(&host->clk_scaling.devfreq_abort, 0);

View file

@ -2933,6 +2933,22 @@ static int mmc_reset(struct mmc_host *host)
return ret; return ret;
} }
static int mmc_shutdown(struct mmc_host *host)
{
struct mmc_card *card = host->card;
/*
* Exit clock scaling so that it doesn't kick in after
* power off notification is sent
*/
if (host->caps2 & MMC_CAP2_CLK_SCALE)
mmc_exit_clk_scaling(card->host);
/* send power off notification */
if (mmc_card_mmc(card))
mmc_send_pon(card);
return 0;
}
static const struct mmc_bus_ops mmc_ops = { static const struct mmc_bus_ops mmc_ops = {
.remove = mmc_remove, .remove = mmc_remove,
.detect = mmc_detect, .detect = mmc_detect,
@ -2943,6 +2959,7 @@ static const struct mmc_bus_ops mmc_ops = {
.alive = mmc_alive, .alive = mmc_alive,
.change_bus_speed = mmc_change_bus_speed, .change_bus_speed = mmc_change_bus_speed,
.reset = mmc_reset, .reset = mmc_reset,
.shutdown = mmc_shutdown,
}; };
/* /*