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)
{
_mmc_blk_suspend(card, 1);
/* send power off notification */
if (mmc_card_mmc(card))
mmc_send_pon(card);
}
#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))
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) {
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__);
return -EPERM;
return 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;
}
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 = {
.remove = mmc_remove,
.detect = mmc_detect,
@ -2943,6 +2959,7 @@ static const struct mmc_bus_ops mmc_ops = {
.alive = mmc_alive,
.change_bus_speed = mmc_change_bus_speed,
.reset = mmc_reset,
.shutdown = mmc_shutdown,
};
/*