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