Skip to content

Commit 7b7e716

Browse files
benchuang710storulf
authored andcommitted
mmc: sdhci: Move the code related to setting the clock from sdhci_set_ios_common() into sdhci_set_ios()
The sdhci_set_clock() is called in sdhci_set_ios_common() and __sdhci_uhs2_set_ios(). According to Section 3.13.2 "Card Interface Detection Sequence" of the SD Host Controller Standard Specification Version 7.00, the SD clock is supplied after power is supplied, so we only need one in __sdhci_uhs2_set_ios(). Let's move the code related to setting the clock from sdhci_set_ios_common() into sdhci_set_ios() and modify the parameters passed to sdhci_set_clock() in __sdhci_uhs2_set_ios(). Fixes: 10c8298 ("mmc: sdhci-uhs2: add set_ios()") Cc: stable@vger.kernel.org # v6.13+ Signed-off-by: Ben Chuang <ben.chuang@genesyslogic.com.tw> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
1 parent 8ab2f1c commit 7b7e716

2 files changed

Lines changed: 19 additions & 18 deletions

File tree

drivers/mmc/host/sdhci-uhs2.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,8 @@ static void __sdhci_uhs2_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
295295
else
296296
sdhci_uhs2_set_power(host, ios->power_mode, ios->vdd);
297297

298-
sdhci_set_clock(host, host->clock);
298+
sdhci_set_clock(host, ios->clock);
299+
host->clock = ios->clock;
299300
}
300301

301302
static int sdhci_uhs2_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)

drivers/mmc/host/sdhci.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2367,23 +2367,6 @@ void sdhci_set_ios_common(struct mmc_host *mmc, struct mmc_ios *ios)
23672367
(ios->power_mode == MMC_POWER_UP) &&
23682368
!(host->quirks2 & SDHCI_QUIRK2_PRESET_VALUE_BROKEN))
23692369
sdhci_enable_preset_value(host, false);
2370-
2371-
if (!ios->clock || ios->clock != host->clock) {
2372-
host->ops->set_clock(host, ios->clock);
2373-
host->clock = ios->clock;
2374-
2375-
if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK &&
2376-
host->clock) {
2377-
host->timeout_clk = mmc->actual_clock ?
2378-
mmc->actual_clock / 1000 :
2379-
host->clock / 1000;
2380-
mmc->max_busy_timeout =
2381-
host->ops->get_max_timeout_count ?
2382-
host->ops->get_max_timeout_count(host) :
2383-
1 << 27;
2384-
mmc->max_busy_timeout /= host->timeout_clk;
2385-
}
2386-
}
23872370
}
23882371
EXPORT_SYMBOL_GPL(sdhci_set_ios_common);
23892372

@@ -2410,6 +2393,23 @@ void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
24102393

24112394
sdhci_set_ios_common(mmc, ios);
24122395

2396+
if (!ios->clock || ios->clock != host->clock) {
2397+
host->ops->set_clock(host, ios->clock);
2398+
host->clock = ios->clock;
2399+
2400+
if (host->quirks & SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK &&
2401+
host->clock) {
2402+
host->timeout_clk = mmc->actual_clock ?
2403+
mmc->actual_clock / 1000 :
2404+
host->clock / 1000;
2405+
mmc->max_busy_timeout =
2406+
host->ops->get_max_timeout_count ?
2407+
host->ops->get_max_timeout_count(host) :
2408+
1 << 27;
2409+
mmc->max_busy_timeout /= host->timeout_clk;
2410+
}
2411+
}
2412+
24132413
if (host->ops->set_power)
24142414
host->ops->set_power(host, ios->power_mode, ios->vdd);
24152415
else

0 commit comments

Comments
 (0)