Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pinctrl: Add pinctrl_pm_select_init_state helper function

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

authored by

Christian Bruel and committed by
Manivannan Sadhasivam
08383cd4 272dad3f

+23
+13
drivers/pinctrl/core.c
··· 1656 1656 EXPORT_SYMBOL_GPL(pinctrl_pm_select_default_state); 1657 1657 1658 1658 /** 1659 + * pinctrl_pm_select_init_state() - select init pinctrl state for PM 1660 + * @dev: device to select init state for 1661 + */ 1662 + int pinctrl_pm_select_init_state(struct device *dev) 1663 + { 1664 + if (!dev->pins) 1665 + return 0; 1666 + 1667 + return pinctrl_select_bound_state(dev, dev->pins->init_state); 1668 + } 1669 + EXPORT_SYMBOL_GPL(pinctrl_pm_select_init_state); 1670 + 1671 + /** 1659 1672 * pinctrl_pm_select_sleep_state() - select sleep pinctrl state for PM 1660 1673 * @dev: device to select sleep state for 1661 1674 */
+10
include/linux/pinctrl/consumer.h
··· 48 48 49 49 #ifdef CONFIG_PM 50 50 int pinctrl_pm_select_default_state(struct device *dev); 51 + int pinctrl_pm_select_init_state(struct device *dev); 51 52 int pinctrl_pm_select_sleep_state(struct device *dev); 52 53 int pinctrl_pm_select_idle_state(struct device *dev); 53 54 #else 54 55 static inline int pinctrl_pm_select_default_state(struct device *dev) 56 + { 57 + return 0; 58 + } 59 + static inline int pinctrl_pm_select_init_state(struct device *dev) 55 60 { 56 61 return 0; 57 62 } ··· 144 139 } 145 140 146 141 static inline int pinctrl_pm_select_default_state(struct device *dev) 142 + { 143 + return 0; 144 + } 145 + 146 + static inline int pinctrl_pm_select_init_state(struct device *dev) 147 147 { 148 148 return 0; 149 149 }