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