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

Commit d4111cad authored by Veerabhadrarao Badiganti's avatar Veerabhadrarao Badiganti Committed by Sarthak Garg
Browse files

BACKPORT: 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.

Change-Id: Ia099d77289e8c3e2ced8fca718563ab366a4c6f5
Signed-off-by: default avatarVeerabhadrarao Badiganti <vbadigan@codeaurora.org>
Link: https://lore.kernel.org/r/1594213888-2780-2-git-send-email-vbadigan@codeaurora.org


Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Signed-off-by: default avatarSarthak Garg <sartgarg@codeaurora.org>
parent bd0cd68d
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
#include <linux/interconnect.h>
#include <linux/iopoll.h>
#include <linux/regulator/consumer.h>
#include <linux/pinctrl/consumer.h>

#include "sdhci-pltfm.h"
#include "cqhci.h"
@@ -1489,6 +1490,20 @@ static void sdhci_msm_set_uhs_signaling(struct sdhci_host *host,
		sdhci_msm_hs400(host, &mmc->ios);
}

/* Apply active/sleep pin config based on bus on/off state */
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;
}

#define MAX_PROP_SIZE 32
static int sdhci_msm_dt_parse_vreg_info(struct device *dev,
		struct sdhci_msm_reg_data **vreg_data, const char *vreg_name)
@@ -2118,6 +2133,9 @@ static void sdhci_msm_handle_pwr_irq(struct sdhci_host *host, int irq)
		if (!ret)
			ret = sdhci_msm_set_vdd_io_vol(msm_host->pdata,
					VDD_IO_HIGH, 0);
		if (!ret)
			ret = sdhci_msm_set_pincfg(msm_host, true);

		if (ret)
			irq_ack |= CORE_PWRCTL_BUS_FAIL;
		else
@@ -2133,6 +2151,9 @@ static void sdhci_msm_handle_pwr_irq(struct sdhci_host *host, int irq)
		if (!ret)
			ret = sdhci_msm_set_vdd_io_vol(msm_host->pdata,
					VDD_IO_LOW, 0);
		if (!ret)
			ret = sdhci_msm_set_pincfg(msm_host, false);

		if (ret)
			irq_ack |= CORE_PWRCTL_BUS_FAIL;
		else