mirror of
https://github.com/torvalds/linux.git
synced 2026-01-12 00:42:35 +08:00
mmc: sdhci: Disable SD card clock before changing parameters
Per the SD Host Controller Simplified Specification v4.20 §3.2.3, change the SD card clock parameters only after first disabling the external card clock. Doing this fixes a spurious clock pulse on Baytrail and Apollo Lake SD controllers which otherwise breaks voltage switching with a specific Swissbit SD card. This change is limited to Intel host controllers to avoid an issue reported on ARM64 devices. Signed-off-by: Kyle Roeschley <kyle.roeschley@ni.com> Signed-off-by: Brad Mouring <brad.mouring@ni.com> Signed-off-by: Erick Shepherd <erick.shepherd@ni.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Link: https://lore.kernel.org/r/20250724185354.815888-1-erick.shepherd@ni.com Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
committed by
Ulf Hansson
parent
c17b750b3a
commit
5f755ba95a
@@ -679,8 +679,19 @@ static int intel_start_signal_voltage_switch(struct mmc_host *mmc,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sdhci_intel_set_clock(struct sdhci_host *host, unsigned int clock)
|
||||
{
|
||||
u16 clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
|
||||
|
||||
/* Stop card clock separately to avoid glitches on clock line */
|
||||
if (clk & SDHCI_CLOCK_CARD_EN)
|
||||
sdhci_writew(host, clk & ~SDHCI_CLOCK_CARD_EN, SDHCI_CLOCK_CONTROL);
|
||||
|
||||
sdhci_set_clock(host, clock);
|
||||
}
|
||||
|
||||
static const struct sdhci_ops sdhci_intel_byt_ops = {
|
||||
.set_clock = sdhci_set_clock,
|
||||
.set_clock = sdhci_intel_set_clock,
|
||||
.set_power = sdhci_intel_set_power,
|
||||
.enable_dma = sdhci_pci_enable_dma,
|
||||
.set_bus_width = sdhci_set_bus_width,
|
||||
@@ -690,7 +701,7 @@ static const struct sdhci_ops sdhci_intel_byt_ops = {
|
||||
};
|
||||
|
||||
static const struct sdhci_ops sdhci_intel_glk_ops = {
|
||||
.set_clock = sdhci_set_clock,
|
||||
.set_clock = sdhci_intel_set_clock,
|
||||
.set_power = sdhci_intel_set_power,
|
||||
.enable_dma = sdhci_pci_enable_dma,
|
||||
.set_bus_width = sdhci_set_bus_width,
|
||||
|
||||
Reference in New Issue
Block a user