OSDN Git Service

mmc: core: Use mmc_reset instead of power_restore
authorSayali Lokhande <sayalil@codeaurora.org>
Mon, 24 Apr 2017 08:10:50 +0000 (13:40 +0530)
committerVijay Viswanath <vviswana@codeaurora.org>
Wed, 3 May 2017 06:46:53 +0000 (12:16 +0530)
On 4.4 kernel, 'commit 364549ddc29d ("mmc: core: Remove
redundant ->power_restore() callback for MMC")' removed
power_restore callback for MMC since mmc_reset is
implemented. Hence use reset instead of power_restore in
mmc_cmdq_hw_reset. Also modify the caller function mmc_cmdq_hw_reset
to properly use the mmc_reset.

Change-Id: Ia06d579401b6a083b164dff7a253d1eb3caef1a3
Signed-off-by: Sayali Lokhande <sayalil@codeaurora.org>
Signed-off-by: Vijay Viswanath <vviswana@codeaurora.org>
drivers/mmc/core/core.c
drivers/mmc/core/mmc.c

index 8bdb965..c462eee 100644 (file)
@@ -3944,12 +3944,10 @@ static void mmc_hw_reset_for_init(struct mmc_host *host)
  */
 int mmc_cmdq_hw_reset(struct mmc_host *host)
 {
-       if (!host->bus_ops->power_restore)
-       return -EOPNOTSUPP;
+       if (!host->bus_ops->reset)
+               return -EOPNOTSUPP;
 
-       mmc_power_cycle(host, host->ocr_avail);
-       mmc_select_voltage(host, host->card->ocr);
-       return host->bus_ops->power_restore(host);
+       return host->bus_ops->reset(host);
 }
 EXPORT_SYMBOL(mmc_cmdq_hw_reset);
 
index 600fdb8..6912871 100644 (file)
@@ -2892,6 +2892,7 @@ EXPORT_SYMBOL(mmc_can_reset);
 static int mmc_reset(struct mmc_host *host)
 {
        struct mmc_card *card = host->card;
+       int ret;
 
        if ((host->caps & MMC_CAP_HW_RESET) && host->ops->hw_reset &&
             mmc_can_reset(card)) {
@@ -2904,7 +2905,29 @@ static int mmc_reset(struct mmc_host *host)
                /* Do a brute force power cycle */
                mmc_power_cycle(host, card->ocr);
        }
-       return mmc_init_card(host, card->ocr, card);
+
+       /* Suspend clk scaling to avoid switching frequencies intermittently */
+
+       ret = mmc_suspend_clk_scaling(host);
+       if (ret) {
+               pr_err("%s: %s: fail to suspend clock scaling (%d)\n",
+                       mmc_hostname(host), __func__, ret);
+               return ret;
+       }
+
+       ret = mmc_init_card(host, host->card->ocr, host->card);
+       if (ret) {
+               pr_err("%s: %s: mmc_init_card failed (%d)\n",
+                       mmc_hostname(host), __func__, ret);
+               return ret;
+       }
+
+       ret = mmc_resume_clk_scaling(host);
+       if (ret)
+               pr_err("%s: %s: fail to resume clock scaling (%d)\n",
+                       mmc_hostname(host), __func__, ret);
+
+       return ret;
 }
 
 static const struct mmc_bus_ops mmc_ops = {