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/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
12struct gpio_desc;
13struct of_phandle_args;
14struct device_node;
15struct seq_file;
16struct gpio_device;
17struct module;
18
19#ifdef CONFIG_GPIOLIB
20
21
22
23
24
25
26
27enum single_ended_mode {
28 LINE_MODE_PUSH_PULL,
29 LINE_MODE_OPEN_DRAIN,
30 LINE_MODE_OPEN_SOURCE,
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130struct gpio_chip {
131 const char *label;
132 struct gpio_device *gpiodev;
133 struct device *parent;
134 struct module *owner;
135
136 int (*request)(struct gpio_chip *chip,
137 unsigned offset);
138 void (*free)(struct gpio_chip *chip,
139 unsigned offset);
140 int (*get_direction)(struct gpio_chip *chip,
141 unsigned offset);
142 int (*direction_input)(struct gpio_chip *chip,
143 unsigned offset);
144 int (*direction_output)(struct gpio_chip *chip,
145 unsigned offset, int value);
146 int (*get)(struct gpio_chip *chip,
147 unsigned offset);
148 void (*set)(struct gpio_chip *chip,
149 unsigned offset, int value);
150 void (*set_multiple)(struct gpio_chip *chip,
151 unsigned long *mask,
152 unsigned long *bits);
153 int (*set_debounce)(struct gpio_chip *chip,
154 unsigned offset,
155 unsigned debounce);
156 int (*set_single_ended)(struct gpio_chip *chip,
157 unsigned offset,
158 enum single_ended_mode mode);
159
160 int (*to_irq)(struct gpio_chip *chip,
161 unsigned offset);
162
163 void (*dbg_show)(struct seq_file *s,
164 struct gpio_chip *chip);
165 int base;
166 u16 ngpio;
167 const char *const *names;
168 bool can_sleep;
169 bool irq_not_threaded;
170
171#if IS_ENABLED(CONFIG_GPIO_GENERIC)
172 unsigned long (*read_reg)(void __iomem *reg);
173 void (*write_reg)(void __iomem *reg, unsigned long data);
174 unsigned long (*pin2mask)(struct gpio_chip *gc, unsigned int pin);
175 void __iomem *reg_dat;
176 void __iomem *reg_set;
177 void __iomem *reg_clr;
178 void __iomem *reg_dir;
179 int bgpio_bits;
180 spinlock_t bgpio_lock;
181 unsigned long bgpio_data;
182 unsigned long bgpio_dir;
183#endif
184
185#ifdef CONFIG_GPIOLIB_IRQCHIP
186
187
188
189
190 struct irq_chip *irqchip;
191 struct irq_domain *irqdomain;
192 unsigned int irq_base;
193 irq_flow_handler_t irq_handler;
194 unsigned int irq_default_type;
195 int irq_parent;
196 bool irq_need_valid_mask;
197 unsigned long *irq_valid_mask;
198 struct lock_class_key *lock_key;
199#endif
200
201#if defined(CONFIG_OF_GPIO)
202
203
204
205
206 struct device_node *of_node;
207 int of_gpio_n_cells;
208 int (*of_xlate)(struct gpio_chip *gc,
209 const struct of_phandle_args *gpiospec, u32 *flags);
210#endif
211};
212
213extern const char *gpiochip_is_requested(struct gpio_chip *chip,
214 unsigned offset);
215
216
217extern int gpiochip_add_data(struct gpio_chip *chip, void *data);
218static inline int gpiochip_add(struct gpio_chip *chip)
219{
220 return gpiochip_add_data(chip, NULL);
221}
222extern void gpiochip_remove(struct gpio_chip *chip);
223extern int devm_gpiochip_add_data(struct device *dev, struct gpio_chip *chip,
224 void *data);
225extern void devm_gpiochip_remove(struct device *dev, struct gpio_chip *chip);
226
227extern struct gpio_chip *gpiochip_find(void *data,
228 int (*match)(struct gpio_chip *chip, void *data));
229
230
231int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset);
232void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset);
233bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset);
234
235
236bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset);
237bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset);
238
239
240void *gpiochip_get_data(struct gpio_chip *chip);
241
242struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
243
244struct bgpio_pdata {
245 const char *label;
246 int base;
247 int ngpio;
248};
249
250#if IS_ENABLED(CONFIG_GPIO_GENERIC)
251
252int bgpio_init(struct gpio_chip *gc, struct device *dev,
253 unsigned long sz, void __iomem *dat, void __iomem *set,
254 void __iomem *clr, void __iomem *dirout, void __iomem *dirin,
255 unsigned long flags);
256
257#define BGPIOF_BIG_ENDIAN BIT(0)
258#define BGPIOF_UNREADABLE_REG_SET BIT(1)
259#define BGPIOF_UNREADABLE_REG_DIR BIT(2)
260#define BGPIOF_BIG_ENDIAN_BYTE_ORDER BIT(3)
261#define BGPIOF_READ_OUTPUT_REG_SET BIT(4)
262#define BGPIOF_NO_OUTPUT BIT(5)
263
264#endif
265
266#ifdef CONFIG_GPIOLIB_IRQCHIP
267
268void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
269 struct irq_chip *irqchip,
270 int parent_irq,
271 irq_flow_handler_t parent_handler);
272
273int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
274 struct irq_chip *irqchip,
275 unsigned int first_irq,
276 irq_flow_handler_t handler,
277 unsigned int type,
278 struct lock_class_key *lock_key);
279
280#ifdef CONFIG_LOCKDEP
281#define gpiochip_irqchip_add(...) \
282( \
283 ({ \
284 static struct lock_class_key _key; \
285 _gpiochip_irqchip_add(__VA_ARGS__, &_key); \
286 }) \
287)
288#else
289#define gpiochip_irqchip_add(...) \
290 _gpiochip_irqchip_add(__VA_ARGS__, NULL)
291#endif
292
293#endif
294
295int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset);
296void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset);
297
298#ifdef CONFIG_PINCTRL
299
300
301
302
303
304
305
306
307struct gpio_pin_range {
308 struct list_head node;
309 struct pinctrl_dev *pctldev;
310 struct pinctrl_gpio_range range;
311};
312
313int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
314 unsigned int gpio_offset, unsigned int pin_offset,
315 unsigned int npins);
316int gpiochip_add_pingroup_range(struct gpio_chip *chip,
317 struct pinctrl_dev *pctldev,
318 unsigned int gpio_offset, const char *pin_group);
319void gpiochip_remove_pin_ranges(struct gpio_chip *chip);
320
321#else
322
323static inline int
324gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
325 unsigned int gpio_offset, unsigned int pin_offset,
326 unsigned int npins)
327{
328 return 0;
329}
330static inline int
331gpiochip_add_pingroup_range(struct gpio_chip *chip,
332 struct pinctrl_dev *pctldev,
333 unsigned int gpio_offset, const char *pin_group)
334{
335 return 0;
336}
337
338static inline void
339gpiochip_remove_pin_ranges(struct gpio_chip *chip)
340{
341}
342
343#endif
344
345struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
346 const char *label);
347void gpiochip_free_own_desc(struct gpio_desc *desc);
348
349#else
350
351static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
352{
353
354 WARN_ON(1);
355 return ERR_PTR(-ENODEV);
356}
357
358#endif
359
360#endif
361