mirror of https://gitee.com/openkylin/linux.git
mmc: tegra: Disable card clock during pad calibration
Disable the card clock during automatic pad drive strength calibration and re-enable it afterwards. Signed-off-by: Aapo Vienamo <avienamo@nvidia.com> Acked-by: Thierry Reding <treding@nvidia.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
parent
212b0cf141
commit
887bda8f21
|
@ -260,11 +260,35 @@ static void tegra_sdhci_configure_cal_pad(struct sdhci_host *host, bool enable)
|
|||
usleep_range(1, 2);
|
||||
}
|
||||
|
||||
static bool tegra_sdhci_configure_card_clk(struct sdhci_host *host, bool enable)
|
||||
{
|
||||
bool status;
|
||||
u32 reg;
|
||||
|
||||
reg = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
|
||||
status = !!(reg & SDHCI_CLOCK_CARD_EN);
|
||||
|
||||
if (status == enable)
|
||||
return status;
|
||||
|
||||
if (enable)
|
||||
reg |= SDHCI_CLOCK_CARD_EN;
|
||||
else
|
||||
reg &= ~SDHCI_CLOCK_CARD_EN;
|
||||
|
||||
sdhci_writew(host, reg, SDHCI_CLOCK_CONTROL);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
static void tegra_sdhci_pad_autocalib(struct sdhci_host *host)
|
||||
{
|
||||
bool card_clk_enabled;
|
||||
u32 reg;
|
||||
int ret;
|
||||
|
||||
card_clk_enabled = tegra_sdhci_configure_card_clk(host, false);
|
||||
|
||||
tegra_sdhci_configure_cal_pad(host, true);
|
||||
|
||||
reg = sdhci_readl(host, SDHCI_TEGRA_AUTO_CAL_CONFIG);
|
||||
|
@ -279,6 +303,8 @@ static void tegra_sdhci_pad_autocalib(struct sdhci_host *host)
|
|||
|
||||
tegra_sdhci_configure_cal_pad(host, false);
|
||||
|
||||
tegra_sdhci_configure_card_clk(host, card_clk_enabled);
|
||||
|
||||
if (ret)
|
||||
dev_err(mmc_dev(host->mmc), "Pad autocal timed out\n");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue