From: Kevin Liu <[email protected]>

1. The vmmc regulator enable in sdhci_add_host is NOT necessary since
it can be enabled during mmc_power_up by function mmc_regulator_set_ocr.
And this extra enable will make regulator_enable/regulator_disable
unbalanced. Consequently, vmmc can't be disabled during mmc_power_off.

2. If regulator vqmmc exist, it should be enabled regardless it support
1.8v or not.

3. If regulator framework is disabled, regulator_get will return NULL.
So the CONFIG_REGULATOR judgement can be removed.

Signed-off-by: Philip Rakity <[email protected]>
Signed-off-by: Kevin Liu <[email protected]>
---
 drivers/mmc/host/sdhci.c |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 522e501..9f44efd 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2921,12 +2921,14 @@ int sdhci_add_host(struct sdhci_host *host)
                                mmc_hostname(mmc));
                        host->vqmmc = NULL;
                }
-       }
-       else if (regulator_is_supported_voltage(host->vqmmc, 1800000, 1800000))
+       } else {
                regulator_enable(host->vqmmc);
-       else
-               caps[1] &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 |
-                      SDHCI_SUPPORT_DDR50);
+               if (!regulator_is_supported_voltage(host->vqmmc, 1800000,
+                       1800000))
+                       caps[1] &= ~(SDHCI_SUPPORT_SDR104 |
+                                       SDHCI_SUPPORT_SDR50 |
+                                       SDHCI_SUPPORT_DDR50);
+       }
 
        /* Any UHS-I mode in caps implies SDR12 and SDR25 support. */
        if (caps[1] & (SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 |
@@ -2982,10 +2984,8 @@ int sdhci_add_host(struct sdhci_host *host)
                                mmc_hostname(mmc));
                        host->vmmc = NULL;
                }
-       } else
-               regulator_enable(host->vmmc);
+       }
 
-#ifdef CONFIG_REGULATOR
        if (host->vmmc) {
                ret = regulator_is_supported_voltage(host->vmmc, 3300000,
                        3300000);
@@ -3000,7 +3000,6 @@ int sdhci_add_host(struct sdhci_host *host)
                if ((ret <= 0) && (caps[0] & SDHCI_CAN_VDD_180))
                        caps[0] &= ~SDHCI_CAN_VDD_180;
        }
-#endif /* CONFIG_REGULATOR */
 
        /*
         * According to SD Host Controller spec v3.00, if the Host System
-- 
1.7.0.4

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to