Messages in this thread | | | Date | Thu, 27 Mar 2014 18:47:54 +0100 | From | Mike Looijmans <> | Subject | Re: [PATCH] sdhci: Forward EPROBE_DEFER on vmmc and vqmmc regulators |
| |
On 26-3-2014 16:09, Georgi Djakov wrote: > On 03/07/2014 04:18 PM, Mike Looijmans 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. >> --- >> 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..43b90c1 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 (%d)\n", > > I suggest using %ld here. The rest looks fine to me! Thanks!
Does this mean you're waiting for a patch v2 that I should submit?
> >> + mmc_hostname(mmc), PTR_ERR(host->vmmc)); >> host->vmmc = NULL; >> } >> } >> > > BR, > Georgi >
-- Mike Looijmans
| |