mmc: sdhci: clean up sdhci_execute_tuning() decision
authorRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 25 Apr 2014 11:59:36 +0000 (12:59 +0100)
committerChris Ball <chris@printf.net>
Thu, 22 May 2014 12:33:26 +0000 (08:33 -0400)
Clean up the code in sdhci_execute_tuning() so the decision whether
to execute tuning is clearer - and despite this reflecting what the
original code was doing, it shows that it may not be what the author
actually intended.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Tested-by: Markus Pargmann <mpa@pengutronix.de>
Tested-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Chris Ball <chris@printf.net>
drivers/mmc/host/sdhci.c

index 956799c..5c8b192 100644 (file)
@@ -1820,21 +1820,16 @@ static int sdhci_card_busy(struct mmc_host *mmc)
 
 static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
 {
-       struct sdhci_host *host;
+       struct sdhci_host *host = mmc_priv(mmc);
        u16 ctrl;
        int tuning_loop_counter = MAX_TUNING_LOOP;
        unsigned long timeout;
        int err = 0;
-       bool requires_tuning_nonuhs = false;
        unsigned long flags;
 
-       host = mmc_priv(mmc);
-
        sdhci_runtime_pm_get(host);
        spin_lock_irqsave(&host->lock, flags);
 
-       ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
-
        /*
         * The Host Controller needs tuning only in case of SDR104 mode
         * and for SDR50 mode when Use Tuning for SDR50 is set in the
@@ -1842,16 +1837,18 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
         * If the Host Controller supports the HS200 mode then the
         * tuning function has to be executed.
         */
-       if (host->timing == MMC_TIMING_UHS_SDR50 &&
-           (host->flags & SDHCI_SDR50_NEEDS_TUNING ||
-            host->flags & SDHCI_SDR104_NEEDS_TUNING))
-               requires_tuning_nonuhs = true;
-
-       if (host->timing == MMC_TIMING_MMC_HS200 ||
-           host->timing == MMC_TIMING_UHS_SDR104 ||
-           requires_tuning_nonuhs)
-               ctrl |= SDHCI_CTRL_EXEC_TUNING;
-       else {
+       switch (host->timing) {
+       case MMC_TIMING_MMC_HS200:
+       case MMC_TIMING_UHS_SDR104:
+               break;
+
+       case MMC_TIMING_UHS_SDR50:
+               if (host->flags & SDHCI_SDR50_NEEDS_TUNING ||
+                   host->flags & SDHCI_SDR104_NEEDS_TUNING)
+                       break;
+               /* FALLTHROUGH */
+
+       default:
                spin_unlock_irqrestore(&host->lock, flags);
                sdhci_runtime_pm_put(host);
                return 0;
@@ -1864,6 +1861,8 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
                return err;
        }
 
+       ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
+       ctrl |= SDHCI_CTRL_EXEC_TUNING;
        sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
 
        /*