From: Ricky Wu Date: Mon, 16 Jun 2025 06:49:56 +0000 (+0800) Subject: mmc: rtsx_usb_sdmmc: Add 74 clocks in poweron flow X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9939ac6ca0f5d573e3975f7f85a9fd348077719a;p=thirdparty%2Fkernel%2Fstable.git 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 Link: https://lore.kernel.org/r/20250616064956.1846258-1-ricky_wu@realtek.com Signed-off-by: Ulf Hansson --- 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;