aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mmc/host/sdhci-esdhc-imx.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
index d85a6a6f9e29..b1544a786eb6 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -439,24 +439,20 @@ static void esdhc_writew_le(struct sdhci_host *host, u16 val, int reg)
439 } else if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING) { 439 } else if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING) {
440 u32 v = readl(host->ioaddr + SDHCI_ACMD12_ERR); 440 u32 v = readl(host->ioaddr + SDHCI_ACMD12_ERR);
441 u32 m = readl(host->ioaddr + ESDHC_MIX_CTRL); 441 u32 m = readl(host->ioaddr + ESDHC_MIX_CTRL);
442 new_val = readl(host->ioaddr + ESDHC_TUNING_CTRL); 442 if (val & SDHCI_CTRL_TUNED_CLK) {
443 v |= ESDHC_MIX_CTRL_SMPCLK_SEL;
444 } else {
445 v &= ~ESDHC_MIX_CTRL_SMPCLK_SEL;
446 m &= ~ESDHC_MIX_CTRL_FBCLK_SEL;
447 }
448
443 if (val & SDHCI_CTRL_EXEC_TUNING) { 449 if (val & SDHCI_CTRL_EXEC_TUNING) {
444 new_val |= ESDHC_STD_TUNING_EN |
445 ESDHC_TUNING_START_TAP;
446 v |= ESDHC_MIX_CTRL_EXE_TUNE; 450 v |= ESDHC_MIX_CTRL_EXE_TUNE;
447 m |= ESDHC_MIX_CTRL_FBCLK_SEL; 451 m |= ESDHC_MIX_CTRL_FBCLK_SEL;
448 } else { 452 } else {
449 new_val &= ~ESDHC_STD_TUNING_EN;
450 v &= ~ESDHC_MIX_CTRL_EXE_TUNE; 453 v &= ~ESDHC_MIX_CTRL_EXE_TUNE;
451 m &= ~ESDHC_MIX_CTRL_FBCLK_SEL;
452 } 454 }
453 455
454 if (val & SDHCI_CTRL_TUNED_CLK)
455 v |= ESDHC_MIX_CTRL_SMPCLK_SEL;
456 else
457 v &= ~ESDHC_MIX_CTRL_SMPCLK_SEL;
458
459 writel(new_val, host->ioaddr + ESDHC_TUNING_CTRL);
460 writel(v, host->ioaddr + SDHCI_ACMD12_ERR); 456 writel(v, host->ioaddr + SDHCI_ACMD12_ERR);
461 writel(m, host->ioaddr + ESDHC_MIX_CTRL); 457 writel(m, host->ioaddr + ESDHC_MIX_CTRL);
462 } 458 }
@@ -1038,6 +1034,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
1038 if (imx_data->socdata->flags & ESDHC_FLAG_MAN_TUNING) 1034 if (imx_data->socdata->flags & ESDHC_FLAG_MAN_TUNING)
1039 sdhci_esdhc_ops.platform_execute_tuning = 1035 sdhci_esdhc_ops.platform_execute_tuning =
1040 esdhc_executing_tuning; 1036 esdhc_executing_tuning;
1037
1038 if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING)
1039 writel(readl(host->ioaddr + ESDHC_TUNING_CTRL) |
1040 ESDHC_STD_TUNING_EN | ESDHC_TUNING_START_TAP,
1041 host->ioaddr + ESDHC_TUNING_CTRL);
1042
1041 boarddata = &imx_data->boarddata; 1043 boarddata = &imx_data->boarddata;
1042 if (sdhci_esdhc_imx_probe_dt(pdev, boarddata) < 0) { 1044 if (sdhci_esdhc_imx_probe_dt(pdev, boarddata) < 0) {
1043 if (!host->mmc->parent->platform_data) { 1045 if (!host->mmc->parent->platform_data) {