1#ifndef __LINUX_GPIO_DRIVER_H
2#define __LINUX_GPIO_DRIVER_H
3
4#include <linux/device.h>
5#include <linux/types.h>
6#include <linux/module.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/kconfig.h>
13
14struct gpio_desc;
15struct of_phandle_args;
16struct device_node;
17struct seq_file;
18struct gpio_device;
19
20#ifdef CONFIG_GPIOLIB
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107struct gpio_chip {
108 const char *label;
109 struct gpio_device *gpiodev;
110 struct device *parent;
111 struct module *owner;
112
113 int (*request)(struct gpio_chip *chip,
114 unsigned offset);
115 void (*free)(struct gpio_chip *chip,
116 unsigned offset);
117 int (*get_direction)(struct gpio_chip *chip,
118 unsigned offset);
119 int (*direction_input)(struct gpio_chip *chip,
120 unsigned offset);
121 int (*direction_output)(struct gpio_chip *chip,
122 unsigned offset, int value);
123 int (*get)(struct gpio_chip *chip,
124 unsigned offset);
125 void (*set)(struct gpio_chip *chip,
126 unsigned offset, int value);
127 void (*set_multiple)(struct gpio_chip *chip,
128 unsigned long *mask,
129 unsigned long *bits);
130 int (*set_debounce)(struct gpio_chip *chip,
131 unsigned offset,
132 unsigned debounce);
133
134 int (*to_irq)(struct gpio_chip *chip,
135 unsigned offset);
136
137 void (*dbg_show)(struct seq_file *s,
138 struct gpio_chip *chip);
139 int base;
140 u16 ngpio;
141 const char *const *names;
142 bool can_sleep;
143 bool irq_not_threaded;
144
145#if IS_ENABLED(CONFIG_GPIO_GENERIC)
146 unsigned long (*read_reg)(void __iomem *reg);
147 void (*write_reg)(void __iomem *reg, unsigned long data);
148 unsigned long (*pin2mask)(struct gpio_chip *gc, unsigned int pin);
149 void __iomem *reg_dat;
150 void __iomem *reg_set;
151 void __iomem *reg_clr;
152 void __iomem *reg_dir;
153 int bgpio_bits;
154 spinlock_t bgpio_lock;
155 unsigned long bgpio_data;
156 unsigned long bgpio_dir;
157#endif
158
159#ifdef CONFIG_GPIOLIB_IRQCHIP
160
161
162
163
164 struct irq_chip *irqchip;
165 struct irq_domain *irqdomain;
166 unsigned int irq_base;
167 irq_flow_handler_t irq_handler;
168 unsigned int irq_default_type;
169 int irq_parent;
170 struct lock_class_key *lock_key;
171#endif
172
173#if defined(CONFIG_OF_GPIO)
174
175
176
177
178 struct device_node *of_node;
179 int of_gpio_n_cells;
180 int (*of_xlate)(struct gpio_chip *gc,
181 const struct of_phandle_args *gpiospec, u32 *flags);
182#endif
183};
184
185extern const char *gpiochip_is_requested(struct gpio_chip *chip,
186 unsigned offset);
187
188
189extern int gpiochip_add_data(struct gpio_chip *chip, void *data);
190static inline int gpiochip_add(struct gpio_chip *chip)
191{
192 return gpiochip_add_data(chip, NULL);
193}
194extern void gpiochip_remove(struct gpio_chip *chip);
195extern int devm_gpiochip_add_data(struct device *dev, struct gpio_chip *chip,
196 void *data);
197extern void devm_gpiochip_remove(struct device *dev, struct gpio_chip *chip);
198
199extern struct gpio_chip *gpiochip_find(void *data,
200 int (*match)(struct gpio_chip *chip, void *data));
201
202
203int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset);
204void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset);
205bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset);
206
207
208bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset);
209bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset);
210
211
212void *gpiochip_get_data(struct gpio_chip *chip);
213
214struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
215
216struct bgpio_pdata {
217 const char *label;
218 int base;
219 int ngpio;
220};
221
222#if IS_ENABLED(CONFIG_GPIO_GENERIC)
223
224int bgpio_init(struct gpio_chip *gc, struct device *dev,
225 unsigned long sz, void __iomem *dat, void __iomem *set,
226 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
227 unsigned long flags);
228
229#define BGPIOF_BIG_ENDIAN BIT(0)
230#define BGPIOF_UNREADABLE_REG_SET BIT(1)
231#define BGPIOF_UNREADABLE_REG_DIR BIT(2)
232#define BGPIOF_BIG_ENDIAN_BYTE_ORDER BIT(3)
233#define BGPIOF_READ_OUTPUT_REG_SET BIT(4)
234#define BGPIOF_NO_OUTPUT BIT(5)
235
236#endif
237
238#ifdef CONFIG_GPIOLIB_IRQCHIP
239
240void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
241 struct irq_chip *irqchip,
242 int parent_irq,
243 irq_flow_handler_t parent_handler);
244
245int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
246 struct irq_chip *irqchip,
247 unsigned int first_irq,
248 irq_flow_handler_t handler,
249 unsigned int type,
250 struct lock_class_key *lock_key);
251
252#ifdef CONFIG_LOCKDEP
253#define gpiochip_irqchip_add(...) \
254( \
255 ({ \
256 static struct lock_class_key _key; \
257 _gpiochip_irqchip_add(__VA_ARGS__, &_key); \
258 }) \
259)
260#else
261#define gpiochip_irqchip_add(...) \
262 _gpiochip_irqchip_add(__VA_ARGS__, NULL)
263#endif
264
265#endif
266
267int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset);
268void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset);
269
270#ifdef CONFIG_PINCTRL
271
272
273
274
275
276
277
278
279struct gpio_pin_range {
280 struct list_head node;
281 struct pinctrl_dev *pctldev;
282 struct pinctrl_gpio_range range;
283};
284
285int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
286 unsigned int gpio_offset, unsigned int pin_offset,
287 unsigned int npins);
288int gpiochip_add_pingroup_range(struct gpio_chip *chip,
289 struct pinctrl_dev *pctldev,
290 unsigned int gpio_offset, const char *pin_group);
291void gpiochip_remove_pin_ranges(struct gpio_chip *chip);
292
293#else
294
295static inline int
296gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
297 unsigned int gpio_offset, unsigned int pin_offset,
298 unsigned int npins)
299{
300 return 0;
301}
302static inline int
303gpiochip_add_pingroup_range(struct gpio_chip *chip,
304 struct pinctrl_dev *pctldev,
305 unsigned int gpio_offset, const char *pin_group)
306{
307 return 0;
308}
309
310static inline void
311gpiochip_remove_pin_ranges(struct gpio_chip *chip)
312{
313}
314
315#endif
316
317struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
318 const char *label);
319void gpiochip_free_own_desc(struct gpio_desc *desc);
320
321#else
322
323static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
324{
325
326 WARN_ON(1);
327 return ERR_PTR(-ENODEV);
328}
329
330#endif
331
332#endif
333