aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2014-12-05 12:25:30 -0500
committerUlf Hansson <ulf.hansson@linaro.org>2015-01-12 04:14:56 -0500
commit38e40bf5db9d5b8cbaeca9a78ee17f38473dd78d (patch)
treefbe35f52cc731ba88d7f87ed961e2039e236ef85 /drivers/mmc
parentd519c863fc198f43c979e9d6a74b53d9c53d55aa (diff)
mmc: sdhci: Simplify use of tuning timer
The tuning timer is always used if the tuning mode is 1 and there is a tuning count, irrespective of whether this is the first call, or any subsequent call. Consequently the logic to start the timer can be simplified. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Reviewed-by: Aaron Lu <aaron.lu@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r--drivers/mmc/host/sdhci.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index c45beaff1ab5..5c28c19622e6 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1885,10 +1885,14 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
1885 int tuning_loop_counter = MAX_TUNING_LOOP; 1885 int tuning_loop_counter = MAX_TUNING_LOOP;
1886 int err = 0; 1886 int err = 0;
1887 unsigned long flags; 1887 unsigned long flags;
1888 unsigned int tuning_count = 0;
1888 1889
1889 sdhci_runtime_pm_get(host); 1890 sdhci_runtime_pm_get(host);
1890 spin_lock_irqsave(&host->lock, flags); 1891 spin_lock_irqsave(&host->lock, flags);
1891 1892
1893 if (host->tuning_mode == SDHCI_TUNING_MODE_1)
1894 tuning_count = host->tuning_count;
1895
1892 /* 1896 /*
1893 * The Host Controller needs tuning only in case of SDR104 mode 1897 * The Host Controller needs tuning only in case of SDR104 mode
1894 * and for SDR50 mode when Use Tuning for SDR50 is set in the 1898 * and for SDR50 mode when Use Tuning for SDR50 is set in the
@@ -2033,22 +2037,11 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
2033 } 2037 }
2034 2038
2035out: 2039out:
2036 /* 2040 host->flags &= ~SDHCI_NEEDS_RETUNING;
2037 * If this is the very first time we are here, we start the retuning 2041
2038 * timer. Since only during the first time, SDHCI_NEEDS_RETUNING 2042 if (tuning_count) {
2039 * flag won't be set, we check this condition before actually starting
2040 * the timer.
2041 */
2042 if (!(host->flags & SDHCI_NEEDS_RETUNING) && host->tuning_count &&
2043 (host->tuning_mode == SDHCI_TUNING_MODE_1)) {
2044 host->flags |= SDHCI_USING_RETUNING_TIMER; 2043 host->flags |= SDHCI_USING_RETUNING_TIMER;
2045 mod_timer(&host->tuning_timer, jiffies + 2044 mod_timer(&host->tuning_timer, jiffies + tuning_count * HZ);
2046 host->tuning_count * HZ);
2047 } else if (host->flags & SDHCI_USING_RETUNING_TIMER) {
2048 host->flags &= ~SDHCI_NEEDS_RETUNING;
2049 /* Reload the new initial value for timer */
2050 mod_timer(&host->tuning_timer, jiffies +
2051 host->tuning_count * HZ);
2052 } 2045 }
2053 2046
2054 /* 2047 /*