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