summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicky Wu <ricky_wu@realtek.com>2025-06-16 14:49:56 +0800
committerUlf Hansson <ulf.hansson@linaro.org>2025-06-24 12:43:26 +0200
commit9939ac6ca0f5d573e3975f7f85a9fd348077719a (patch)
tree00ec327e81332852661865d1832871ecf5ab24f8
parentf9a1a9448f5c12a24c3724a4899e34a22b90e7f1 (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.c5
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;