Merge tag 'gpio-updates-for-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/kernel/linux-rpi.git] / include / linux / gpio / driver.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __LINUX_GPIO_DRIVER_H
3 #define __LINUX_GPIO_DRIVER_H
4
5 #include <linux/device.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 #include <linux/pinctrl/pinconf-generic.h>
12 #include <linux/property.h>
13 #include <linux/types.h>
14
15 struct gpio_desc;
16 struct of_phandle_args;
17 struct device_node;
18 struct seq_file;
19 struct gpio_device;
20 struct module;
21 enum gpiod_flags;
22 enum gpio_lookup_flags;
23
24 struct gpio_chip;
25
26 #define GPIO_LINE_DIRECTION_IN  1
27 #define GPIO_LINE_DIRECTION_OUT 0
28
29 /**
30  * struct gpio_irq_chip - GPIO interrupt controller
31  */
32 struct gpio_irq_chip {
33         /**
34          * @chip:
35          *
36          * GPIO IRQ chip implementation, provided by GPIO driver.
37          */
38         struct irq_chip *chip;
39
40         /**
41          * @domain:
42          *
43          * Interrupt translation domain; responsible for mapping between GPIO
44          * hwirq number and Linux IRQ number.
45          */
46         struct irq_domain *domain;
47
48         /**
49          * @domain_ops:
50          *
51          * Table of interrupt domain operations for this IRQ chip.
52          */
53         const struct irq_domain_ops *domain_ops;
54
55 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
56         /**
57          * @fwnode:
58          *
59          * Firmware node corresponding to this gpiochip/irqchip, necessary
60          * for hierarchical irqdomain support.
61          */
62         struct fwnode_handle *fwnode;
63
64         /**
65          * @parent_domain:
66          *
67          * If non-NULL, will be set as the parent of this GPIO interrupt
68          * controller's IRQ domain to establish a hierarchical interrupt
69          * domain. The presence of this will activate the hierarchical
70          * interrupt support.
71          */
72         struct irq_domain *parent_domain;
73
74         /**
75          * @child_to_parent_hwirq:
76          *
77          * This callback translates a child hardware IRQ offset to a parent
78          * hardware IRQ offset on a hierarchical interrupt chip. The child
79          * hardware IRQs correspond to the GPIO index 0..ngpio-1 (see the
80          * ngpio field of struct gpio_chip) and the corresponding parent
81          * hardware IRQ and type (such as IRQ_TYPE_*) shall be returned by
82          * the driver. The driver can calculate this from an offset or using
83          * a lookup table or whatever method is best for this chip. Return
84          * 0 on successful translation in the driver.
85          *
86          * If some ranges of hardware IRQs do not have a corresponding parent
87          * HWIRQ, return -EINVAL, but also make sure to fill in @valid_mask and
88          * @need_valid_mask to make these GPIO lines unavailable for
89          * translation.
90          */
91         int (*child_to_parent_hwirq)(struct gpio_chip *gc,
92                                      unsigned int child_hwirq,
93                                      unsigned int child_type,
94                                      unsigned int *parent_hwirq,
95                                      unsigned int *parent_type);
96
97         /**
98          * @populate_parent_alloc_arg :
99          *
100          * This optional callback allocates and populates the specific struct
101          * for the parent's IRQ domain. If this is not specified, then
102          * &gpiochip_populate_parent_fwspec_twocell will be used. A four-cell
103          * variant named &gpiochip_populate_parent_fwspec_fourcell is also
104          * available.
105          */
106         void *(*populate_parent_alloc_arg)(struct gpio_chip *gc,
107                                        unsigned int parent_hwirq,
108                                        unsigned int parent_type);
109
110         /**
111          * @child_offset_to_irq:
112          *
113          * This optional callback is used to translate the child's GPIO line
114          * offset on the GPIO chip to an IRQ number for the GPIO to_irq()
115          * callback. If this is not specified, then a default callback will be
116          * provided that returns the line offset.
117          */
118         unsigned int (*child_offset_to_irq)(struct gpio_chip *gc,
119                                             unsigned int pin);
120
121         /**
122          * @child_irq_domain_ops:
123          *
124          * The IRQ domain operations that will be used for this GPIO IRQ
125          * chip. If no operations are provided, then default callbacks will
126          * be populated to setup the IRQ hierarchy. Some drivers need to
127          * supply their own translate function.
128          */
129         struct irq_domain_ops child_irq_domain_ops;
130 #endif
131
132         /**
133          * @handler:
134          *
135          * The IRQ handler to use (often a predefined IRQ core function) for
136          * GPIO IRQs, provided by GPIO driver.
137          */
138         irq_flow_handler_t handler;
139
140         /**
141          * @default_type:
142          *
143          * Default IRQ triggering type applied during GPIO driver
144          * initialization, provided by GPIO driver.
145          */
146         unsigned int default_type;
147
148         /**
149          * @lock_key:
150          *
151          * Per GPIO IRQ chip lockdep class for IRQ lock.
152          */
153         struct lock_class_key *lock_key;
154
155         /**
156          * @request_key:
157          *
158          * Per GPIO IRQ chip lockdep class for IRQ request.
159          */
160         struct lock_class_key *request_key;
161
162         /**
163          * @parent_handler:
164          *
165          * The interrupt handler for the GPIO chip's parent interrupts, may be
166          * NULL if the parent interrupts are nested rather than cascaded.
167          */
168         irq_flow_handler_t parent_handler;
169
170         /**
171          * @parent_handler_data:
172          *
173          * If @per_parent_data is false, @parent_handler_data is a single
174          * pointer used as the data associated with every parent interrupt.
175          *
176          * @parent_handler_data_array:
177          *
178          * If @per_parent_data is true, @parent_handler_data_array is
179          * an array of @num_parents pointers, and is used to associate
180          * different data for each parent. This cannot be NULL if
181          * @per_parent_data is true.
182          */
183         union {
184                 void *parent_handler_data;
185                 void **parent_handler_data_array;
186         };
187
188         /**
189          * @num_parents:
190          *
191          * The number of interrupt parents of a GPIO chip.
192          */
193         unsigned int num_parents;
194
195         /**
196          * @parents:
197          *
198          * A list of interrupt parents of a GPIO chip. This is owned by the
199          * driver, so the core will only reference this list, not modify it.
200          */
201         unsigned int *parents;
202
203         /**
204          * @map:
205          *
206          * A list of interrupt parents for each line of a GPIO chip.
207          */
208         unsigned int *map;
209
210         /**
211          * @threaded:
212          *
213          * True if set the interrupt handling uses nested threads.
214          */
215         bool threaded;
216
217         /**
218          * @per_parent_data:
219          *
220          * True if parent_handler_data_array describes a @num_parents
221          * sized array to be used as parent data.
222          */
223         bool per_parent_data;
224
225         /**
226          * @initialized:
227          *
228          * Flag to track GPIO chip irq member's initialization.
229          * This flag will make sure GPIO chip irq members are not used
230          * before they are initialized.
231          */
232         bool initialized;
233
234         /**
235          * @init_hw: optional routine to initialize hardware before
236          * an IRQ chip will be added. This is quite useful when
237          * a particular driver wants to clear IRQ related registers
238          * in order to avoid undesired events.
239          */
240         int (*init_hw)(struct gpio_chip *gc);
241
242         /**
243          * @init_valid_mask: optional routine to initialize @valid_mask, to be
244          * used if not all GPIO lines are valid interrupts. Sometimes some
245          * lines just cannot fire interrupts, and this routine, when defined,
246          * is passed a bitmap in "valid_mask" and it will have ngpios
247          * bits from 0..(ngpios-1) set to "1" as in valid. The callback can
248          * then directly set some bits to "0" if they cannot be used for
249          * interrupts.
250          */
251         void (*init_valid_mask)(struct gpio_chip *gc,
252                                 unsigned long *valid_mask,
253                                 unsigned int ngpios);
254
255         /**
256          * @valid_mask:
257          *
258          * If not %NULL, holds bitmask of GPIOs which are valid to be included
259          * in IRQ domain of the chip.
260          */
261         unsigned long *valid_mask;
262
263         /**
264          * @first:
265          *
266          * Required for static IRQ allocation. If set, irq_domain_add_simple()
267          * will allocate and map all IRQs during initialization.
268          */
269         unsigned int first;
270
271         /**
272          * @irq_enable:
273          *
274          * Store old irq_chip irq_enable callback
275          */
276         void            (*irq_enable)(struct irq_data *data);
277
278         /**
279          * @irq_disable:
280          *
281          * Store old irq_chip irq_disable callback
282          */
283         void            (*irq_disable)(struct irq_data *data);
284         /**
285          * @irq_unmask:
286          *
287          * Store old irq_chip irq_unmask callback
288          */
289         void            (*irq_unmask)(struct irq_data *data);
290
291         /**
292          * @irq_mask:
293          *
294          * Store old irq_chip irq_mask callback
295          */
296         void            (*irq_mask)(struct irq_data *data);
297 };
298
299 /**
300  * struct gpio_chip - abstract a GPIO controller
301  * @label: a functional name for the GPIO device, such as a part
302  *      number or the name of the SoC IP-block implementing it.
303  * @gpiodev: the internal state holder, opaque struct
304  * @parent: optional parent device providing the GPIOs
305  * @fwnode: optional fwnode providing this controller's properties
306  * @owner: helps prevent removal of modules exporting active GPIOs
307  * @request: optional hook for chip-specific activation, such as
308  *      enabling module power and clock; may sleep
309  * @free: optional hook for chip-specific deactivation, such as
310  *      disabling module power and clock; may sleep
311  * @get_direction: returns direction for signal "offset", 0=out, 1=in,
312  *      (same as GPIO_LINE_DIRECTION_OUT / GPIO_LINE_DIRECTION_IN),
313  *      or negative error. It is recommended to always implement this
314  *      function, even on input-only or output-only gpio chips.
315  * @direction_input: configures signal "offset" as input, or returns error
316  *      This can be omitted on input-only or output-only gpio chips.
317  * @direction_output: configures signal "offset" as output, or returns error
318  *      This can be omitted on input-only or output-only gpio chips.
319  * @get: returns value for signal "offset", 0=low, 1=high, or negative error
320  * @get_multiple: reads values for multiple signals defined by "mask" and
321  *      stores them in "bits", returns 0 on success or negative error
322  * @set: assigns output value for signal "offset"
323  * @set_multiple: assigns output values for multiple signals defined by "mask"
324  * @set_config: optional hook for all kinds of settings. Uses the same
325  *      packed config format as generic pinconf.
326  * @to_irq: optional hook supporting non-static gpio_to_irq() mappings;
327  *      implementation may not sleep
328  * @dbg_show: optional routine to show contents in debugfs; default code
329  *      will be used when this is omitted, but custom code can show extra
330  *      state (such as pullup/pulldown configuration).
331  * @init_valid_mask: optional routine to initialize @valid_mask, to be used if
332  *      not all GPIOs are valid.
333  * @add_pin_ranges: optional routine to initialize pin ranges, to be used when
334  *      requires special mapping of the pins that provides GPIO functionality.
335  *      It is called after adding GPIO chip and before adding IRQ chip.
336  * @base: identifies the first GPIO number handled by this chip;
337  *      or, if negative during registration, requests dynamic ID allocation.
338  *      DEPRECATION: providing anything non-negative and nailing the base
339  *      offset of GPIO chips is deprecated. Please pass -1 as base to
340  *      let gpiolib select the chip base in all possible cases. We want to
341  *      get rid of the static GPIO number space in the long run.
342  * @ngpio: the number of GPIOs handled by this controller; the last GPIO
343  *      handled is (base + ngpio - 1).
344  * @offset: when multiple gpio chips belong to the same device this
345  *      can be used as offset within the device so friendly names can
346  *      be properly assigned.
347  * @names: if set, must be an array of strings to use as alternative
348  *      names for the GPIOs in this chip. Any entry in the array
349  *      may be NULL if there is no alias for the GPIO, however the
350  *      array must be @ngpio entries long.  A name can include a single printk
351  *      format specifier for an unsigned int.  It is substituted by the actual
352  *      number of the gpio.
353  * @can_sleep: flag must be set iff get()/set() methods sleep, as they
354  *      must while accessing GPIO expander chips over I2C or SPI. This
355  *      implies that if the chip supports IRQs, these IRQs need to be threaded
356  *      as the chip access may sleep when e.g. reading out the IRQ status
357  *      registers.
358  * @read_reg: reader function for generic GPIO
359  * @write_reg: writer function for generic GPIO
360  * @be_bits: if the generic GPIO has big endian bit order (bit 31 is representing
361  *      line 0, bit 30 is line 1 ... bit 0 is line 31) this is set to true by the
362  *      generic GPIO core. It is for internal housekeeping only.
363  * @reg_dat: data (in) register for generic GPIO
364  * @reg_set: output set register (out=high) for generic GPIO
365  * @reg_clr: output clear register (out=low) for generic GPIO
366  * @reg_dir_out: direction out setting register for generic GPIO
367  * @reg_dir_in: direction in setting register for generic GPIO
368  * @bgpio_dir_unreadable: indicates that the direction register(s) cannot
369  *      be read and we need to rely on out internal state tracking.
370  * @bgpio_bits: number of register bits used for a generic GPIO i.e.
371  *      <register width> * 8
372  * @bgpio_lock: used to lock chip->bgpio_data. Also, this is needed to keep
373  *      shadowed and real data registers writes together.
374  * @bgpio_data: shadowed data register for generic GPIO to clear/set bits
375  *      safely.
376  * @bgpio_dir: shadowed direction register for generic GPIO to clear/set
377  *      direction safely. A "1" in this word means the line is set as
378  *      output.
379  *
380  * A gpio_chip can help platforms abstract various sources of GPIOs so
381  * they can all be accessed through a common programming interface.
382  * Example sources would be SOC controllers, FPGAs, multifunction
383  * chips, dedicated GPIO expanders, and so on.
384  *
385  * Each chip controls a number of signals, identified in method calls
386  * by "offset" values in the range 0..(@ngpio - 1).  When those signals
387  * are referenced through calls like gpio_get_value(gpio), the offset
388  * is calculated by subtracting @base from the gpio number.
389  */
390 struct gpio_chip {
391         const char              *label;
392         struct gpio_device      *gpiodev;
393         struct device           *parent;
394         struct fwnode_handle    *fwnode;
395         struct module           *owner;
396
397         int                     (*request)(struct gpio_chip *gc,
398                                                 unsigned int offset);
399         void                    (*free)(struct gpio_chip *gc,
400                                                 unsigned int offset);
401         int                     (*get_direction)(struct gpio_chip *gc,
402                                                 unsigned int offset);
403         int                     (*direction_input)(struct gpio_chip *gc,
404                                                 unsigned int offset);
405         int                     (*direction_output)(struct gpio_chip *gc,
406                                                 unsigned int offset, int value);
407         int                     (*get)(struct gpio_chip *gc,
408                                                 unsigned int offset);
409         int                     (*get_multiple)(struct gpio_chip *gc,
410                                                 unsigned long *mask,
411                                                 unsigned long *bits);
412         void                    (*set)(struct gpio_chip *gc,
413                                                 unsigned int offset, int value);
414         void                    (*set_multiple)(struct gpio_chip *gc,
415                                                 unsigned long *mask,
416                                                 unsigned long *bits);
417         int                     (*set_config)(struct gpio_chip *gc,
418                                               unsigned int offset,
419                                               unsigned long config);
420         int                     (*to_irq)(struct gpio_chip *gc,
421                                                 unsigned int offset);
422
423         void                    (*dbg_show)(struct seq_file *s,
424                                                 struct gpio_chip *gc);
425
426         int                     (*init_valid_mask)(struct gpio_chip *gc,
427                                                    unsigned long *valid_mask,
428                                                    unsigned int ngpios);
429
430         int                     (*add_pin_ranges)(struct gpio_chip *gc);
431
432         int                     base;
433         u16                     ngpio;
434         u16                     offset;
435         const char              *const *names;
436         bool                    can_sleep;
437
438 #if IS_ENABLED(CONFIG_GPIO_GENERIC)
439         unsigned long (*read_reg)(void __iomem *reg);
440         void (*write_reg)(void __iomem *reg, unsigned long data);
441         bool be_bits;
442         void __iomem *reg_dat;
443         void __iomem *reg_set;
444         void __iomem *reg_clr;
445         void __iomem *reg_dir_out;
446         void __iomem *reg_dir_in;
447         bool bgpio_dir_unreadable;
448         int bgpio_bits;
449         raw_spinlock_t bgpio_lock;
450         unsigned long bgpio_data;
451         unsigned long bgpio_dir;
452 #endif /* CONFIG_GPIO_GENERIC */
453
454 #ifdef CONFIG_GPIOLIB_IRQCHIP
455         /*
456          * With CONFIG_GPIOLIB_IRQCHIP we get an irqchip inside the gpiolib
457          * to handle IRQs for most practical cases.
458          */
459
460         /**
461          * @irq:
462          *
463          * Integrates interrupt chip functionality with the GPIO chip. Can be
464          * used to handle IRQs for most practical cases.
465          */
466         struct gpio_irq_chip irq;
467 #endif /* CONFIG_GPIOLIB_IRQCHIP */
468
469         /**
470          * @valid_mask:
471          *
472          * If not %NULL, holds bitmask of GPIOs which are valid to be used
473          * from the chip.
474          */
475         unsigned long *valid_mask;
476
477 #if defined(CONFIG_OF_GPIO)
478         /*
479          * If CONFIG_OF_GPIO is enabled, then all GPIO controllers described in
480          * the device tree automatically may have an OF translation
481          */
482
483         /**
484          * @of_node:
485          *
486          * Pointer to a device tree node representing this GPIO controller.
487          */
488         struct device_node *of_node;
489
490         /**
491          * @of_gpio_n_cells:
492          *
493          * Number of cells used to form the GPIO specifier.
494          */
495         unsigned int of_gpio_n_cells;
496
497         /**
498          * @of_xlate:
499          *
500          * Callback to translate a device tree GPIO specifier into a chip-
501          * relative GPIO number and flags.
502          */
503         int (*of_xlate)(struct gpio_chip *gc,
504                         const struct of_phandle_args *gpiospec, u32 *flags);
505 #endif /* CONFIG_OF_GPIO */
506 };
507
508 extern const char *gpiochip_is_requested(struct gpio_chip *gc,
509                         unsigned int offset);
510
511 /**
512  * for_each_requested_gpio_in_range - iterates over requested GPIOs in a given range
513  * @chip:       the chip to query
514  * @i:          loop variable
515  * @base:       first GPIO in the range
516  * @size:       amount of GPIOs to check starting from @base
517  * @label:      label of current GPIO
518  */
519 #define for_each_requested_gpio_in_range(chip, i, base, size, label)                    \
520         for (i = 0; i < size; i++)                                                      \
521                 if ((label = gpiochip_is_requested(chip, base + i)) == NULL) {} else
522
523 /* Iterates over all requested GPIO of the given @chip */
524 #define for_each_requested_gpio(chip, i, label)                                         \
525         for_each_requested_gpio_in_range(chip, i, 0, chip->ngpio, label)
526
527 /* add/remove chips */
528 extern int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
529                                       struct lock_class_key *lock_key,
530                                       struct lock_class_key *request_key);
531
532 /**
533  * gpiochip_add_data() - register a gpio_chip
534  * @gc: the chip to register, with gc->base initialized
535  * @data: driver-private data associated with this chip
536  *
537  * Context: potentially before irqs will work
538  *
539  * When gpiochip_add_data() is called very early during boot, so that GPIOs
540  * can be freely used, the gc->parent device must be registered before
541  * the gpio framework's arch_initcall().  Otherwise sysfs initialization
542  * for GPIOs will fail rudely.
543  *
544  * gpiochip_add_data() must only be called after gpiolib initialization,
545  * i.e. after core_initcall().
546  *
547  * If gc->base is negative, this requests dynamic assignment of
548  * a range of valid GPIOs.
549  *
550  * Returns:
551  * A negative errno if the chip can't be registered, such as because the
552  * gc->base is invalid or already associated with a different chip.
553  * Otherwise it returns zero as a success code.
554  */
555 #ifdef CONFIG_LOCKDEP
556 #define gpiochip_add_data(gc, data) ({          \
557                 static struct lock_class_key lock_key;  \
558                 static struct lock_class_key request_key;         \
559                 gpiochip_add_data_with_key(gc, data, &lock_key, \
560                                            &request_key);         \
561         })
562 #define devm_gpiochip_add_data(dev, gc, data) ({ \
563                 static struct lock_class_key lock_key;  \
564                 static struct lock_class_key request_key;         \
565                 devm_gpiochip_add_data_with_key(dev, gc, data, &lock_key, \
566                                            &request_key);         \
567         })
568 #else
569 #define gpiochip_add_data(gc, data) gpiochip_add_data_with_key(gc, data, NULL, NULL)
570 #define devm_gpiochip_add_data(dev, gc, data) \
571         devm_gpiochip_add_data_with_key(dev, gc, data, NULL, NULL)
572 #endif /* CONFIG_LOCKDEP */
573
574 static inline int gpiochip_add(struct gpio_chip *gc)
575 {
576         return gpiochip_add_data(gc, NULL);
577 }
578 extern void gpiochip_remove(struct gpio_chip *gc);
579 extern int devm_gpiochip_add_data_with_key(struct device *dev, struct gpio_chip *gc, void *data,
580                                            struct lock_class_key *lock_key,
581                                            struct lock_class_key *request_key);
582
583 extern struct gpio_chip *gpiochip_find(void *data,
584                               int (*match)(struct gpio_chip *gc, void *data));
585
586 bool gpiochip_line_is_irq(struct gpio_chip *gc, unsigned int offset);
587 int gpiochip_reqres_irq(struct gpio_chip *gc, unsigned int offset);
588 void gpiochip_relres_irq(struct gpio_chip *gc, unsigned int offset);
589 void gpiochip_disable_irq(struct gpio_chip *gc, unsigned int offset);
590 void gpiochip_enable_irq(struct gpio_chip *gc, unsigned int offset);
591
592 /* irq_data versions of the above */
593 int gpiochip_irq_reqres(struct irq_data *data);
594 void gpiochip_irq_relres(struct irq_data *data);
595
596 /* Paste this in your irq_chip structure  */
597 #define GPIOCHIP_IRQ_RESOURCE_HELPERS                                   \
598                 .irq_request_resources  = gpiochip_irq_reqres,          \
599                 .irq_release_resources  = gpiochip_irq_relres
600
601 static inline void gpio_irq_chip_set_chip(struct gpio_irq_chip *girq,
602                                           const struct irq_chip *chip)
603 {
604         /* Yes, dropping const is ugly, but it isn't like we have a choice */
605         girq->chip = (struct irq_chip *)chip;
606 }
607
608 /* Line status inquiry for drivers */
609 bool gpiochip_line_is_open_drain(struct gpio_chip *gc, unsigned int offset);
610 bool gpiochip_line_is_open_source(struct gpio_chip *gc, unsigned int offset);
611
612 /* Sleep persistence inquiry for drivers */
613 bool gpiochip_line_is_persistent(struct gpio_chip *gc, unsigned int offset);
614 bool gpiochip_line_is_valid(const struct gpio_chip *gc, unsigned int offset);
615
616 /* get driver data */
617 void *gpiochip_get_data(struct gpio_chip *gc);
618
619 struct bgpio_pdata {
620         const char *label;
621         int base;
622         int ngpio;
623 };
624
625 #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
626
627 void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *gc,
628                                              unsigned int parent_hwirq,
629                                              unsigned int parent_type);
630 void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *gc,
631                                               unsigned int parent_hwirq,
632                                               unsigned int parent_type);
633
634 #else
635
636 static inline void *gpiochip_populate_parent_fwspec_twocell(struct gpio_chip *gc,
637                                                     unsigned int parent_hwirq,
638                                                     unsigned int parent_type)
639 {
640         return NULL;
641 }
642
643 static inline void *gpiochip_populate_parent_fwspec_fourcell(struct gpio_chip *gc,
644                                                      unsigned int parent_hwirq,
645                                                      unsigned int parent_type)
646 {
647         return NULL;
648 }
649
650 #endif /* CONFIG_IRQ_DOMAIN_HIERARCHY */
651
652 int bgpio_init(struct gpio_chip *gc, struct device *dev,
653                unsigned long sz, void __iomem *dat, void __iomem *set,
654                void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
655                unsigned long flags);
656
657 #define BGPIOF_BIG_ENDIAN               BIT(0)
658 #define BGPIOF_UNREADABLE_REG_SET       BIT(1) /* reg_set is unreadable */
659 #define BGPIOF_UNREADABLE_REG_DIR       BIT(2) /* reg_dir is unreadable */
660 #define BGPIOF_BIG_ENDIAN_BYTE_ORDER    BIT(3)
661 #define BGPIOF_READ_OUTPUT_REG_SET      BIT(4) /* reg_set stores output value */
662 #define BGPIOF_NO_OUTPUT                BIT(5) /* only input */
663 #define BGPIOF_NO_SET_ON_INPUT          BIT(6)
664
665 int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
666                      irq_hw_number_t hwirq);
667 void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq);
668
669 int gpiochip_irq_domain_activate(struct irq_domain *domain,
670                                  struct irq_data *data, bool reserve);
671 void gpiochip_irq_domain_deactivate(struct irq_domain *domain,
672                                     struct irq_data *data);
673
674 bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gc,
675                                 unsigned int offset);
676
677 #ifdef CONFIG_GPIOLIB_IRQCHIP
678 int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
679                                 struct irq_domain *domain);
680 #else
681 static inline int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
682                                               struct irq_domain *domain)
683 {
684         WARN_ON(1);
685         return -EINVAL;
686 }
687 #endif
688
689 int gpiochip_generic_request(struct gpio_chip *gc, unsigned int offset);
690 void gpiochip_generic_free(struct gpio_chip *gc, unsigned int offset);
691 int gpiochip_generic_config(struct gpio_chip *gc, unsigned int offset,
692                             unsigned long config);
693
694 /**
695  * struct gpio_pin_range - pin range controlled by a gpio chip
696  * @node: list for maintaining set of pin ranges, used internally
697  * @pctldev: pinctrl device which handles corresponding pins
698  * @range: actual range of pins controlled by a gpio controller
699  */
700 struct gpio_pin_range {
701         struct list_head node;
702         struct pinctrl_dev *pctldev;
703         struct pinctrl_gpio_range range;
704 };
705
706 #ifdef CONFIG_PINCTRL
707
708 int gpiochip_add_pin_range(struct gpio_chip *gc, const char *pinctl_name,
709                            unsigned int gpio_offset, unsigned int pin_offset,
710                            unsigned int npins);
711 int gpiochip_add_pingroup_range(struct gpio_chip *gc,
712                         struct pinctrl_dev *pctldev,
713                         unsigned int gpio_offset, const char *pin_group);
714 void gpiochip_remove_pin_ranges(struct gpio_chip *gc);
715
716 #else /* ! CONFIG_PINCTRL */
717
718 static inline int
719 gpiochip_add_pin_range(struct gpio_chip *gc, const char *pinctl_name,
720                        unsigned int gpio_offset, unsigned int pin_offset,
721                        unsigned int npins)
722 {
723         return 0;
724 }
725 static inline int
726 gpiochip_add_pingroup_range(struct gpio_chip *gc,
727                         struct pinctrl_dev *pctldev,
728                         unsigned int gpio_offset, const char *pin_group)
729 {
730         return 0;
731 }
732
733 static inline void
734 gpiochip_remove_pin_ranges(struct gpio_chip *gc)
735 {
736 }
737
738 #endif /* CONFIG_PINCTRL */
739
740 struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc,
741                                             unsigned int hwnum,
742                                             const char *label,
743                                             enum gpio_lookup_flags lflags,
744                                             enum gpiod_flags dflags);
745 void gpiochip_free_own_desc(struct gpio_desc *desc);
746
747 #ifdef CONFIG_GPIOLIB
748
749 /* lock/unlock as IRQ */
750 int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset);
751 void gpiochip_unlock_as_irq(struct gpio_chip *gc, unsigned int offset);
752
753
754 struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
755
756 #else /* CONFIG_GPIOLIB */
757
758 static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
759 {
760         /* GPIO can never have been requested */
761         WARN_ON(1);
762         return ERR_PTR(-ENODEV);
763 }
764
765 static inline int gpiochip_lock_as_irq(struct gpio_chip *gc,
766                                        unsigned int offset)
767 {
768         WARN_ON(1);
769         return -EINVAL;
770 }
771
772 static inline void gpiochip_unlock_as_irq(struct gpio_chip *gc,
773                                           unsigned int offset)
774 {
775         WARN_ON(1);
776 }
777 #endif /* CONFIG_GPIOLIB */
778
779 #define for_each_gpiochip_node(dev, child)                                      \
780         device_for_each_child_node(dev, child)                                  \
781                 if (!fwnode_property_present(child, "gpio-controller")) {} else
782
783 static inline unsigned int gpiochip_node_count(struct device *dev)
784 {
785         struct fwnode_handle *child;
786         unsigned int count = 0;
787
788         for_each_gpiochip_node(dev, child)
789                 count++;
790
791         return count;
792 }
793
794 static inline struct fwnode_handle *gpiochip_node_get_first(struct device *dev)
795 {
796         struct fwnode_handle *fwnode;
797
798         for_each_gpiochip_node(dev, fwnode)
799                 return fwnode;
800
801         return NULL;
802 }
803
804 #endif /* __LINUX_GPIO_DRIVER_H */