]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - include/linux/gpio/driver.h
cd9da3885d79cd7d61b85dba7bf3e50714242e21
[karo-tx-linux.git] / include / linux / gpio / driver.h
1 #ifndef __LINUX_GPIO_DRIVER_H
2 #define __LINUX_GPIO_DRIVER_H
3
4 #include <linux/types.h>
5
6 struct device;
7 struct gpio_desc;
8
9 /**
10  * struct gpio_chip - abstract a GPIO controller
11  * @label: for diagnostics
12  * @dev: optional device providing the GPIOs
13  * @owner: helps prevent removal of modules exporting active GPIOs
14  * @list: links gpio_chips together for traversal
15  * @request: optional hook for chip-specific activation, such as
16  *      enabling module power and clock; may sleep
17  * @free: optional hook for chip-specific deactivation, such as
18  *      disabling module power and clock; may sleep
19  * @get_direction: returns direction for signal "offset", 0=out, 1=in,
20  *      (same as GPIOF_DIR_XXX), or negative error
21  * @direction_input: configures signal "offset" as input, or returns error
22  * @direction_output: configures signal "offset" as output, or returns error
23  * @get: returns value for signal "offset"; for output signals this
24  *      returns either the value actually sensed, or zero
25  * @set: assigns output value for signal "offset"
26  * @set_debounce: optional hook for setting debounce time for specified gpio in
27  *      interrupt triggered gpio chips
28  * @to_irq: optional hook supporting non-static gpio_to_irq() mappings;
29  *      implementation may not sleep
30  * @dbg_show: optional routine to show contents in debugfs; default code
31  *      will be used when this is omitted, but custom code can show extra
32  *      state (such as pullup/pulldown configuration).
33  * @base: identifies the first GPIO number handled by this chip; or, if
34  *      negative during registration, requests dynamic ID allocation.
35  * @ngpio: the number of GPIOs handled by this controller; the last GPIO
36  *      handled is (base + ngpio - 1).
37  * @desc: array of ngpio descriptors. Private.
38  * @can_sleep: flag must be set iff get()/set() methods sleep, as they
39  *      must while accessing GPIO expander chips over I2C or SPI
40  * @names: if set, must be an array of strings to use as alternative
41  *      names for the GPIOs in this chip. Any entry in the array
42  *      may be NULL if there is no alias for the GPIO, however the
43  *      array must be @ngpio entries long.  A name can include a single printk
44  *      format specifier for an unsigned int.  It is substituted by the actual
45  *      number of the gpio.
46  *
47  * A gpio_chip can help platforms abstract various sources of GPIOs so
48  * they can all be accessed through a common programing interface.
49  * Example sources would be SOC controllers, FPGAs, multifunction
50  * chips, dedicated GPIO expanders, and so on.
51  *
52  * Each chip controls a number of signals, identified in method calls
53  * by "offset" values in the range 0..(@ngpio - 1).  When those signals
54  * are referenced through calls like gpio_get_value(gpio), the offset
55  * is calculated by subtracting @base from the gpio number.
56  */
57 struct gpio_chip {
58         const char              *label;
59         struct device           *dev;
60         struct module           *owner;
61         struct list_head        list;
62
63         int                     (*request)(struct gpio_chip *chip,
64                                                 unsigned offset);
65         void                    (*free)(struct gpio_chip *chip,
66                                                 unsigned offset);
67         int                     (*get_direction)(struct gpio_chip *chip,
68                                                 unsigned offset);
69         int                     (*direction_input)(struct gpio_chip *chip,
70                                                 unsigned offset);
71         int                     (*direction_output)(struct gpio_chip *chip,
72                                                 unsigned offset, int value);
73         int                     (*get)(struct gpio_chip *chip,
74                                                 unsigned offset);
75         void                    (*set)(struct gpio_chip *chip,
76                                                 unsigned offset, int value);
77         int                     (*set_debounce)(struct gpio_chip *chip,
78                                                 unsigned offset,
79                                                 unsigned debounce);
80
81         int                     (*to_irq)(struct gpio_chip *chip,
82                                                 unsigned offset);
83
84         void                    (*dbg_show)(struct seq_file *s,
85                                                 struct gpio_chip *chip);
86         int                     base;
87         u16                     ngpio;
88         struct gpio_desc        *desc;
89         const char              *const *names;
90         unsigned                can_sleep:1;
91         unsigned                exported:1;
92
93 #if defined(CONFIG_OF_GPIO)
94         /*
95          * If CONFIG_OF is enabled, then all GPIO controllers described in the
96          * device tree automatically may have an OF translation
97          */
98         struct device_node *of_node;
99         int of_gpio_n_cells;
100         int (*of_xlate)(struct gpio_chip *gc,
101                         const struct of_phandle_args *gpiospec, u32 *flags);
102 #endif
103 #ifdef CONFIG_PINCTRL
104         /*
105          * If CONFIG_PINCTRL is enabled, then gpio controllers can optionally
106          * describe the actual pin range which they serve in an SoC. This
107          * information would be used by pinctrl subsystem to configure
108          * corresponding pins for gpio usage.
109          */
110         struct list_head pin_ranges;
111 #endif
112 };
113
114 extern const char *gpiochip_is_requested(struct gpio_chip *chip,
115                         unsigned offset);
116
117 /* add/remove chips */
118 extern int gpiochip_add(struct gpio_chip *chip);
119 extern int __must_check gpiochip_remove(struct gpio_chip *chip);
120 extern struct gpio_chip *gpiochip_find(void *data,
121                               int (*match)(struct gpio_chip *chip, void *data));
122
123 /* lock/unlock as IRQ */
124 int gpiod_lock_as_irq(struct gpio_desc *desc);
125 void gpiod_unlock_as_irq(struct gpio_desc *desc);
126
127 /**
128  * Lookup table for associating GPIOs to specific devices and functions using
129  * platform data.
130  */
131 struct gpiod_lookup {
132         struct list_head list;
133         /*
134          * name of the chip the GPIO belongs to
135          */
136         const char *chip_label;
137         /*
138          * hardware number (i.e. relative to the chip) of the GPIO
139          */
140         u16 chip_hwnum;
141         /*
142          * name of device that can claim this GPIO
143          */
144         const char *dev_id;
145         /*
146          * name of the GPIO from the device's point of view
147          */
148         const char *con_id;
149         /*
150          * index of the GPIO in case several GPIOs share the same name
151          */
152         unsigned int idx;
153         /*
154          * mask of GPIOF_* values
155          */
156         unsigned long flags;
157 };
158
159 /*
160  * Simple definition of a single GPIO under a con_id
161  */
162 #define GPIO_LOOKUP(_chip_label, _chip_hwnum, _dev_id, _con_id, _flags) \
163         GPIO_LOOKUP_IDX(_chip_label, _chip_hwnum, _dev_id, _con_id, 0, _flags)
164
165 /*
166  * Use this macro if you need to have several GPIOs under the same con_id.
167  * Each GPIO needs to use a different index and can be accessed using
168  * gpiod_get_index()
169  */
170 #define GPIO_LOOKUP_IDX(_chip_label, _chip_hwnum, _dev_id, _con_id, _idx, \
171                         _flags)                                           \
172 {                                                                         \
173         .chip_label = _chip_label,                                        \
174         .chip_hwnum = _chip_hwnum,                                        \
175         .dev_id = _dev_id,                                                \
176         .con_id = _con_id,                                                \
177         .idx = _idx,                                                      \
178         .flags = _flags,                                                  \
179 }
180
181 void gpiod_add_table(struct gpiod_lookup *table, size_t size);
182
183 #endif