On 28 March 2014 08:30, Mike Looijmans <mike.looijmans@xxxxxxxx> wrote: > If vmmc or vqmmc regulators are controlled by an I2C device, the > request for the regulator is likely to fail because the I2C bus has > not been probed yet. The sdhci then incorrectly assumes that the user > never wanted to use a regulator anyway and continues without ever > enabling or configuring the required regulator. > > To solve this, when a required voltage regulator returns > EPROBE_DEFER, signalling that the regulator exists but is not > available yet, forward this error to the probe method instead > of simply assuming that the user never wanted to use a regulator > anyway. > > Tested on a custom board that has an I2C regulator for one of the sdhcis > and no regulators at all for the other. This patch enables such a system > to work correctly. Missing Signed-off-by, could you resend? Otherwise looks good, you may have my ack. Kind regards Ulf Hansson > > v2: Changed "%d" into "%ld" for PTR_ERR value. > --- > drivers/mmc/host/sdhci.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c > index 34aef81..de601f5 100644 > --- a/drivers/mmc/host/sdhci.c > +++ b/drivers/mmc/host/sdhci.c > @@ -2972,6 +2972,8 @@ int sdhci_add_host(struct sdhci_host *host) > host->vqmmc = regulator_get_optional(mmc_dev(mmc), "vqmmc"); > if (IS_ERR_OR_NULL(host->vqmmc)) { > if (PTR_ERR(host->vqmmc) < 0) { > + if (PTR_ERR(host->vqmmc) == -EPROBE_DEFER) > + return -EPROBE_DEFER; > pr_info("%s: no vqmmc regulator found\n", > mmc_hostname(mmc)); > host->vqmmc = NULL; > @@ -3048,8 +3050,10 @@ int sdhci_add_host(struct sdhci_host *host) > host->vmmc = regulator_get_optional(mmc_dev(mmc), "vmmc"); > if (IS_ERR_OR_NULL(host->vmmc)) { > if (PTR_ERR(host->vmmc) < 0) { > - pr_info("%s: no vmmc regulator found\n", > - mmc_hostname(mmc)); > + if (PTR_ERR(host->vmmc) == -EPROBE_DEFER) > + return -EPROBE_DEFER; > + pr_info("%s: no vmmc regulator found (%ld)\n", > + mmc_hostname(mmc), PTR_ERR(host->vmmc)); > host->vmmc = NULL; > } > } > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html