FAILED: patch "[PATCH] mmc: sdhci-sprd: Fix vqmmc not shutting down after the card" failed to apply to 6.1-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 477865af60b2117ceaa1d558e03559108c15c78c
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023120348-devious-grafting-3f8d@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
477865af60b2 ("mmc: sdhci-sprd: Fix vqmmc not shutting down after the card was pulled")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 477865af60b2117ceaa1d558e03559108c15c78c Mon Sep 17 00:00:00 2001
From: Wenchao Chen <[email protected]>
Date: Wed, 15 Nov 2023 16:34:06 +0800
Subject: [PATCH] mmc: sdhci-sprd: Fix vqmmc not shutting down after the card
was pulled
With cat regulator_summary, we found that vqmmc was not shutting down after the card was pulled.
cat /sys/kernel/debug/regulator/regulator_summary
1.before fix
1)Insert SD card
vddsdio 1 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 1 0mA 3500mV 3600mV
2)Pull out the SD card
vddsdio 1 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 1 0mA 3500mV 3600mV2.after fix
1)Insert SD cardt
vddsdio 1 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 1 0mA 3500mV 3600mV2)Pull out the SD card
vddsdio 0 1 0 unknown 3500mV 0mA 1200mV 3750mV
71100000.mmc-vqmmc 0 0mA 3500mV 3600mV
drivers/mmc/host/sdhci-sprd.c +25 -0
@@ -416,12 +416,33 @@ static void sdhci_sprd_request_done(struct sdhci_host *host,mmc_request_done (host->mmc, mrq); } +static void sdhci_sprd_set_power (struct sdhci_host *host,unsigned char mode, +unsigned short vdd) +{ +struct mmc_host *mmc = host->mmc; + +switch (mode) { +case MMC_POWER_OFF : +mmc_regulator_set_ocr (host->mmc, mmc->supply.vmmc,0 ); + +mmc_regulator_disable_vqmmc (mmc); +break ; +case MMC_POWER_ON : +mmc_regulator_enable_vqmmc (mmc); +break ; +case MMC_POWER_UP : +mmc_regulator_set_ocr (host->mmc, mmc->supply.vmmc, vdd); +break ; + } +} +static struct sdhci_ops sdhci_sprd_ops = { .read_l = sdhci_sprd_readl, .write_l = sdhci_sprd_writel, .write_w = sdhci_sprd_writew, .write_b = sdhci_sprd_writeb, .set_clock = sdhci_sprd_set_clock, + .set_power = sdhci_sprd_set_power, .get_max_clock = sdhci_sprd_get_max_clock, .get_min_clock = sdhci_sprd_get_min_clock, .set_bus_width = sdhci_set_bus_width,
@@ -823,6 +844,10 @@ static int sdhci_sprd_probe(struct platform_device *pdev) host->caps1 &= ~(SDHCI_SUPPORT_SDR50 |SDHCI_SUPPORT_SDR104 |SDHCI_SUPPORT_DDR50 ); + ret =mmc_regulator_get_supply (host->mmc); +if (ret) + goto pm_runtime_disable; + ret =sdhci_setup_host (host);if (ret) goto pm_runtime_disable;