[PATCH 2/2] mmc: core: Add post-power-off-delay-ms support

From: Judith Mendez

Date: Thu Jul 16 2026 - 19:28:05 EST


Add support for post-power-off-delay-ms which shall be used to insert
a configurable delay post MMC power off.

Signed-off-by: Judith Mendez <jm@xxxxxx>
---
drivers/mmc/core/core.c | 8 ++++++--
drivers/mmc/core/host.c | 8 ++++++++
include/linux/mmc/host.h | 1 +
3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 29e80e5f928e9..f9049aaf44394 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -1394,8 +1394,12 @@ void mmc_power_off(struct mmc_host *host)
void mmc_power_cycle(struct mmc_host *host, u32 ocr)
{
mmc_power_off(host);
- /* Wait at least 1 ms according to SD spec */
- mmc_delay(1);
+ if (host->post_power_off_delay_ms) {
+ mmc_delay(host->post_power_off_delay_ms);
+ } else {
+ /* Wait at least 1 ms according to SD spec */
+ mmc_delay(1);
+ }
mmc_power_up(host, ocr);
}

diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index b7ce3137d4529..ea8f36827e41c 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -421,6 +421,14 @@ int mmc_of_parse(struct mmc_host *host)
device_property_read_u32(dev, "post-power-on-delay-ms",
&host->ios.power_delay_ms);

+ device_property_read_u32(dev, "post-power-off-delay-ms",
+ &host->post_power_off_delay_ms);
+ if (host->post_power_off_delay_ms > 10000) {
+ dev_err(dev, "post-power-off-delay-ms %u exceeds max 10000, setting 10000\n",
+ host->post_power_off_delay_ms);
+ host->post_power_off_delay_ms = 10000;
+ }
+
return mmc_pwrseq_alloc(host);
}

diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index ba84f02c2a101..b751b61b1116e 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -578,6 +578,7 @@ struct mmc_host {

u32 err_stats[MMC_ERR_MAX];
u32 max_sd_hs_hz;
+ u32 post_power_off_delay_ms;
unsigned long private[] ____cacheline_aligned;
};

--
2.54.0