1
2#ifndef __LINUX_GPIO_DRIVER_H
3#define __LINUX_GPIO_DRIVER_H
4
5#include <linux/device.h>
6#include <linux/types.h>
7#include <linux/irq.h>
8#include <linux/irqchip/chained_irq.h>
9#include <linux/irqdomain.h>
10#include <linux/lockdep.h>
11#include <linux/pinctrl/pinctrl.h>
12#include <linux/pinctrl/pinconf-generic.h>
13
14struct gpio_desc;
15struct of_phandle_args;
16struct device_node;
17struct seq_file;
18struct gpio_device;
19struct module;
20enum gpiod_flags;
21
22#ifdef CONFIG_GPIOLIB
23
24#ifdef CONFIG_GPIOLIB_IRQCHIP
25
26
27
28struct gpio_irq_chip {
29
30
31
32
33
34 struct irq_chip *chip;
35
36
37
38
39
40
41
42 struct irq_domain *domain;
43
44
45
46
47
48
49 const struct irq_domain_ops *domain_ops;
50
51
52
53
54
55
56
57 irq_flow_handler_t handler;
58
59
60
61
62
63
64
65 unsigned int default_type;
66
67
68
69
70
71
72 struct lock_class_key *lock_key;
73
74
75
76
77
78
79 struct lock_class_key *request_key;
80
81
82
83
84
85
86
87 irq_flow_handler_t parent_handler;
88
89
90
91
92
93
94
95 void *parent_handler_data;
96
97
98
99
100
101
102 unsigned int num_parents;
103
104
105
106
107
108
109 unsigned int parent_irq;
110
111
112
113
114
115
116
117 unsigned int *parents;
118
119
120
121
122
123
124 unsigned int *map;
125
126
127
128
129
130
131 bool threaded;
132
133
134
135
136
137
138 bool need_valid_mask;
139
140
141
142
143
144
145
146 unsigned long *valid_mask;
147
148
149
150
151
152
153
154 unsigned int first;
155
156
157
158
159
160
161 void (*irq_enable)(struct irq_data *data);
162
163
164
165
166
167
168 void (*irq_disable)(struct irq_data *data);
169};
170#endif
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252struct gpio_chip {
253 const char *label;
254 struct gpio_device *gpiodev;
255 struct device *parent;
256 struct module *owner;
257
258 int (*request)(struct gpio_chip *chip,
259 unsigned offset);
260 void (*free)(struct gpio_chip *chip,
261 unsigned offset);
262 int (*get_direction)(struct gpio_chip *chip,
263 unsigned offset);
264 int (*direction_input)(struct gpio_chip *chip,
265 unsigned offset);
266 int (*direction_output)(struct gpio_chip *chip,
267 unsigned offset, int value);
268 int (*get)(struct gpio_chip *chip,
269 unsigned offset);
270 int (*get_multiple)(struct gpio_chip *chip,
271 unsigned long *mask,
272 unsigned long *bits);
273 void (*set)(struct gpio_chip *chip,
274 unsigned offset, int value);
275 void (*set_multiple)(struct gpio_chip *chip,
276 unsigned long *mask,
277 unsigned long *bits);
278 int (*set_config)(struct gpio_chip *chip,
279 unsigned offset,
280 unsigned long config);
281 int (*to_irq)(struct gpio_chip *chip,
282 unsigned offset);
283
284 void (*dbg_show)(struct seq_file *s,
285 struct gpio_chip *chip);
286
287 int (*init_valid_mask)(struct gpio_chip *chip);
288
289 int base;
290 u16 ngpio;
291 const char *const *names;
292 bool can_sleep;
293
294#if IS_ENABLED(CONFIG_GPIO_GENERIC)
295 unsigned long (*read_reg)(void __iomem *reg);
296 void (*write_reg)(void __iomem *reg, unsigned long data);
297 bool be_bits;
298 void __iomem *reg_dat;
299 void __iomem *reg_set;
300 void __iomem *reg_clr;
301 void __iomem *reg_dir;
302 bool bgpio_dir_inverted;
303 int bgpio_bits;
304 spinlock_t bgpio_lock;
305 unsigned long bgpio_data;
306 unsigned long bgpio_dir;
307#endif
308
309#ifdef CONFIG_GPIOLIB_IRQCHIP
310
311
312
313
314
315
316
317
318
319
320
321 struct gpio_irq_chip irq;
322#endif
323
324
325
326
327
328
329
330
331 bool need_valid_mask;
332
333
334
335
336
337
338
339 unsigned long *valid_mask;
340
341#if defined(CONFIG_OF_GPIO)
342
343
344
345
346
347
348
349
350
351
352 struct device_node *of_node;
353
354
355
356
357
358
359 unsigned int of_gpio_n_cells;
360
361
362
363
364
365
366
367 int (*of_xlate)(struct gpio_chip *gc,
368 const struct of_phandle_args *gpiospec, u32 *flags);
369#endif
370};
371
372extern const char *gpiochip_is_requested(struct gpio_chip *chip,
373 unsigned offset);
374
375
376extern int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data,
377 struct lock_class_key *lock_key,
378 struct lock_class_key *request_key);
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403#ifdef CONFIG_LOCKDEP
404#define gpiochip_add_data(chip, data) ({ \
405 static struct lock_class_key lock_key; \
406 static struct lock_class_key request_key; \
407 gpiochip_add_data_with_key(chip, data, &lock_key, \
408 &request_key); \
409 })
410#else
411#define gpiochip_add_data(chip, data) gpiochip_add_data_with_key(chip, data, NULL, NULL)
412#endif
413
414static inline int gpiochip_add(struct gpio_chip *chip)
415{
416 return gpiochip_add_data(chip, NULL);
417}
418extern void gpiochip_remove(struct gpio_chip *chip);
419extern int devm_gpiochip_add_data(struct device *dev, struct gpio_chip *chip,
420 void *data);
421
422extern struct gpio_chip *gpiochip_find(void *data,
423 int (*match)(struct gpio_chip *chip, void *data));
424
425
426int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset);
427void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset);
428bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset);
429int gpiochip_reqres_irq(struct gpio_chip *chip, unsigned int offset);
430void gpiochip_relres_irq(struct gpio_chip *chip, unsigned int offset);
431void gpiochip_disable_irq(struct gpio_chip *chip, unsigned int offset);
432void gpiochip_enable_irq(struct gpio_chip *chip, unsigned int offset);
433
434
435bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset);
436bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset);
437
438
439bool gpiochip_line_is_persistent(struct gpio_chip *chip, unsigned int offset);
440bool gpiochip_line_is_valid(const struct gpio_chip *chip, unsigned int offset);
441
442
443void *gpiochip_get_data(struct gpio_chip *chip);
444
445struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
446
447struct bgpio_pdata {
448 const char *label;
449 int base;
450 int ngpio;
451};
452
453#if IS_ENABLED(CONFIG_GPIO_GENERIC)
454
455int bgpio_init(struct gpio_chip *gc, struct device *dev,
456 unsigned long sz, void __iomem *dat, void __iomem *set,
457 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
458 unsigned long flags);
459
460#define BGPIOF_BIG_ENDIAN BIT(0)
461#define BGPIOF_UNREADABLE_REG_SET BIT(1)
462#define BGPIOF_UNREADABLE_REG_DIR BIT(2)
463#define BGPIOF_BIG_ENDIAN_BYTE_ORDER BIT(3)
464#define BGPIOF_READ_OUTPUT_REG_SET BIT(4)
465#define BGPIOF_NO_OUTPUT BIT(5)
466
467#endif
468
469#ifdef CONFIG_GPIOLIB_IRQCHIP
470
471int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
472 irq_hw_number_t hwirq);
473void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq);
474
475int gpiochip_irq_domain_activate(struct irq_domain *domain,
476 struct irq_data *data, bool reserve);
477void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
478 struct irq_data *data);
479
480void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
481 struct irq_chip *irqchip,
482 unsigned int parent_irq,
483 irq_flow_handler_t parent_handler);
484
485void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip,
486 struct irq_chip *irqchip,
487 unsigned int parent_irq);
488
489int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip,
490 struct irq_chip *irqchip,
491 unsigned int first_irq,
492 irq_flow_handler_t handler,
493 unsigned int type,
494 bool threaded,
495 struct lock_class_key *lock_key,
496 struct lock_class_key *request_key);
497
498bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip,
499 unsigned int offset);
500
501#ifdef CONFIG_LOCKDEP
502
503
504
505
506
507
508
509static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
510 struct irq_chip *irqchip,
511 unsigned int first_irq,
512 irq_flow_handler_t handler,
513 unsigned int type)
514{
515 static struct lock_class_key lock_key;
516 static struct lock_class_key request_key;
517
518 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
519 handler, type, false,
520 &lock_key, &request_key);
521}
522
523static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
524 struct irq_chip *irqchip,
525 unsigned int first_irq,
526 irq_flow_handler_t handler,
527 unsigned int type)
528{
529
530 static struct lock_class_key lock_key;
531 static struct lock_class_key request_key;
532
533 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
534 handler, type, true,
535 &lock_key, &request_key);
536}
537#else
538static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
539 struct irq_chip *irqchip,
540 unsigned int first_irq,
541 irq_flow_handler_t handler,
542 unsigned int type)
543{
544 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
545 handler, type, false, NULL, NULL);
546}
547
548static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
549 struct irq_chip *irqchip,
550 unsigned int first_irq,
551 irq_flow_handler_t handler,
552 unsigned int type)
553{
554 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
555 handler, type, true, NULL, NULL);
556}
557#endif
558
559#endif
560
561int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset);
562void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset);
563int gpiochip_generic_config(struct gpio_chip *chip, unsigned offset,
564 unsigned long config);
565
566#ifdef CONFIG_PINCTRL
567
568
569
570
571
572
573
574struct gpio_pin_range {
575 struct list_head node;
576 struct pinctrl_dev *pctldev;
577 struct pinctrl_gpio_range range;
578};
579
580int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
581 unsigned int gpio_offset, unsigned int pin_offset,
582 unsigned int npins);
583int gpiochip_add_pingroup_range(struct gpio_chip *chip,
584 struct pinctrl_dev *pctldev,
585 unsigned int gpio_offset, const char *pin_group);
586void gpiochip_remove_pin_ranges(struct gpio_chip *chip);
587
588#else
589
590static inline int
591gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
592 unsigned int gpio_offset, unsigned int pin_offset,
593 unsigned int npins)
594{
595 return 0;
596}
597static inline int
598gpiochip_add_pingroup_range(struct gpio_chip *chip,
599 struct pinctrl_dev *pctldev,
600 unsigned int gpio_offset, const char *pin_group)
601{
602 return 0;
603}
604
605static inline void
606gpiochip_remove_pin_ranges(struct gpio_chip *chip)
607{
608}
609
610#endif
611
612struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
613 const char *label,
614 enum gpiod_flags flags);
615void gpiochip_free_own_desc(struct gpio_desc *desc);
616
617#else
618
619static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
620{
621
622 WARN_ON(1);
623 return ERR_PTR(-ENODEV);
624}
625
626#endif
627
628#endif
629