xref: /linux-6.15/include/linux/pinctrl/devinfo.h (revision 13e80244)
1af873fceSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2ab78029eSLinus Walleij /*
3ab78029eSLinus Walleij  * Per-device information from the pin control system.
4ab78029eSLinus Walleij  * This is the stuff that get included into the device
5ab78029eSLinus Walleij  * core.
6ab78029eSLinus Walleij  *
7ab78029eSLinus Walleij  * Copyright (C) 2012 ST-Ericsson SA
8ab78029eSLinus Walleij  * Written on behalf of Linaro for ST-Ericsson
9ab78029eSLinus Walleij  * This interface is used in the core to keep track of pins.
10ab78029eSLinus Walleij  *
11ab78029eSLinus Walleij  * Author: Linus Walleij <[email protected]>
12ab78029eSLinus Walleij  */
13ab78029eSLinus Walleij 
14ab78029eSLinus Walleij #ifndef PINCTRL_DEVINFO_H
15ab78029eSLinus Walleij #define PINCTRL_DEVINFO_H
16ab78029eSLinus Walleij 
17e5530adcSAndy Shevchenko struct device;
18e5530adcSAndy Shevchenko 
19ab78029eSLinus Walleij #ifdef CONFIG_PINCTRL
20ab78029eSLinus Walleij 
21*13e80244SHanna Hawa #include <linux/device.h>
22*13e80244SHanna Hawa 
23ab78029eSLinus Walleij /* The device core acts as a consumer toward pinctrl */
24ab78029eSLinus Walleij #include <linux/pinctrl/consumer.h>
25ab78029eSLinus Walleij 
26e5530adcSAndy Shevchenko struct pinctrl;
27e5530adcSAndy Shevchenko 
28ab78029eSLinus Walleij /**
29ab78029eSLinus Walleij  * struct dev_pin_info - pin state container for devices
30ab78029eSLinus Walleij  * @p: pinctrl handle for the containing device
31ab78029eSLinus Walleij  * @default_state: the default state for the handle, if found
32ef0eebc0SDouglas Anderson  * @init_state: the state at probe time, if found
33ef0eebc0SDouglas Anderson  * @sleep_state: the state at suspend time, if found
34ef0eebc0SDouglas Anderson  * @idle_state: the state at idle (runtime suspend) time, if found
35ab78029eSLinus Walleij  */
36ab78029eSLinus Walleij struct dev_pin_info {
37ab78029eSLinus Walleij 	struct pinctrl *p;
38ab78029eSLinus Walleij 	struct pinctrl_state *default_state;
39ef0eebc0SDouglas Anderson 	struct pinctrl_state *init_state;
4014005ee2SLinus Walleij #ifdef CONFIG_PM
4114005ee2SLinus Walleij 	struct pinctrl_state *sleep_state;
4214005ee2SLinus Walleij 	struct pinctrl_state *idle_state;
4314005ee2SLinus Walleij #endif
44ab78029eSLinus Walleij };
45ab78029eSLinus Walleij 
46ab78029eSLinus Walleij extern int pinctrl_bind_pins(struct device *dev);
47ef0eebc0SDouglas Anderson extern int pinctrl_init_done(struct device *dev);
48ab78029eSLinus Walleij 
dev_pinctrl(struct device * dev)49*13e80244SHanna Hawa static inline struct pinctrl *dev_pinctrl(struct device *dev)
50*13e80244SHanna Hawa {
51*13e80244SHanna Hawa 	if (!dev->pins)
52*13e80244SHanna Hawa 		return NULL;
53*13e80244SHanna Hawa 
54*13e80244SHanna Hawa 	return dev->pins->p;
55*13e80244SHanna Hawa }
56*13e80244SHanna Hawa 
57ab78029eSLinus Walleij #else
58ab78029eSLinus Walleij 
59ab78029eSLinus Walleij /* Stubs if we're not using pinctrl */
60ab78029eSLinus Walleij 
pinctrl_bind_pins(struct device * dev)61ab78029eSLinus Walleij static inline int pinctrl_bind_pins(struct device *dev)
62ab78029eSLinus Walleij {
63ab78029eSLinus Walleij 	return 0;
64ab78029eSLinus Walleij }
65ab78029eSLinus Walleij 
pinctrl_init_done(struct device * dev)66ef0eebc0SDouglas Anderson static inline int pinctrl_init_done(struct device *dev)
67ef0eebc0SDouglas Anderson {
68ef0eebc0SDouglas Anderson 	return 0;
69ef0eebc0SDouglas Anderson }
70ef0eebc0SDouglas Anderson 
dev_pinctrl(struct device * dev)71*13e80244SHanna Hawa static inline struct pinctrl *dev_pinctrl(struct device *dev)
72*13e80244SHanna Hawa {
73*13e80244SHanna Hawa 	return NULL;
74*13e80244SHanna Hawa }
75*13e80244SHanna Hawa 
76ab78029eSLinus Walleij #endif /* CONFIG_PINCTRL */
77ab78029eSLinus Walleij #endif /* PINCTRL_DEVINFO_H */
78