mirror of https://github.com/torvalds/linux.git
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:
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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue