]> Gentwo Git Trees - linux/.git/commitdiff
pinctrl: Add pinctrl_pm_select_init_state helper function
authorChristian Bruel <christian.bruel@foss.st.com>
Wed, 20 Aug 2025 07:54:02 +0000 (09:54 +0200)
committerManivannan Sadhasivam <mani@kernel.org>
Wed, 27 Aug 2025 13:23:30 +0000 (18:53 +0530)
If a platform requires an initial pinctrl state during probing, this
helper function provides the client with access to the same initial
state.

eg:
 xxx_suspend_noirq
    ...
    pinctrl_pm_select_sleep_state

 xxx resume_noirq
    pinctrl_pm_select_init_state
    ...
    pinctrl_pm_select_default_state

Signed-off-by: Christian Bruel <christian.bruel@foss.st.com>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://patch.msgid.link/20250820075411.1178729-3-christian.bruel@foss.st.com
drivers/pinctrl/core.c
include/linux/pinctrl/consumer.h

index 73b78d6eac672095c8556763af1744be6f558501..c5dbf4e9db84424ae9ceb90ed3681341654d1871 100644 (file)
@@ -1655,6 +1655,19 @@ int pinctrl_pm_select_default_state(struct device *dev)
 }
 EXPORT_SYMBOL_GPL(pinctrl_pm_select_default_state);
 
+/**
+ * pinctrl_pm_select_init_state() - select init pinctrl state for PM
+ * @dev: device to select init state for
+ */
+int pinctrl_pm_select_init_state(struct device *dev)
+{
+       if (!dev->pins)
+               return 0;
+
+       return pinctrl_select_bound_state(dev, dev->pins->init_state);
+}
+EXPORT_SYMBOL_GPL(pinctrl_pm_select_init_state);
+
 /**
  * pinctrl_pm_select_sleep_state() - select sleep pinctrl state for PM
  * @dev: device to select sleep state for
index 73de70362b9881569ff64800c195538935ffc939..63ce16191eb94728828803048fcf8d2db5ba8398 100644 (file)
@@ -48,6 +48,7 @@ int pinctrl_select_default_state(struct device *dev);
 
 #ifdef CONFIG_PM
 int pinctrl_pm_select_default_state(struct device *dev);
+int pinctrl_pm_select_init_state(struct device *dev);
 int pinctrl_pm_select_sleep_state(struct device *dev);
 int pinctrl_pm_select_idle_state(struct device *dev);
 #else
@@ -55,6 +56,10 @@ static inline int pinctrl_pm_select_default_state(struct device *dev)
 {
        return 0;
 }
+static inline int pinctrl_pm_select_init_state(struct device *dev)
+{
+       return 0;
+}
 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
 {
        return 0;
@@ -143,6 +148,11 @@ static inline int pinctrl_pm_select_default_state(struct device *dev)
        return 0;
 }
 
+static inline int pinctrl_pm_select_init_state(struct device *dev)
+{
+       return 0;
+}
+
 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
 {
        return 0;