GNU Linux-libre 6.9.2-gnu
[releases.git] / include / linux / pinctrl / devinfo.h
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
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
61 static inline int pinctrl_bind_pins(struct device *dev)
62 {
63         return 0;
64 }
65
66 static inline int pinctrl_init_done(struct device *dev)
67 {
68         return 0;
69 }
70
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 */