diff options
author | Ricky Wu <ricky_wu@realtek.com> | 2025-06-16 14:49:56 +0800 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2025-06-24 12:43:26 +0200 |
commit | 9939ac6ca0f5d573e3975f7f85a9fd348077719a (patch) | |
tree | 00ec327e81332852661865d1832871ecf5ab24f8 | |
parent | f9a1a9448f5c12a24c3724a4899e34a22b90e7f1 (diff) |
mmc: rtsx_usb_sdmmc: Add 74 clocks in poweron flow
To conform with SD spec definition, that the host must provide at least 74
clocks before issuing first command, let's add these clock cycles at
MMC_POWER_UP.
Signed-off-by: Ricky Wu <ricky_wu@realtek.com>
Link: https://lore.kernel.org/r/20250616064956.1846258-1-ricky_wu@realtek.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
-rw-r--r-- | drivers/mmc/host/rtsx_usb_sdmmc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_sdmmc.c index b750e2166d92..591d37206654 100644 --- a/drivers/mmc/host/rtsx_usb_sdmmc.c +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c @@ -1014,6 +1014,7 @@ static void sd_set_power_mode(struct rtsx_usb_sdmmc *host, unsigned char power_mode) { int err; + struct rtsx_ucr *ucr = host->ucr; if (power_mode == host->power_mode) return; @@ -1031,9 +1032,13 @@ static void sd_set_power_mode(struct rtsx_usb_sdmmc *host, err = sd_power_on(host); if (err) dev_dbg(sdmmc_dev(host), "power-on (err = %d)\n", err); + /* issue the clock signals to card at least 74 clocks */ + rtsx_usb_write_register(ucr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN); break; case MMC_POWER_ON: + /* stop to send the clock signals */ + rtsx_usb_write_register(ucr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0x00); case MMC_POWER_UNDEFINED: break; |