summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Kumar Arepalli <naveenk@nvidia.com>2014-02-14 16:22:34 +0530
committerNaveen Kumar Arepalli <naveenk@nvidia.com>2014-02-23 21:16:57 -0800
commitedc48c9254e9d3aea84ca652a1966ea587f191cc (patch)
tree193f3759b76ef740892220b3b934abbd0395f364
parente65884a629fc6aa2e73c3a618cb839b78dca05de (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.c16
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");