1
2#ifndef __LINUX_GPIO_MACHINE_H
3#define __LINUX_GPIO_MACHINE_H
4
5#include <linux/types.h>
6#include <linux/list.h>
7
8enum gpio_lookup_flags {
9 GPIO_ACTIVE_HIGH = (0 << 0),
10 GPIO_ACTIVE_LOW = (1 << 0),
11 GPIO_OPEN_DRAIN = (1 << 1),
12 GPIO_OPEN_SOURCE = (1 << 2),
13 GPIO_PERSISTENT = (0 << 3),
14 GPIO_TRANSITORY = (1 << 3),
15 GPIO_PULL_UP = (1 << 4),
16 GPIO_PULL_DOWN = (1 << 5),
17
18 GPIO_LOOKUP_FLAGS_DEFAULT = GPIO_ACTIVE_HIGH | GPIO_PERSISTENT,
19};
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35struct gpiod_lookup {
36 const char *key;
37 u16 chip_hwnum;
38 const char *con_id;
39 unsigned int idx;
40 unsigned long flags;
41};
42
43struct gpiod_lookup_table {
44 struct list_head list;
45 const char *dev_id;
46 struct gpiod_lookup table[];
47};
48
49
50
51
52
53
54
55
56
57struct gpiod_hog {
58 struct list_head list;
59 const char *chip_label;
60 u16 chip_hwnum;
61 const char *line_name;
62 unsigned long lflags;
63 int dflags;
64};
65
66
67
68
69#define GPIO_LOOKUP(_key, _chip_hwnum, _con_id, _flags) \
70 GPIO_LOOKUP_IDX(_key, _chip_hwnum, _con_id, 0, _flags)
71
72
73
74
75
76
77#define GPIO_LOOKUP_IDX(_key, _chip_hwnum, _con_id, _idx, _flags) \
78{ \
79 .key = _key, \
80 .chip_hwnum = _chip_hwnum, \
81 .con_id = _con_id, \
82 .idx = _idx, \
83 .flags = _flags, \
84}
85
86
87
88
89#define GPIO_HOG(_chip_label, _chip_hwnum, _line_name, _lflags, _dflags) \
90{ \
91 .chip_label = _chip_label, \
92 .chip_hwnum = _chip_hwnum, \
93 .line_name = _line_name, \
94 .lflags = _lflags, \
95 .dflags = _dflags, \
96}
97
98#ifdef CONFIG_GPIOLIB
99void gpiod_add_lookup_table(struct gpiod_lookup_table *table);
100void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n);
101void gpiod_remove_lookup_table(struct gpiod_lookup_table *table);
102void gpiod_add_hogs(struct gpiod_hog *hogs);
103#else
104static inline
105void gpiod_add_lookup_table(struct gpiod_lookup_table *table) {}
106static inline
107void gpiod_add_lookup_tables(struct gpiod_lookup_table **tables, size_t n) {}
108static inline
109void gpiod_remove_lookup_table(struct gpiod_lookup_table *table) {}
110static inline void gpiod_add_hogs(struct gpiod_hog *hogs) {}
111#endif
112
113#endif
114