1#ifndef __LINUX_GPIO_DRIVER_H
2#define __LINUX_GPIO_DRIVER_H
3
4#include <linux/device.h>
5#include <linux/types.h>
6#include <linux/irq.h>
7#include <linux/irqchip/chained_irq.h>
8#include <linux/irqdomain.h>
9#include <linux/lockdep.h>
10#include <linux/pinctrl/pinctrl.h>
11
12struct gpio_desc;
13struct of_phandle_args;
14struct device_node;
15struct seq_file;
16struct gpio_device;
17struct module;
18
19#ifdef CONFIG_GPIOLIB
20
21
22
23
24
25
26
27enum single_ended_mode {
28 LINE_MODE_PUSH_PULL,
29 LINE_MODE_OPEN_DRAIN,
30 LINE_MODE_OPEN_SOURCE,
31};
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130struct gpio_chip {
131 const char *label;
132 struct gpio_device *gpiodev;
133 struct device *parent;
134 struct module *owner;
135
136 int (*request)(struct gpio_chip *chip,
137 unsigned offset);
138 void (*free)(struct gpio_chip *chip,
139 unsigned offset);
140 int (*get_direction)(struct gpio_chip *chip,
141 unsigned offset);
142 int (*direction_input)(struct gpio_chip *chip,
143 unsigned offset);
144 int (*direction_output)(struct gpio_chip *chip,
145 unsigned offset, int value);
146 int (*get)(struct gpio_chip *chip,
147 unsigned offset);
148 void (*set)(struct gpio_chip *chip,
149 unsigned offset, int value);
150 void (*set_multiple)(struct gpio_chip *chip,
151 unsigned long *mask,
152 unsigned long *bits);
153 int (*set_debounce)(struct gpio_chip *chip,
154 unsigned offset,
155 unsigned debounce);
156 int (*set_single_ended)(struct gpio_chip *chip,
157 unsigned offset,
158 enum single_ended_mode mode);
159
160 int (*to_irq)(struct gpio_chip *chip,
161 unsigned offset);
162
163 void (*dbg_show)(struct seq_file *s,
164 struct gpio_chip *chip);
165 int base;
166 u16 ngpio;
167 const char *const *names;
168 bool can_sleep;
169
170#if IS_ENABLED(CONFIG_GPIO_GENERIC)
171 unsigned long (*read_reg)(void __iomem *reg);
172 void (*write_reg)(void __iomem *reg, unsigned long data);
173 unsigned long (*pin2mask)(struct gpio_chip *gc, unsigned int pin);
174 void __iomem *reg_dat;
175 void __iomem *reg_set;
176 void __iomem *reg_clr;
177 void __iomem *reg_dir;
178 int bgpio_bits;
179 spinlock_t bgpio_lock;
180 unsigned long bgpio_data;
181 unsigned long bgpio_dir;
182#endif
183
184#ifdef CONFIG_GPIOLIB_IRQCHIP
185
186
187
188
189 struct irq_chip *irqchip;
190 struct irq_domain *irqdomain;
191 unsigned int irq_base;
192 irq_flow_handler_t irq_handler;
193 unsigned int irq_default_type;
194 int irq_chained_parent;
195 bool irq_nested;
196 bool irq_need_valid_mask;
197 unsigned long *irq_valid_mask;
198 struct lock_class_key *lock_key;
199#endif
200
201#if defined(CONFIG_OF_GPIO)
202
203
204
205
206 struct device_node *of_node;
207 int of_gpio_n_cells;
208 int (*of_xlate)(struct gpio_chip *gc,
209 const struct of_phandle_args *gpiospec, u32 *flags);
210#endif
211};
212
213extern const char *gpiochip_is_requested(struct gpio_chip *chip,
214 unsigned offset);
215
216
217extern int gpiochip_add_data(struct gpio_chip *chip, void *data);
218static inline int gpiochip_add(struct gpio_chip *chip)
219{
220 return gpiochip_add_data(chip, NULL);
221}
222extern void gpiochip_remove(struct gpio_chip *chip);
223extern int devm_gpiochip_add_data(struct device *dev, struct gpio_chip *chip,
224 void *data);
225extern void devm_gpiochip_remove(struct device *dev, struct gpio_chip *chip);
226
227extern struct gpio_chip *gpiochip_find(void *data,
228 int (*match)(struct gpio_chip *chip, void *data));
229
230
231int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset);
232void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset);
233bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset);
234
235
236bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset);
237bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset);
238
239
240void *gpiochip_get_data(struct gpio_chip *chip);
241
242struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
243
244struct bgpio_pdata {
245 const char *label;
246 int base;
247 int ngpio;
248};
249
250#if IS_ENABLED(CONFIG_GPIO_GENERIC)
251
252int bgpio_init(struct gpio_chip *gc, struct device *dev,
253 unsigned long sz, void __iomem *dat, void __iomem *set,
254 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
255 unsigned long flags);
256
257#define BGPIOF_BIG_ENDIAN BIT(0)
258#define BGPIOF_UNREADABLE_REG_SET BIT(1)
259#define BGPIOF_UNREADABLE_REG_DIR BIT(2)
260#define BGPIOF_BIG_ENDIAN_BYTE_ORDER BIT(3)
261#define BGPIOF_READ_OUTPUT_REG_SET BIT(4)
262#define BGPIOF_NO_OUTPUT BIT(5)
263
264#endif
265
266#ifdef CONFIG_GPIOLIB_IRQCHIP
267
268void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
269 struct irq_chip *irqchip,
270 int parent_irq,
271 irq_flow_handler_t parent_handler);
272
273void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip,
274 struct irq_chip *irqchip,
275 int parent_irq);
276
277int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip,
278 struct irq_chip *irqchip,
279 unsigned int first_irq,
280 irq_flow_handler_t handler,
281 unsigned int type,
282 bool nested,
283 struct lock_class_key *lock_key);
284
285#ifdef CONFIG_LOCKDEP
286
287
288
289
290
291
292
293static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
294 struct irq_chip *irqchip,
295 unsigned int first_irq,
296 irq_flow_handler_t handler,
297 unsigned int type)
298{
299 static struct lock_class_key key;
300
301 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
302 handler, type, false, &key);
303}
304
305static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
306 struct irq_chip *irqchip,
307 unsigned int first_irq,
308 irq_flow_handler_t handler,
309 unsigned int type)
310{
311
312 static struct lock_class_key key;
313
314 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
315 handler, type, true, &key);
316}
317#else
318static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
319 struct irq_chip *irqchip,
320 unsigned int first_irq,
321 irq_flow_handler_t handler,
322 unsigned int type)
323{
324 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
325 handler, type, false, NULL);
326}
327
328static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
329 struct irq_chip *irqchip,
330 unsigned int first_irq,
331 irq_flow_handler_t handler,
332 unsigned int type)
333{
334 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
335 handler, type, true, NULL);
336}
337#endif
338
339#endif
340
341int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset);
342void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset);
343
344#ifdef CONFIG_PINCTRL
345
346
347
348
349
350
351
352
353struct gpio_pin_range {
354 struct list_head node;
355 struct pinctrl_dev *pctldev;
356 struct pinctrl_gpio_range range;
357};
358
359int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
360 unsigned int gpio_offset, unsigned int pin_offset,
361 unsigned int npins);
362int gpiochip_add_pingroup_range(struct gpio_chip *chip,
363 struct pinctrl_dev *pctldev,
364 unsigned int gpio_offset, const char *pin_group);
365void gpiochip_remove_pin_ranges(struct gpio_chip *chip);
366
367#else
368
369static inline int
370gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
371 unsigned int gpio_offset, unsigned int pin_offset,
372 unsigned int npins)
373{
374 return 0;
375}
376static inline int
377gpiochip_add_pingroup_range(struct gpio_chip *chip,
378 struct pinctrl_dev *pctldev,
379 unsigned int gpio_offset, const char *pin_group)
380{
381 return 0;
382}
383
384static inline void
385gpiochip_remove_pin_ranges(struct gpio_chip *chip)
386{
387}
388
389#endif
390
391struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
392 const char *label);
393void gpiochip_free_own_desc(struct gpio_desc *desc);
394
395#else
396
397static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
398{
399
400 WARN_ON(1);
401 return ERR_PTR(-ENODEV);
402}
403
404#endif
405
406#endif
407