Merge "mmc: block: Disable clock scaling during shutdown"
This commit is contained in:
commit
b133f848d1
3 changed files with 24 additions and 6 deletions
|
@ -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
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Add table
Reference in a new issue