diff options
| author | Naveen Kumar Arepalli <naveenk@nvidia.com> | 2014-02-14 16:22:34 +0530 |
|---|---|---|
| committer | Naveen Kumar Arepalli <naveenk@nvidia.com> | 2014-02-23 21:16:57 -0800 |
| commit | edc48c9254e9d3aea84ca652a1966ea587f191cc (patch) | |
| tree | 193f3759b76ef740892220b3b934abbd0395f364 | |
| parent | e65884a629fc6aa2e73c3a618cb839b78dca05de (diff) | |
mmc: tegra: Set correct tuning constraints
-If we insert SDR50 card after removing SDR104 card,
tuning constraints of SDR104 are being set for SDR50.
This patch sets correct tuning constraints for SDR50 mode
card
Bug 1423425
Reviewed-on: http://git-master/r/367708
(cherry picked from commit 9a9b70233c0669c6c3e26ec525a56b350b971657)
Change-Id: I14150ff7bdbb2387d185a6d800d5160dc0fa54bc
Signed-off-by: Naveen Kumar Arepalli <naveenk@nvidia.com>
Reviewed-on: http://git-master/r/369823
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: R Raj Kumar <rrajk@nvidia.com>
Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
| -rw-r--r-- | drivers/mmc/host/sdhci-tegra.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c index 74615ba19e80..2f5c6cbfcb72 100644 --- a/drivers/mmc/host/sdhci-tegra.c +++ b/drivers/mmc/host/sdhci-tegra.c @@ -2586,7 +2586,8 @@ static u8 sdhci_tegra_get_freq_point(struct sdhci_host *sdhci) * UI and estimate holes using equations and predetermined coefficients from * the characterization data. The algorithm will not work without this data. */ -static int find_tuning_coeffs_data(struct sdhci_host *sdhci) +static int find_tuning_coeffs_data(struct sdhci_host *sdhci, + bool force_retuning) { struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci); struct sdhci_tegra *tegra_host = pltfm_host->priv; @@ -2605,7 +2606,7 @@ static int find_tuning_coeffs_data(struct sdhci_host *sdhci) tuning_data = &tegra_host->tuning_data[i]; /* Skip if T2T coeffs are already found */ - if (tuning_data->t2t_coeffs == NULL) { + if (tuning_data->t2t_coeffs == NULL || force_retuning) { t2t_coeffs = soc_data->t2t_coeffs; for (j = 0; j < soc_data->t2t_coeffs_count; j++) { if (!strcmp(dev_id, t2t_coeffs->dev_id)) { @@ -2627,7 +2628,7 @@ static int find_tuning_coeffs_data(struct sdhci_host *sdhci) coeffs_set = false; /* Skip if tap hole coeffs are already found */ - if (tuning_data->thole_coeffs == NULL) { + if (tuning_data->thole_coeffs == NULL || force_retuning) { thole_coeffs = soc_data->tap_hole_coeffs; freq_khz = tuning_data->freq_hz / 1000; for (j = 0; j < soc_data->tap_hole_coeffs_count; j++) { @@ -2726,7 +2727,8 @@ static int setup_freq_constraints(struct sdhci_host *sdhci, * frequencies in the soc data and also consider the platform clock limits as * well as any DFS related restrictions. */ -static int sdhci_tegra_get_tuning_constraints(struct sdhci_host *sdhci) +static int sdhci_tegra_get_tuning_constraints(struct sdhci_host *sdhci, + bool force_retuning) { struct sdhci_pltfm_host *pltfm_host = sdhci_priv(sdhci); struct sdhci_tegra *tegra_host = pltfm_host->priv; @@ -2734,7 +2736,7 @@ static int sdhci_tegra_get_tuning_constraints(struct sdhci_host *sdhci) int err = 0; /* A valid freq count means freq constraints are already set up */ - if (!tegra_host->tuning_freq_count) { + if (!tegra_host->tuning_freq_count || force_retuning) { freq_list = tegra_host->soc_data->tuning_freq_list; tegra_host->tuning_freq_count = setup_freq_constraints(sdhci, freq_list); @@ -2745,7 +2747,7 @@ static int sdhci_tegra_get_tuning_constraints(struct sdhci_host *sdhci) } } - err = find_tuning_coeffs_data(sdhci); + err = find_tuning_coeffs_data(sdhci, force_retuning); if (err) return err; @@ -2949,7 +2951,7 @@ static int sdhci_tegra_execute_tuning(struct sdhci_host *sdhci, u32 opcode) } tegra_host->tuning_status = 0; - err = sdhci_tegra_get_tuning_constraints(sdhci); + err = sdhci_tegra_get_tuning_constraints(sdhci, force_retuning); if (err) { dev_err(mmc_dev(sdhci->mmc), "Failed to get tuning constraints\n"); |
