xref: /linux/include/linux/pinctrl/consumer.h (revision 44f57d78)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Consumer interface the pin control subsystem
4  *
5  * Copyright (C) 2012 ST-Ericsson SA
6  * Written on behalf of Linaro for ST-Ericsson
7  * Based on bits of regulator core, gpio core and clk core
8  *
9  * Author: Linus Walleij <linus.walleij@linaro.org>
10  */
11 #ifndef __LINUX_PINCTRL_CONSUMER_H
12 #define __LINUX_PINCTRL_CONSUMER_H
13 
14 #include <linux/err.h>
15 #include <linux/list.h>
16 #include <linux/seq_file.h>
17 #include <linux/pinctrl/pinctrl-state.h>
18 
19 /* This struct is private to the core and should be regarded as a cookie */
20 struct pinctrl;
21 struct pinctrl_state;
22 struct device;
23 
24 #ifdef CONFIG_PINCTRL
25 
26 /* External interface to pin control */
27 extern int pinctrl_gpio_request(unsigned gpio);
28 extern void pinctrl_gpio_free(unsigned gpio);
29 extern int pinctrl_gpio_direction_input(unsigned gpio);
30 extern int pinctrl_gpio_direction_output(unsigned gpio);
31 extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config);
32 
33 extern struct pinctrl * __must_check pinctrl_get(struct device *dev);
34 extern void pinctrl_put(struct pinctrl *p);
35 extern struct pinctrl_state * __must_check pinctrl_lookup_state(
36 							struct pinctrl *p,
37 							const char *name);
38 extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
39 
40 extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
41 extern void devm_pinctrl_put(struct pinctrl *p);
42 
43 #ifdef CONFIG_PM
44 extern int pinctrl_pm_select_default_state(struct device *dev);
45 extern int pinctrl_pm_select_sleep_state(struct device *dev);
46 extern int pinctrl_pm_select_idle_state(struct device *dev);
47 #else
48 static inline int pinctrl_pm_select_default_state(struct device *dev)
49 {
50 	return 0;
51 }
52 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
53 {
54 	return 0;
55 }
56 static inline int pinctrl_pm_select_idle_state(struct device *dev)
57 {
58 	return 0;
59 }
60 #endif
61 
62 #else /* !CONFIG_PINCTRL */
63 
64 static inline int pinctrl_gpio_request(unsigned gpio)
65 {
66 	return 0;
67 }
68 
69 static inline void pinctrl_gpio_free(unsigned gpio)
70 {
71 }
72 
73 static inline int pinctrl_gpio_direction_input(unsigned gpio)
74 {
75 	return 0;
76 }
77 
78 static inline int pinctrl_gpio_direction_output(unsigned gpio)
79 {
80 	return 0;
81 }
82 
83 static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
84 {
85 	return 0;
86 }
87 
88 static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
89 {
90 	return NULL;
91 }
92 
93 static inline void pinctrl_put(struct pinctrl *p)
94 {
95 }
96 
97 static inline struct pinctrl_state * __must_check pinctrl_lookup_state(
98 							struct pinctrl *p,
99 							const char *name)
100 {
101 	return NULL;
102 }
103 
104 static inline int pinctrl_select_state(struct pinctrl *p,
105 				       struct pinctrl_state *s)
106 {
107 	return 0;
108 }
109 
110 static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
111 {
112 	return NULL;
113 }
114 
115 static inline void devm_pinctrl_put(struct pinctrl *p)
116 {
117 }
118 
119 static inline int pinctrl_pm_select_default_state(struct device *dev)
120 {
121 	return 0;
122 }
123 
124 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
125 {
126 	return 0;
127 }
128 
129 static inline int pinctrl_pm_select_idle_state(struct device *dev)
130 {
131 	return 0;
132 }
133 
134 #endif /* CONFIG_PINCTRL */
135 
136 static inline struct pinctrl * __must_check pinctrl_get_select(
137 					struct device *dev, const char *name)
138 {
139 	struct pinctrl *p;
140 	struct pinctrl_state *s;
141 	int ret;
142 
143 	p = pinctrl_get(dev);
144 	if (IS_ERR(p))
145 		return p;
146 
147 	s = pinctrl_lookup_state(p, name);
148 	if (IS_ERR(s)) {
149 		pinctrl_put(p);
150 		return ERR_CAST(s);
151 	}
152 
153 	ret = pinctrl_select_state(p, s);
154 	if (ret < 0) {
155 		pinctrl_put(p);
156 		return ERR_PTR(ret);
157 	}
158 
159 	return p;
160 }
161 
162 static inline struct pinctrl * __must_check pinctrl_get_select_default(
163 					struct device *dev)
164 {
165 	return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
166 }
167 
168 static inline struct pinctrl * __must_check devm_pinctrl_get_select(
169 					struct device *dev, const char *name)
170 {
171 	struct pinctrl *p;
172 	struct pinctrl_state *s;
173 	int ret;
174 
175 	p = devm_pinctrl_get(dev);
176 	if (IS_ERR(p))
177 		return p;
178 
179 	s = pinctrl_lookup_state(p, name);
180 	if (IS_ERR(s)) {
181 		devm_pinctrl_put(p);
182 		return ERR_CAST(s);
183 	}
184 
185 	ret = pinctrl_select_state(p, s);
186 	if (ret < 0) {
187 		devm_pinctrl_put(p);
188 		return ERR_PTR(ret);
189 	}
190 
191 	return p;
192 }
193 
194 static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(
195 					struct device *dev)
196 {
197 	return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
198 }
199 
200 #endif /* __LINUX_PINCTRL_CONSUMER_H */
201