xref: /linux/include/linux/pinctrl/consumer.h (revision 96b76f7bc575ac6c69090f4642e424b04fb6784c)
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/types.h>
16 
17 #include <linux/pinctrl/pinctrl-state.h>
18 
19 struct device;
20 struct gpio_chip;
21 
22 /* This struct is private to the core and should be regarded as a cookie */
23 struct pinctrl;
24 struct pinctrl_state;
25 
26 #ifdef CONFIG_PINCTRL
27 
28 /* External interface to pin control */
29 bool pinctrl_gpio_can_use_line(struct gpio_chip *gc, unsigned int offset);
30 int pinctrl_gpio_request(struct gpio_chip *gc, unsigned int offset);
31 void pinctrl_gpio_free(struct gpio_chip *gc, unsigned int offset);
32 int pinctrl_gpio_direction_input(struct gpio_chip *gc,
33 				 unsigned int offset);
34 int pinctrl_gpio_direction_output(struct gpio_chip *gc,
35 				  unsigned int offset);
36 int pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
37 				unsigned long config);
38 int pinctrl_gpio_get_config(struct gpio_chip *gc, unsigned int offset,
39 			    unsigned long *config);
40 
41 struct pinctrl * __must_check pinctrl_get(struct device *dev);
42 void pinctrl_put(struct pinctrl *p);
43 struct pinctrl_state * __must_check pinctrl_lookup_state(struct pinctrl *p,
44 							 const char *name);
45 int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
46 
47 struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
48 void devm_pinctrl_put(struct pinctrl *p);
49 int pinctrl_select_default_state(struct device *dev);
50 
51 #ifdef CONFIG_PM
52 int pinctrl_pm_select_default_state(struct device *dev);
53 int pinctrl_pm_select_init_state(struct device *dev);
54 int pinctrl_pm_select_sleep_state(struct device *dev);
55 int pinctrl_pm_select_idle_state(struct device *dev);
56 #else
57 static inline int pinctrl_pm_select_default_state(struct device *dev)
58 {
59 	return 0;
60 }
61 static inline int pinctrl_pm_select_init_state(struct device *dev)
62 {
63 	return 0;
64 }
65 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
66 {
67 	return 0;
68 }
69 static inline int pinctrl_pm_select_idle_state(struct device *dev)
70 {
71 	return 0;
72 }
73 #endif
74 
75 #else /* !CONFIG_PINCTRL */
76 
77 static inline bool
78 pinctrl_gpio_can_use_line(struct gpio_chip *gc, unsigned int offset)
79 {
80 	return true;
81 }
82 
83 static inline int
84 pinctrl_gpio_request(struct gpio_chip *gc, unsigned int offset)
85 {
86 	return 0;
87 }
88 
89 static inline void
90 pinctrl_gpio_free(struct gpio_chip *gc, unsigned int offset)
91 {
92 }
93 
94 static inline int
95 pinctrl_gpio_direction_input(struct gpio_chip *gc, unsigned int offset)
96 {
97 	return 0;
98 }
99 
100 static inline int
101 pinctrl_gpio_direction_output(struct gpio_chip *gc, unsigned int offset)
102 {
103 	return 0;
104 }
105 
106 static inline int
107 pinctrl_gpio_get_config(struct gpio_chip *gc, unsigned int offset,
108 			unsigned long *config)
109 {
110 	return 0;
111 }
112 
113 static inline int
114 pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
115 			    unsigned long config)
116 {
117 	return 0;
118 }
119 
120 static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
121 {
122 	return NULL;
123 }
124 
125 static inline void pinctrl_put(struct pinctrl *p)
126 {
127 }
128 
129 static inline struct pinctrl_state * __must_check pinctrl_lookup_state(struct pinctrl *p,
130 								       const char *name)
131 {
132 	return NULL;
133 }
134 
135 static inline int pinctrl_select_state(struct pinctrl *p,
136 				       struct pinctrl_state *s)
137 {
138 	return 0;
139 }
140 
141 static inline struct pinctrl * __must_check devm_pinctrl_get(struct device *dev)
142 {
143 	return NULL;
144 }
145 
146 static inline void devm_pinctrl_put(struct pinctrl *p)
147 {
148 }
149 
150 static inline int pinctrl_select_default_state(struct device *dev)
151 {
152 	return 0;
153 }
154 
155 static inline int pinctrl_pm_select_default_state(struct device *dev)
156 {
157 	return 0;
158 }
159 
160 static inline int pinctrl_pm_select_init_state(struct device *dev)
161 {
162 	return 0;
163 }
164 
165 static inline int pinctrl_pm_select_sleep_state(struct device *dev)
166 {
167 	return 0;
168 }
169 
170 static inline int pinctrl_pm_select_idle_state(struct device *dev)
171 {
172 	return 0;
173 }
174 
175 #endif /* CONFIG_PINCTRL */
176 
177 static inline struct pinctrl * __must_check pinctrl_get_select(struct device *dev,
178 							       const char *name)
179 {
180 	struct pinctrl *p;
181 	struct pinctrl_state *s;
182 	int ret;
183 
184 	p = pinctrl_get(dev);
185 	if (IS_ERR(p))
186 		return p;
187 
188 	s = pinctrl_lookup_state(p, name);
189 	if (IS_ERR(s)) {
190 		pinctrl_put(p);
191 		return ERR_CAST(s);
192 	}
193 
194 	ret = pinctrl_select_state(p, s);
195 	if (ret < 0) {
196 		pinctrl_put(p);
197 		return ERR_PTR(ret);
198 	}
199 
200 	return p;
201 }
202 
203 static inline struct pinctrl * __must_check pinctrl_get_select_default(struct device *dev)
204 {
205 	return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
206 }
207 
208 static inline struct pinctrl * __must_check devm_pinctrl_get_select(struct device *dev,
209 								    const char *name)
210 {
211 	struct pinctrl *p;
212 	struct pinctrl_state *s;
213 	int ret;
214 
215 	p = devm_pinctrl_get(dev);
216 	if (IS_ERR(p))
217 		return p;
218 
219 	s = pinctrl_lookup_state(p, name);
220 	if (IS_ERR(s)) {
221 		devm_pinctrl_put(p);
222 		return ERR_CAST(s);
223 	}
224 
225 	ret = pinctrl_select_state(p, s);
226 	if (ret < 0) {
227 		devm_pinctrl_put(p);
228 		return ERR_PTR(ret);
229 	}
230 
231 	return p;
232 }
233 
234 static inline struct pinctrl * __must_check devm_pinctrl_get_select_default(struct device *dev)
235 {
236 	return devm_pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT);
237 }
238 
239 #endif /* __LINUX_PINCTRL_CONSUMER_H */
240