From d3b98e3a117bca3e400f4bf20c9c6c1a2eac553b Mon Sep 17 00:00:00 2001 From: Subhash Jadavani Date: Fri, 6 Sep 2013 19:07:07 +0530 Subject: [PATCH] mmc: core: fix possible clock gating issue during voltage switch During voltage sequence (for UHS SD/SDIO cards), host first sends the voltage switch command (CMD11) to card and then host must stop the clock at least for 5ms but currently there is a possibility (if clkgate_delay is 0) that clock may be gated off immediately after the CMD11 response from card and then get turned on before 5ms itself. This patch ensures that clock is gated off at least for 5ms after receiving the card response for voltage switch command. Change-Id: I131b3d154adab29bef367c8ce31c2f2edd159fd2 Signed-off-by: Subhash Jadavani [subhashj@codeaurora.org: fixed merge conflicts] Signed-off-by: Subhash Jadavani --- drivers/mmc/core/core.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index a4858ab50015..5970e3ced815 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1753,12 +1753,15 @@ int mmc_set_signal_voltage(struct mmc_host *host, int signal_voltage, u32 ocr) pr_warn("%s: cannot verify signal voltage switch\n", mmc_hostname(host)); - mmc_host_clk_hold(host); - cmd.opcode = SD_SWITCH_VOLTAGE; cmd.arg = 0; cmd.flags = MMC_RSP_R1 | MMC_CMD_AC; + /* + * Hold the clock reference so clock doesn't get auto gated during this + * voltage switch sequence. + */ + mmc_host_clk_hold(host); err = mmc_wait_for_cmd(host, &cmd, 0); if (err) goto err_command;