[PATCH 3/5] drivers/mmc: rtsx_usb: gate UHS/MMC caps on supported parts

From: Sean Rhodes
Date: Tue Nov 04 2025 - 11:02:01 EST


Only advertise SDR50, DDR50 and MMC DDR when the USB companion reports
support, and treat MMC DDR timing like DDR50 so the host can switch to
that mode safely

Cc: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
Cc: Ricky Wu <ricky_wu@xxxxxxxxxxx>
Cc: Avri Altman <avri.altman@xxxxxxxxxxx>
Cc: Jisheng Zhang <jszhang@xxxxxxxxxx>
Cc: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
Cc: Binbin Zhou <zhoubinbin@xxxxxxxxxxx>
Cc: linux-mmc@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
Signed-off-by: Sean Rhodes <sean@starlabs.systems>
---
drivers/mmc/host/rtsx_usb_sdmmc.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c
b/drivers/mmc/host/rtsx_usb_sdmmc.c
index 84674659a84d..e23ef4111dab 100644
--- a/drivers/mmc/host/rtsx_usb_sdmmc.c
+++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
@@ -1097,6 +1097,7 @@ static int sd_set_timing(struct rtsx_usb_sdmmc *host,
break;

case MMC_TIMING_UHS_DDR50:
+ case MMC_TIMING_MMC_DDR52:
*ddr_mode = true;

rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_CFG1,
@@ -1161,6 +1162,7 @@ static void sdmmc_set_ios(struct mmc_host *mmc,
struct mmc_ios *ios)
host->double_clk = false;
break;
case MMC_TIMING_UHS_DDR50:
+ case MMC_TIMING_MMC_DDR52:
case MMC_TIMING_UHS_SDR25:
host->ssc_depth = SSC_DEPTH_1M;
break;
@@ -1343,8 +1345,14 @@ static void rtsx_usb_init_host(struct
rtsx_usb_sdmmc *host)
mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
mmc->caps = MMC_CAP_4_BIT_DATA | MMC_CAP_SD_HIGHSPEED |
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_BUS_WIDTH_TEST |
- MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR50 |
+ MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 |
MMC_CAP_SYNC_RUNTIME_PM;
+ if (host->ucr->supports_sdr50)
+ mmc->caps |= MMC_CAP_UHS_SDR50;
+ if (host->ucr->supports_ddr50)
+ mmc->caps |= MMC_CAP_UHS_DDR50;
+ if (host->ucr->supports_mmc_ddr)
+ mmc->caps |= MMC_CAP_1_8V_DDR;
mmc->caps2 = MMC_CAP2_NO_PRESCAN_POWERUP | MMC_CAP2_FULL_PWR_CYCLE |
MMC_CAP2_NO_SDIO;

--
2.51.0