On Tue, Apr 23, 2024 at 08:22:04AM +0200, Ahmad Fatoum wrote: > mci_mmc_select_hs_ddr() will try DDR52 and if that fails, revert to > SDR operation. In that case, it returns the bus width, which would > be forwarded as if it were an error code: > > WARNING: mmc2: Card's startup fails with 3 > > Fix this by translating successful return values to 0 in > mci_startup_mmc(). > > Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> > --- > drivers/mci/mci-core.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c > index 1d383e6449e9..57b4c5b99c9c 100644 > --- a/drivers/mci/mci-core.c > +++ b/drivers/mci/mci-core.c > @@ -1566,7 +1566,7 @@ static int mci_startup_mmc(struct mci *mci) > } > } > > - return ret; > + return ret >= MMC_BUS_WIDTH_1 ? 0 : ret; > } Can we do it like below instead? It makes clear where a MMC_BUS_WIDTH_x return value is expected. Sascha ----------------------------------8<--------------------------- diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c index 083d2f4ed1..da892a5f84 100644 --- a/drivers/mci/mci-core.c +++ b/drivers/mci/mci-core.c @@ -1558,8 +1558,12 @@ static int mci_startup_mmc(struct mci *mci) /* find out maximum bus width and then try DDR if supported */ ret = mci_mmc_select_bus_width(mci); - if (ret > MMC_BUS_WIDTH_1 && mci->tran_speed == 52000000) - ret = mci_mmc_select_hs_ddr(mci); + if (ret > MMC_BUS_WIDTH_1) { + ret = 0; + + if (mci->tran_speed == 52000000) + ret = mci_mmc_select_hs_ddr(mci); + } if (ret < 0) { dev_warn(&mci->dev, "Changing MMC bus width failed: %d\n", ret); -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |