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
252
253
254struct gpio_chip {
255 const char *label;
256 struct gpio_device *gpiodev;
257 struct device *parent;
258 struct module *owner;
259
260 int (*request)(struct gpio_chip *chip,
261 unsigned offset);
262 void (*free)(struct gpio_chip *chip,
263 unsigned offset);
264 int (*get_direction)(struct gpio_chip *chip,
265 unsigned offset);
266 int (*direction_input)(struct gpio_chip *chip,
267 unsigned offset);
268 int (*direction_output)(struct gpio_chip *chip,
269 unsigned offset, int value);
270 int (*get)(struct gpio_chip *chip,
271 unsigned offset);
272 int (*get_multiple)(struct gpio_chip *chip,
273 unsigned long *mask,
274 unsigned long *bits);
275 void (*set)(struct gpio_chip *chip,
276 unsigned offset, int value);
277 void (*set_multiple)(struct gpio_chip *chip,
278 unsigned long *mask,
279 unsigned long *bits);
280 int (*set_config)(struct gpio_chip *chip,
281 unsigned offset,
282 unsigned long config);
283 int (*to_irq)(struct gpio_chip *chip,
284 unsigned offset);
285
286 void (*dbg_show)(struct seq_file *s,
287 struct gpio_chip *chip);
288
289 int (*init_valid_mask)(struct gpio_chip *chip);
290
291 int base;
292 u16 ngpio;
293 const char *const *names;
294 bool can_sleep;
295
296#if IS_ENABLED(CONFIG_GPIO_GENERIC)
297 unsigned long (*read_reg)(void __iomem *reg);
298 void (*write_reg)(void __iomem *reg, unsigned long data);
299 bool be_bits;
300 void __iomem *reg_dat;
301 void __iomem *reg_set;
302 void __iomem *reg_clr;
303 void __iomem *reg_dir_out;
304 void __iomem *reg_dir_in;
305 bool bgpio_dir_unreadable;
306 int bgpio_bits;
307 spinlock_t bgpio_lock;
308 unsigned long bgpio_data;
309 unsigned long bgpio_dir;
310#endif
311
312#ifdef CONFIG_GPIOLIB_IRQCHIP
313
314
315
316
317
318
319
320
321
322
323
324 struct gpio_irq_chip irq;
325#endif
326
327
328
329
330
331
332
333
334 bool need_valid_mask;
335
336
337
338
339
340
341
342 unsigned long *valid_mask;
343
344#if defined(CONFIG_OF_GPIO)
345
346
347
348
349
350
351
352
353
354
355 struct device_node *of_node;
356
357
358
359
360
361
362 unsigned int of_gpio_n_cells;
363
364
365
366
367
368
369
370 int (*of_xlate)(struct gpio_chip *gc,
371 const struct of_phandle_args *gpiospec, u32 *flags);
372#endif
373};
374
375extern const char *gpiochip_is_requested(struct gpio_chip *chip,
376 unsigned offset);
377
378
379extern int gpiochip_add_data_with_key(struct gpio_chip *chip, void *data,
380 struct lock_class_key *lock_key,
381 struct lock_class_key *request_key);
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406#ifdef CONFIG_LOCKDEP
407#define gpiochip_add_data(chip, data) ({ \
408 static struct lock_class_key lock_key; \
409 static struct lock_class_key request_key; \
410 gpiochip_add_data_with_key(chip, data, &lock_key, \
411 &request_key); \
412 })
413#else
414#define gpiochip_add_data(chip, data) gpiochip_add_data_with_key(chip, data, NULL, NULL)
415#endif
416
417static inline int gpiochip_add(struct gpio_chip *chip)
418{
419 return gpiochip_add_data(chip, NULL);
420}
421extern void gpiochip_remove(struct gpio_chip *chip);
422extern int devm_gpiochip_add_data(struct device *dev, struct gpio_chip *chip,
423 void *data);
424
425extern struct gpio_chip *gpiochip_find(void *data,
426 int (*match)(struct gpio_chip *chip, void *data));
427
428
429int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset);
430void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset);
431bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset);
432int gpiochip_reqres_irq(struct gpio_chip *chip, unsigned int offset);
433void gpiochip_relres_irq(struct gpio_chip *chip, unsigned int offset);
434void gpiochip_disable_irq(struct gpio_chip *chip, unsigned int offset);
435void gpiochip_enable_irq(struct gpio_chip *chip, unsigned int offset);
436
437
438bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset);
439bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset);
440
441
442bool gpiochip_line_is_persistent(struct gpio_chip *chip, unsigned int offset);
443bool gpiochip_line_is_valid(const struct gpio_chip *chip, unsigned int offset);
444
445
446void *gpiochip_get_data(struct gpio_chip *chip);
447
448struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
449
450struct bgpio_pdata {
451 const char *label;
452 int base;
453 int ngpio;
454};
455
456#if IS_ENABLED(CONFIG_GPIO_GENERIC)
457
458int bgpio_init(struct gpio_chip *gc, struct device *dev,
459 unsigned long sz, void __iomem *dat, void __iomem *set,
460 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
461 unsigned long flags);
462
463#define BGPIOF_BIG_ENDIAN BIT(0)
464#define BGPIOF_UNREADABLE_REG_SET BIT(1)
465#define BGPIOF_UNREADABLE_REG_DIR BIT(2)
466#define BGPIOF_BIG_ENDIAN_BYTE_ORDER BIT(3)
467#define BGPIOF_READ_OUTPUT_REG_SET BIT(4)
468#define BGPIOF_NO_OUTPUT BIT(5)
469
470#endif
471
472#ifdef CONFIG_GPIOLIB_IRQCHIP
473
474int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
475 irq_hw_number_t hwirq);
476void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq);
477
478int gpiochip_irq_domain_activate(struct irq_domain *domain,
479 struct irq_data *data, bool reserve);
480void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
481 struct irq_data *data);
482
483void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
484 struct irq_chip *irqchip,
485 unsigned int parent_irq,
486 irq_flow_handler_t parent_handler);
487
488void gpiochip_set_nested_irqchip(struct gpio_chip *gpiochip,
489 struct irq_chip *irqchip,
490 unsigned int parent_irq);
491
492int gpiochip_irqchip_add_key(struct gpio_chip *gpiochip,
493 struct irq_chip *irqchip,
494 unsigned int first_irq,
495 irq_flow_handler_t handler,
496 unsigned int type,
497 bool threaded,
498 struct lock_class_key *lock_key,
499 struct lock_class_key *request_key);
500
501bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gpiochip,
502 unsigned int offset);
503
504#ifdef CONFIG_LOCKDEP
505
506
507
508
509
510
511
512static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
513 struct irq_chip *irqchip,
514 unsigned int first_irq,
515 irq_flow_handler_t handler,
516 unsigned int type)
517{
518 static struct lock_class_key lock_key;
519 static struct lock_class_key request_key;
520
521 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
522 handler, type, false,
523 &lock_key, &request_key);
524}
525
526static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
527 struct irq_chip *irqchip,
528 unsigned int first_irq,
529 irq_flow_handler_t handler,
530 unsigned int type)
531{
532
533 static struct lock_class_key lock_key;
534 static struct lock_class_key request_key;
535
536 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
537 handler, type, true,
538 &lock_key, &request_key);
539}
540#else
541static inline int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
542 struct irq_chip *irqchip,
543 unsigned int first_irq,
544 irq_flow_handler_t handler,
545 unsigned int type)
546{
547 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
548 handler, type, false, NULL, NULL);
549}
550
551static inline int gpiochip_irqchip_add_nested(struct gpio_chip *gpiochip,
552 struct irq_chip *irqchip,
553 unsigned int first_irq,
554 irq_flow_handler_t handler,
555 unsigned int type)
556{
557 return gpiochip_irqchip_add_key(gpiochip, irqchip, first_irq,
558 handler, type, true, NULL, NULL);
559}
560#endif
561
562#endif
563
564int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset);
565void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset);
566int gpiochip_generic_config(struct gpio_chip *chip, unsigned offset,
567 unsigned long config);
568
569#ifdef CONFIG_PINCTRL
570
571
572
573
574
575
576
577struct gpio_pin_range {
578 struct list_head node;
579 struct pinctrl_dev *pctldev;
580 struct pinctrl_gpio_range range;
581};
582
583int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
584 unsigned int gpio_offset, unsigned int pin_offset,
585 unsigned int npins);
586int gpiochip_add_pingroup_range(struct gpio_chip *chip,
587 struct pinctrl_dev *pctldev,
588 unsigned int gpio_offset, const char *pin_group);
589void gpiochip_remove_pin_ranges(struct gpio_chip *chip);
590
591#else
592
593static inline int
594gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
595 unsigned int gpio_offset, unsigned int pin_offset,
596 unsigned int npins)
597{
598 return 0;
599}
600static inline int
601gpiochip_add_pingroup_range(struct gpio_chip *chip,
602 struct pinctrl_dev *pctldev,
603 unsigned int gpio_offset, const char *pin_group)
604{
605 return 0;
606}
607
608static inline void
609gpiochip_remove_pin_ranges(struct gpio_chip *chip)
610{
611}
612
613#endif
614
615struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
616 const char *label,
617 enum gpiod_flags flags);
618void gpiochip_free_own_desc(struct gpio_desc *desc);
619
620void devprop_gpiochip_set_names(struct gpio_chip *chip,
621 const struct fwnode_handle *fwnode);
622
623#else
624
625static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
626{
627
628 WARN_ON(1);
629 return ERR_PTR(-ENODEV);
630}
631
632#endif
633
634#endif
635