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