* Tony Lindgren <tony@xxxxxxxxxxx> [151005 07:57]: > * Tony Lindgren <tony@xxxxxxxxxxx> [151005 07:44]: > > * Tony Lindgren <tony@xxxxxxxxxxx> [151005 04:28]: > > > > Based on some tests it seems that the duovero unpaired regulator usage > > is fixed by reverting: > > > > c55d7a055364 ("mmc: host: omap_hsmmc: use regulator_is_enabled to > > find pbias status") > > With commit c55d7a055364 my guess is that the PBIAS regulator is > already on from an earlier MMC probe and getting re-enabled when > a deferred probe happens? Unless somebody has a better fix in mind for the above, I suggest we revert it for the -rc kernel. > > And it seems that omap3 legacy MMC is broken earlier in the > > series with: > > > > 7d607f917008 ("mmc: host: omap_hsmmc: use > > devm_regulator_get_optional() for vmmc") > > > > This one does not cleanly revert so have not yet tried reverting > > it. > > And with commit 7d607f917008 I'm guessing we can't return an > error if the PBIAS regulator does not exist as that's not there > for the legacy booting. For omap3 legacy booting, we keep getting -EPROBE_DEFER for all the optional regulators. Something like the following might be the minimal fix for the -rc cycle? Regards, Tony 8< ---------------- From: Tony Lindgren <tony@xxxxxxxxxxx> Date: Mon, 5 Oct 2015 09:37:36 -0700 Subject: [PATCH] mmc: host: omap_hsmmc: Fix MMC for omap3 legacy booting Starting with commit 7d607f917008 ("mmc: host: omap_hsmmc: use devm_regulator_get_optional() for vmmc") MMC on omap3 stopped working for legacy booting. This is because legacy booting sets up some of the resource in the platform init code, and for optional regulators always seem to return -EPROBE_DEFER for the legacy booting. Let's fix the issue by checking for device tree based booting for now. Then when omap3 boots in device tree only mode, this patch can be just reverted. Fixes: 7d607f917008 ("mmc: host: omap_hsmmc: use devm_regulator_get_optional() for vmmc") Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -478,7 +478,7 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host) mmc->supply.vmmc = devm_regulator_get_optional(host->dev, "vmmc"); if (IS_ERR(mmc->supply.vmmc)) { ret = PTR_ERR(mmc->supply.vmmc); - if (ret != -ENODEV) + if ((ret != -ENODEV) && host->dev->of_node) return ret; dev_dbg(host->dev, "unable to get vmmc regulator %ld\n", PTR_ERR(mmc->supply.vmmc)); @@ -493,7 +493,7 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host) mmc->supply.vqmmc = devm_regulator_get_optional(host->dev, "vmmc_aux"); if (IS_ERR(mmc->supply.vqmmc)) { ret = PTR_ERR(mmc->supply.vqmmc); - if (ret != -ENODEV) + if ((ret != -ENODEV) && host->dev->of_node) return ret; dev_dbg(host->dev, "unable to get vmmc_aux regulator %ld\n", PTR_ERR(mmc->supply.vqmmc)); @@ -503,7 +503,7 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host) host->pbias = devm_regulator_get_optional(host->dev, "pbias"); if (IS_ERR(host->pbias)) { ret = PTR_ERR(host->pbias); - if (ret != -ENODEV) + if ((ret != -ENODEV) && host->dev->of_node) return ret; dev_dbg(host->dev, "unable to get pbias regulator %ld\n", PTR_ERR(host->pbias)); -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html