[PATCH] mmc: rtsx_usb_sdmmc: start card power-up at 3.3V

Sean Rhodes posted 1 patch 1 month ago
drivers/mmc/host/rtsx_usb_sdmmc.c | 5 +++++
1 file changed, 5 insertions(+)
[PATCH] mmc: rtsx_usb_sdmmc: start card power-up at 3.3V
Posted by Sean Rhodes 1 month ago
A UHS session can leave the SD pads and SD18 regulator configured for
1.8V. The power-off path disables card power and suspends the regulator,
but does not restore their voltage selection.

On the next power-up, this stale state remains until after the MMC core
requests its initial signal voltage. Restore the SD pads and SD18 regulator
to 3.3V before enabling card power, as the old rts5139 driver did.

Tested: StarLite ADL with an RTS5129 tray reader; repeated 1.8V UHS
        sessions, power cycles, and tray removal/reinsertion.
Tested: StarFighter MTL with an RTS5129 trayless reader; repeated 1.8V
        UHS sessions, power cycles, and card removal/reinsertion.
Tested: Both systems re-enumerated the card after every cycle.

Signed-off-by: Sean Rhodes <sean@starlabs.systems>
---
 drivers/mmc/host/rtsx_usb_sdmmc.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_sdmmc.c
index bf37fab233cf..d9b33aa79165 100644
--- a/drivers/mmc/host/rtsx_usb_sdmmc.c
+++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
@@ -980,6 +980,11 @@ static int sd_power_on(struct rtsx_usb_sdmmc *host)
 	}
 	dev_dbg(sdmmc_dev(host), "%s\n", __func__);
 	rtsx_usb_init_cmd(ucr);
+	/* Start SD init at 3.3V, like the old rts5139 driver. */
+	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PAD_CTL,
+			 SD_IO_USING_1V8, SD_IO_USING_3V3);
+	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, LDO_POWER_CFG,
+			 TUNE_SD18_MASK, TUNE_SD18_3V3);
 	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
 	rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SHARE_MODE,
 			CARD_SHARE_MASK, CARD_SHARE_SD);
Re: [PATCH] mmc: rtsx_usb_sdmmc: start card power-up at 3.3V
Posted by Ulf Hansson 2 weeks, 3 days ago
On Mon, Aug 24, 2026 at 10:39 PM Sean Rhodes <sean@starlabs.systems> wrote:
>
> A UHS session can leave the SD pads and SD18 regulator configured for
> 1.8V. The power-off path disables card power and suspends the regulator,
> but does not restore their voltage selection.
>
> On the next power-up, this stale state remains until after the MMC core
> requests its initial signal voltage. Restore the SD pads and SD18 regulator
> to 3.3V before enabling card power, as the old rts5139 driver did.
>
> Tested: StarLite ADL with an RTS5129 tray reader; repeated 1.8V UHS
>         sessions, power cycles, and tray removal/reinsertion.
> Tested: StarFighter MTL with an RTS5129 trayless reader; repeated 1.8V
>         UHS sessions, power cycles, and card removal/reinsertion.
> Tested: Both systems re-enumerated the card after every cycle.
>
> Signed-off-by: Sean Rhodes <sean@starlabs.systems>

Applied for next (or should this be a fix and tagged for stable?), thanks!

Kind regards
Uffe


> ---
>  drivers/mmc/host/rtsx_usb_sdmmc.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_sdmmc.c
> index bf37fab233cf..d9b33aa79165 100644
> --- a/drivers/mmc/host/rtsx_usb_sdmmc.c
> +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
> @@ -980,6 +980,11 @@ static int sd_power_on(struct rtsx_usb_sdmmc *host)
>         }
>         dev_dbg(sdmmc_dev(host), "%s\n", __func__);
>         rtsx_usb_init_cmd(ucr);
> +       /* Start SD init at 3.3V, like the old rts5139 driver. */
> +       rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PAD_CTL,
> +                        SD_IO_USING_1V8, SD_IO_USING_3V3);
> +       rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, LDO_POWER_CFG,
> +                        TUNE_SD18_MASK, TUNE_SD18_3V3);
>         rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
>         rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SHARE_MODE,
>                         CARD_SHARE_MASK, CARD_SHARE_SD);
Re: [PATCH] mmc: rtsx_usb_sdmmc: start card power-up at 3.3V
Posted by Sean Rhodes 2 weeks, 3 days ago
On Thu, 10 Sept 2026 at 17:05, Ulf Hansson <ulf.hansson@oss.qualcomm.com> wrote:
>
> On Mon, Aug 24, 2026 at 10:39 PM Sean Rhodes <sean@starlabs.systems> wrote:
> >
> > A UHS session can leave the SD pads and SD18 regulator configured for
> > 1.8V. The power-off path disables card power and suspends the regulator,
> > but does not restore their voltage selection.
> >
> > On the next power-up, this stale state remains until after the MMC core
> > requests its initial signal voltage. Restore the SD pads and SD18 regulator
> > to 3.3V before enabling card power, as the old rts5139 driver did.
> >
> > Tested: StarLite ADL with an RTS5129 tray reader; repeated 1.8V UHS
> >         sessions, power cycles, and tray removal/reinsertion.
> > Tested: StarFighter MTL with an RTS5129 trayless reader; repeated 1.8V
> >         UHS sessions, power cycles, and card removal/reinsertion.
> > Tested: Both systems re-enumerated the card after every cycle.
> >
> > Signed-off-by: Sean Rhodes <sean@starlabs.systems>
>
> Applied for next (or should this be a fix and tagged for stable?), thanks!

Definitely a fix; did I miss something there?

Thanks

>
> Kind regards
> Uffe
>
>
> > ---
> >  drivers/mmc/host/rtsx_usb_sdmmc.c | 5 +++++
> >  1 file changed, 5 insertions(+)
> >
> > diff --git a/drivers/mmc/host/rtsx_usb_sdmmc.c b/drivers/mmc/host/rtsx_usb_sdmmc.c
> > index bf37fab233cf..d9b33aa79165 100644
> > --- a/drivers/mmc/host/rtsx_usb_sdmmc.c
> > +++ b/drivers/mmc/host/rtsx_usb_sdmmc.c
> > @@ -980,6 +980,11 @@ static int sd_power_on(struct rtsx_usb_sdmmc *host)
> >         }
> >         dev_dbg(sdmmc_dev(host), "%s\n", __func__);
> >         rtsx_usb_init_cmd(ucr);
> > +       /* Start SD init at 3.3V, like the old rts5139 driver. */
> > +       rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, SD_PAD_CTL,
> > +                        SD_IO_USING_1V8, SD_IO_USING_3V3);
> > +       rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, LDO_POWER_CFG,
> > +                        TUNE_SD18_MASK, TUNE_SD18_3V3);
> >         rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SELECT, 0x07, SD_MOD_SEL);
> >         rtsx_usb_add_cmd(ucr, WRITE_REG_CMD, CARD_SHARE_MODE,
> >                         CARD_SHARE_MASK, CARD_SHARE_SD);