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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/8/2024 5:33 AM, Bough Chen wrote:
-----Original Message-----
From: Ciprian Marian Costea (OSS) <ciprianmarian.costea@xxxxxxxxxxx>
Sent: 2024年7月5日 21:47
To: Bough Chen <haibo.chen@xxxxxxx>; Adrian Hunter
<adrian.hunter@xxxxxxxxx>; Ulf Hansson <ulf.hansson@xxxxxxxxxx>; Shawn Guo
<shawnguo@xxxxxxxxxx>; Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>;
Pengutronix Kernel Team <kernel@xxxxxxxxxxxxxx>; Fabio Estevam
<festevam@xxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-mmc@xxxxxxxxxxxxxxx;
imx@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; dl-S32
<S32@xxxxxxx>; Ciprian Marian Costea (OSS)
<ciprianmarian.costea@xxxxxxxxxxx>
Subject: [PATCH 3/4] mmc: sdhci-esdhc-imx: add option to not change pinctrl
state in suspend

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

If so, why not dop the "sleep" pinctrl in device tree file?

Best Regards
Haibo Chen

Thanks for this suggestion. I verified and pinctrl node is not yet upstream'ed for S32G2/S32G3 SoC. Indeed, 'pinctrl_pm_select_sleep_state' would not report any errors in case 'sleep' pinctrl is not defined in the device tree file.
I will drop this commit in version 2 of this patchset.

Best Regards,
Ciprian


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






[Index of Archives]     [Linux Memonry Technology]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux