mmc: block: Disable clock scaling during shutdown

During shutdown of sdhc drivers, power off notification (PON) is sent
to eMMC device. But it doesn't prevent the clock scaling framework
from kicking in and sending commands to card after PON is sent. So
exit clock scaling framework of sdhc before PON is sent.

Change-Id: Ibfe097732042458965db529f235a7fd28cfabaab
Signed-off-by: Vijay Viswanath <vviswana@codeaurora.org>
This commit is contained in:
Vijay Viswanath 2017-05-16 10:34:21 +05:30
parent 688129aafb
commit 7b46835e9f
2 changed files with 17 additions and 4 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

@ -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,
}; };
/* /*