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;
21enum gpio_lookup_flags;
22
23struct gpio_chip;
24
25#define GPIO_LINE_DIRECTION_IN 1
26#define GPIO_LINE_DIRECTION_OUT 0
27
28
29
30
31struct gpio_irq_chip {
32
33
34
35
36
37 struct irq_chip *chip;
38
39
40
41
42
43
44
45 struct irq_domain *domain;
46
47
48
49
50
51
52 const struct irq_domain_ops *domain_ops;
53
54#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
55
56
57
58
59
60
61 struct fwnode_handle *fwnode;
62
63
64
65
66
67
68
69
70
71 struct irq_domain *parent_domain;
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 int (*child_to_parent_hwirq)(struct gpio_chip *chip,
91 unsigned int child_hwirq,
92 unsigned int child_type,
93 unsigned int *parent_hwirq,
94 unsigned int *parent_type);
95
96
97
98
99
100
101
102
103
104
105 void *(*populate_parent_alloc_arg)(struct gpio_chip *chip,
106 unsigned int parent_hwirq,
107 unsigned int parent_type);
108
109
110
111
112
113
114
115
116
117 unsigned int (*child_offset_to_irq)(struct gpio_chip *chip,
118 unsigned int pin);
119
120
121
122
123
124
125
126
127
128 struct irq_domain_ops child_irq_domain_ops;
129#endif
130
131
132
133
134
135
136
137 irq_flow_handler_t handler;
138
139
140
141
142
143
144
145 unsigned int default_type;
146
147
148
149
150
151
152 struct lock_class_key *lock_key;
153
154
155
156
157
158
159 struct lock_class_key *request_key;
160
161
162
163
164
165
166
167 irq_flow_handler_t parent_handler;
168
169
170
171
172
173
174
175 void *parent_handler_data;
176
177
178
179
180
181
182 unsigned int num_parents;
183
184
185
186
187
188
189
190 unsigned int *parents;
191
192
193
194
195
196
197 unsigned int *map;
198
199
200
201
202
203
204 bool threaded;
205
206
207
208
209
210
211
212 int (*init_hw)(struct gpio_chip *chip);
213
214
215
216
217
218
219
220
221
222
223 void (*init_valid_mask)(struct gpio_chip *chip,
224 unsigned long *valid_mask,
225 unsigned int ngpios);
226
227
228
229
230
231
232
233 unsigned long *valid_mask;
234
235
236
237
238
239
240
241 unsigned int first;
242
243
244
245
246
247
248 void (*irq_enable)(struct irq_data *data);
249
250
251
252
253
254
255 void (*irq_disable)(struct irq_data *data);
256};
257
258#define GPIO_LINE_DIRECTION_IN 1
259#define GPIO_LINE_DIRECTION_OUT 0
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348struct gpio_chip {
349 const char *label;
350 struct gpio_device *gpiodev;
351 struct device *parent;
352 struct module *owner;
353
354 int (*request)(struct gpio_chip *chip,
355 unsigned offset);
356 void (*free)(struct gpio_chip *chip,
357 unsigned offset);
358 int (*get_direction)(struct gpio_chip *chip,
359 unsigned offset);
360 int (*direction_input)(struct gpio_chip *chip,
361 unsigned offset);
362 int (*direction_output)(struct gpio_chip *chip,
363 unsigned offset, int value);
364 int (*get)(struct gpio_chip *chip,
365 unsigned offset);
366 int (*get_multiple)(struct gpio_chip *chip,
367 unsigned long *mask,
368 unsigned long *bits);
369 void (*set)(struct gpio_chip *chip,
370 unsigned offset, int value);
371 void (*set_multiple)(struct gpio_chip *chip,
372 unsigned long *mask,
373 unsigned long *bits);
374 int (*set_config)(struct gpio_chip *chip,
375 unsigned offset,
376 unsigned long config);
377 int (*to_irq)(struct gpio_chip *chip,
378 unsigned offset);
379
380 void (*dbg_show)(struct seq_file *s,
381 struct gpio_chip *chip);
382
383 int (*init_valid_mask)(struct gpio_chip *chip,
384 unsigned long *valid_mask,
385 unsigned int ngpios);
386
387 int (*add_pin_ranges)(struct gpio_chip *chip);
388
389 int base;
390 u16 ngpio;
391 const char *const *names;
392 bool can_sleep;
393
394#if IS_ENABLED(CONFIG_GPIO_GENERIC)
395 unsigned long (*read_reg)(void __iomem *reg);
396 void (*write_reg)(void __iomem *reg, unsigned long data);
397 bool be_bits;
398 void __iomem *reg_dat;
399 void __iomem *reg_set;
400 void __iomem *reg_clr;
401 void __iomem *reg_dir_out;
402 void __iomem *reg_dir_in;
403 bool bgpio_dir_unreadable;
404 int bgpio_bits;
405 spinlock_t bgpio_lock;
406 unsigned long bgpio_data;
407 unsigned long bgpio_dir;
408#endif
409
410#ifdef CONFIG_GPIOLIB_IRQCHIP
411
412
413
414
415
416
417
418
419
420
421
422 struct gpio_irq_chip irq;
423#endif
424
425
426
427
428
429
430
431 unsigned long *valid_mask;
432
433#if defined(CONFIG_OF_GPIO)
434
435
436
437
438
439
440
441
442
443
444 struct device_node *of_node;
445
446
447
448
449
450
451 unsigned int of_gpio_n_cells;
452
453
454
455
456
457
458
459 int (*of_xlate)(struct gpio_chip *gc,
460 const struct of_phandle_args *gpiospec, u32 *flags);
461#endif
462};
463
464extern const char *gpiochip_is_requested(struct gpio_chip *chip,
465 unsigned offset);
466
467
468
469
470
471
472
473
474
475#define for_each_requested_gpio_in_range(chip, i, base, size, label) \
476 for (i = 0; i < size; i++) \
477 if ((label = gpiochip_is_requested(chip, base + i)) == NULL) {} else
478
479
480#define for_each_requested_gpio(chip, i, label) \
481 for_each_requested_gpio_in_range(chip, i, 0, chip->ngpio, label)
482
483
484extern int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data,
485 struct lock_class_key *lock_key,
486 struct lock_class_key *request_key);
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511#ifdef CONFIG_LOCKDEP
512#define gpiochip_add_data(chip, data) ({ \
513 static struct lock_class_key lock_key; \
514 static struct lock_class_key request_key; \
515 gpiochip_add_data_with_key(chip, data, &lock_key, \
516 &request_key); \
517 })
518#else
519#define gpiochip_add_data(chip, data) gpiochip_add_data_with_key(chip, data, NULL, NULL)
520#endif
521
522static inline int gpiochip_add(struct gpio_chip *chip)
523{
524 return gpiochip_add_data(chip, NULL);
525}
526extern void gpiochip_remove(struct gpio_chip *chip);
527extern int devm_gpiochip_add_data(struct device *dev, struct gpio_chip *chip,
528 void *data);
529
530extern struct gpio_chip *gpiochip_find(void *data,
531 int (*match)(struct gpio_chip *chip, void *data));
532
533bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset);
534int gpiochip_reqres_irq(struct gpio_chip *chip, unsigned int offset);
535void gpiochip_relres_irq(struct gpio_chip *chip, unsigned int offset);
536void gpiochip_disable_irq(struct gpio_chip *chip, unsigned int offset);
537void gpiochip_enable_irq(struct gpio_chip *chip, unsigned int offset);
538
539
540bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset);
541bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset);
542
543
544bool gpiochip_line_is_persistent(struct gpio_chip *chip, unsigned int offset);
545bool gpiochip_line_is_valid(const struct gpio_chip *chip, unsigned int offset);
546
547
548void *gpiochip_get_data(struct gpio_chip *chip);
549
550struct bgpio_pdata {
551 const char *label;
552 int base;
553 int ngpio;
554};
555
556#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
557
558void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
559 unsigned int parent_hwirq,
560 unsigned int parent_type);
561void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
562 unsigned int parent_hwirq,
563 unsigned int parent_type);
564
565#else
566
567static inline void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *chip,
568 unsigned int parent_hwirq,
569 unsigned int parent_type)
570{
571 return NULL;
572}
573
574static inline void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *chip,
575 unsigned int parent_hwirq,
576 unsigned int parent_type)
577{
578 return NULL;
579}
580
581#endif
582
583int bgpio_init(struct gpio_chip *gc, struct device *dev,
584 unsigned long sz, void __iomem *dat, void __iomem *set,
585 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
586 unsigned long flags);
587
588#define BGPIOF_BIG_ENDIAN BIT(0)
589#define BGPIOF_UNREADABLE_REG_SET BIT(1)
590#define BGPIOF_UNREADABLE_REG_DIR BIT(2)
591#define BGPIOF_BIG_ENDIAN_BYTE_ORDER BIT(3)
592#define BGPIOF_READ_OUTPUT_REG_SET BIT(4)
593#define BGPIOF_NO_OUTPUT BIT(5)
594
595int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
596 irq_hw_number_t hwirq);
597void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq);
598
599int gpiochip_irq_domain_activate(struct irq_domain *domain,
600 struct irq_data *data, bool reserve);
601void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
602 struct irq_data *data);
603
604void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip,
605 struct irq_chip *irqchip,
606 unsigned int parent_irq);
607
608int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip,
609 struct irq_chip *irqchip,
610 unsigned int first_irq,
611 irq_flow_handler_t handler,
612 unsigned int type,
613 bool threaded,
614 struct lock_class_key *lock_key,
615 struct lock_class_key *request_key);
616
617bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip,
618 unsigned int offset);
619
620#ifdef CONFIG_LOCKDEP
621
622
623
624
625
626
627
628static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
629 struct irq_chip *irqchip,
630 unsigned int first_irq,
631 irq_flow_handler_t handler,
632 unsigned int type)
633{
634 static struct lock_class_key lock_key;
635 static struct lock_class_key request_key;
636
637 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
638 handler, type, false,
639 &lock_key, &request_key);
640}
641
642static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
643 struct irq_chip *irqchip,
644 unsigned int first_irq,
645 irq_flow_handler_t handler,
646 unsigned int type)
647{
648
649 static struct lock_class_key lock_key;
650 static struct lock_class_key request_key;
651
652 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
653 handler, type, true,
654 &lock_key, &request_key);
655}
656#else
657static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
658 struct irq_chip *irqchip,
659 unsigned int first_irq,
660 irq_flow_handler_t handler,
661 unsigned int type)
662{
663 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
664 handler, type, false, NULL, NULL);
665}
666
667static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
668 struct irq_chip *irqchip,
669 unsigned int first_irq,
670 irq_flow_handler_t handler,
671 unsigned int type)
672{
673 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
674 handler, type, true, NULL, NULL);
675}
676#endif
677
678int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset);
679void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset);
680int gpiochip_generic_config(struct gpio_chip *chip, unsigned offset,
681 unsigned long config);
682
683
684
685
686
687
688
689struct gpio_pin_range {
690 struct list_head node;
691 struct pinctrl_dev *pctldev;
692 struct pinctrl_gpio_range range;
693};
694
695#ifdef CONFIG_PINCTRL
696
697int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
698 unsigned int gpio_offset, unsigned int pin_offset,
699 unsigned int npins);
700int gpiochip_add_pingroup_range(struct gpio_chip *chip,
701 struct pinctrl_dev *pctldev,
702 unsigned int gpio_offset, const char *pin_group);
703void gpiochip_remove_pin_ranges(struct gpio_chip *chip);
704
705#else
706
707static inline int
708gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
709 unsigned int gpio_offset, unsigned int pin_offset,
710 unsigned int npins)
711{
712 return 0;
713}
714static inline int
715gpiochip_add_pingroup_range(struct gpio_chip *chip,
716 struct pinctrl_dev *pctldev,
717 unsigned int gpio_offset, const char *pin_group)
718{
719 return 0;
720}
721
722static inline void
723gpiochip_remove_pin_ranges(struct gpio_chip *chip)
724{
725}
726
727#endif
728
729struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip,
730 unsigned int hwnum,
731 const char *label,
732 enum gpio_lookup_flags lflags,
733 enum gpiod_flags dflags);
734void gpiochip_free_own_desc(struct gpio_desc *desc);
735
736void devprop_gpiochip_set_names(struct gpio_chip *chip,
737 const struct fwnode_handle *fwnode);
738
739
740#ifdef CONFIG_GPIOLIB
741
742
743int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset);
744void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset);
745
746
747struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
748
749#else
750
751static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
752{
753
754 WARN_ON(1);
755 return ERR_PTR(-ENODEV);
756}
757
758static inline int gpiochip_lock_as_irq(struct gpio_chip *chip,
759 unsigned int offset)
760{
761 WARN_ON(1);
762 return -EINVAL;
763}
764
765static inline void gpiochip_unlock_as_irq(struct gpio_chip *chip,
766 unsigned int offset)
767{
768 WARN_ON(1);
769}
770#endif
771
772#endif
773