[PATCH 3/4] mmc: sdhci-esdhc-imx: add option to not change pinctrl state in suspend

From: Ciprian Costea
Date: Fri Jul 05 2024 - 09:48:21 EST


On some boards such as S32G based, changing the pinctrl state
in suspend routine may not be supported.

For this scenario the newly introduced flag
'ESDHC_FLAG_SKIP_PINCTRL_SLEEP' is used.

Signed-off-by: Ciprian Costea <ciprianmarian.costea@xxxxxxxxxxx>
---
drivers/mmc/host/sdhci-esdhc-imx.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
index 8f0bc6dca2b0..c3ff7fccd051 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -204,6 +204,9 @@
/* The IP does not have GPIO CD wake capabilities */
#define ESDHC_FLAG_SKIP_CD_WAKE BIT(18)

+/* The IP does not support transition to pinctrl sleep state */
+#define ESDHC_FLAG_SKIP_PINCTRL_SLEEP BIT(19)
+
enum wp_types {
ESDHC_WP_NONE, /* no WP, neither controller nor gpio */
ESDHC_WP_CONTROLLER, /* mmc controller internal WP */
@@ -301,7 +304,8 @@ static struct esdhc_soc_data usdhc_s32g2_data = {
.flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_MAN_TUNING
| ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200
| ESDHC_FLAG_HS400 | ESDHC_FLAG_HS400_ES
- | ESDHC_FLAG_SKIP_ERR004536 | ESDHC_FLAG_SKIP_CD_WAKE,
+ | ESDHC_FLAG_SKIP_ERR004536 | ESDHC_FLAG_SKIP_CD_WAKE
+ | ESDHC_FLAG_SKIP_PINCTRL_SLEEP,
};

static struct esdhc_soc_data usdhc_imx7ulp_data = {
@@ -1884,9 +1888,11 @@ static int sdhci_esdhc_suspend(struct device *dev)
if (ret)
return ret;

- ret = pinctrl_pm_select_sleep_state(dev);
- if (ret)
- return ret;
+ if (!(imx_data->socdata->flags & ESDHC_FLAG_SKIP_PINCTRL_SLEEP)) {
+ ret = pinctrl_pm_select_sleep_state(dev);
+ if (ret)
+ return ret;
+ }

ret = mmc_gpio_set_cd_wake(host->mmc, true);

--
2.45.2