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