diff options
author | Veerabhadrarao Badiganti <vbadigan@codeaurora.org> | 2020-07-08 16:11:20 +0300 |
---|---|---|
committer | Ulf Hansson <ulf.hansson@linaro.org> | 2020-07-13 13:18:26 +0300 |
commit | b5c833b703cc3507dac2cd8c9197a965724c8d3a (patch) | |
tree | 4d82f79134aa0dffcc862ba4e87b3b8e1037e9c6 /drivers/mmc | |
parent | edfa69ded566d11183206d2d45cb4b90ccb5a56e (diff) | |
download | linux-b5c833b703cc3507dac2cd8c9197a965724c8d3a.tar.xz |
mmc: sdhci-msm: Set IO pins in low power state during suspend
Configure SDHC IO pins with low power configuration when the driver
is in suspend state.
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
Link: https://lore.kernel.org/r/1594213888-2780-2-git-send-email-vbadigan@codeaurora.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/host/sdhci-msm.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 333245cf5904..5a33389037cd 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -15,6 +15,7 @@ #include <linux/iopoll.h> #include <linux/regulator/consumer.h> #include <linux/interconnect.h> +#include <linux/pinctrl/consumer.h> #include "sdhci-pltfm.h" #include "cqhci.h" @@ -1353,6 +1354,19 @@ static void sdhci_msm_set_uhs_signaling(struct sdhci_host *host, sdhci_msm_hs400(host, &mmc->ios); } +static int sdhci_msm_set_pincfg(struct sdhci_msm_host *msm_host, bool level) +{ + struct platform_device *pdev = msm_host->pdev; + int ret; + + if (level) + ret = pinctrl_pm_select_default_state(&pdev->dev); + else + ret = pinctrl_pm_select_sleep_state(&pdev->dev); + + return ret; +} + static int sdhci_msm_set_vmmc(struct mmc_host *mmc) { if (IS_ERR(mmc->supply.vmmc)) @@ -1597,6 +1611,9 @@ static void sdhci_msm_handle_pwr_irq(struct sdhci_host *host, int irq) ret = sdhci_msm_set_vqmmc(msm_host, mmc, pwr_state & REQ_BUS_ON); if (!ret) + ret = sdhci_msm_set_pincfg(msm_host, + pwr_state & REQ_BUS_ON); + if (!ret) irq_ack |= CORE_PWRCTL_BUS_SUCCESS; else irq_ack |= CORE_PWRCTL_BUS_FAIL; |