diff options
| author | Arend van Spriel <arend@broadcom.com> | 2014-01-04 07:51:26 -0500 |
|---|---|---|
| committer | Chris Ball <chris@printf.net> | 2014-03-25 16:54:00 -0400 |
| commit | 2bc024855e881c697fc9bf9799f377c392192a43 (patch) | |
| tree | 4a83d097677501c554c03f88871dd07a5b77371e | |
| parent | fc2bd2e492a1e4f131a91c69c21c65be9e2e0125 (diff) | |
sdhci: only reprogram retuning timer when flag is set
When the host->tuning_count is zero it means that the retuning is
disabled. This is checked on the first run of sdhci_execute_tuning()
by the if statement below:
if (!(host->flags & SDHCI_NEEDS_RETUNING) && host->tuning_count &&
(host->tuning_mode == SDHCI_TUNING_MODE_1)) {
So only when tuning_count is non-zero it will set the host flag
SDHCI_USING_RETUNING_TIMER. The else statement is only for re-programming
the timer, which means that flag must be set. Because that is not checked
the else statement is executed in the first run when tuning_count is zero.
This was seen on a host controller which indicated SDHCI_TUNING_MODE_1 (0)
and tuning_count being zero. Suspect that (one of) these registers is not
properly set.
Signed-off-by: Arend van Spriel <arend@broadcom.com>
Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Reviewed-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Chris Ball <chris@printf.net>
| -rw-r--r-- | drivers/mmc/host/sdhci.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 04a5e257a2ab..9a79fc4b60ca 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c | |||
| @@ -2026,12 +2026,11 @@ out: | |||
| 2026 | host->tuning_count * HZ); | 2026 | host->tuning_count * HZ); |
| 2027 | /* Tuning mode 1 limits the maximum data length to 4MB */ | 2027 | /* Tuning mode 1 limits the maximum data length to 4MB */ |
| 2028 | mmc->max_blk_count = (4 * 1024 * 1024) / mmc->max_blk_size; | 2028 | mmc->max_blk_count = (4 * 1024 * 1024) / mmc->max_blk_size; |
| 2029 | } else { | 2029 | } else if (host->flags & SDHCI_USING_RETUNING_TIMER) { |
| 2030 | host->flags &= ~SDHCI_NEEDS_RETUNING; | 2030 | host->flags &= ~SDHCI_NEEDS_RETUNING; |
| 2031 | /* Reload the new initial value for timer */ | 2031 | /* Reload the new initial value for timer */ |
| 2032 | if (host->tuning_mode == SDHCI_TUNING_MODE_1) | 2032 | mod_timer(&host->tuning_timer, jiffies + |
| 2033 | mod_timer(&host->tuning_timer, jiffies + | 2033 | host->tuning_count * HZ); |
| 2034 | host->tuning_count * HZ); | ||
| 2035 | } | 2034 | } |
| 2036 | 2035 | ||
| 2037 | /* | 2036 | /* |
