Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 657d5982 authored by Kevin Liu's avatar Kevin Liu Committed by Chris Ball
Browse files

mmc: sdhci: fix IS_ERR() checking of regulator_get()



There are two problems here:

The check for vmmc was printing an unnecessary pr_info() when
host->vmmc is NULL.

The intent of the check for vqmmc was to only remove UHS if we have a
regulator that doesn't support the required voltage, but since IS_ERR()
doesn't catch NULL, we were actually removing UHS modes if vqmmc isn't
present at all -- since it isn't present for most users, this breaks
UHS for them.  This patch fixes that UHS regression in 3.7-rc1.

Signed-off-by: default avatarKevin Liu <kliu5@marvell.com>
Signed-off-by: default avatarBin Wang <binw@marvell.com>
Reviewed-by: default avatarPhilip Rakity <prakity@marvell.com>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent ee3298a2
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -2849,10 +2849,13 @@ int sdhci_add_host(struct sdhci_host *host)

	/* If vqmmc regulator and no 1.8V signalling, then there's no UHS */
	host->vqmmc = regulator_get(mmc_dev(mmc), "vqmmc");
	if (IS_ERR(host->vqmmc)) {
		pr_info("%s: no vqmmc regulator found\n", mmc_hostname(mmc));
	if (IS_ERR_OR_NULL(host->vqmmc)) {
		if (PTR_ERR(host->vqmmc) < 0) {
			pr_info("%s: no vqmmc regulator found\n",
				mmc_hostname(mmc));
			host->vqmmc = NULL;
		}
	}
	else if (regulator_is_supported_voltage(host->vqmmc, 1800000, 1800000))
		regulator_enable(host->vqmmc);
	else
@@ -2907,9 +2910,12 @@ int sdhci_add_host(struct sdhci_host *host)
	ocr_avail = 0;

	host->vmmc = regulator_get(mmc_dev(mmc), "vmmc");
	if (IS_ERR(host->vmmc)) {
		pr_info("%s: no vmmc regulator found\n", mmc_hostname(mmc));
	if (IS_ERR_OR_NULL(host->vmmc)) {
		if (PTR_ERR(host->vmmc) < 0) {
			pr_info("%s: no vmmc regulator found\n",
				mmc_hostname(mmc));
			host->vmmc = NULL;
		}
	} else
		regulator_enable(host->vmmc);