hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/gpio/gpiolib.h
....@@ -1,12 +1,9 @@
1
+/* SPDX-License-Identifier: GPL-2.0 */
12 /*
23 * Internal GPIO functions.
34 *
45 * Copyright (C) 2013, Intel Corporation
56 * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License version 2 as
9
- * published by the Free Software Foundation.
107 */
118
129 #ifndef GPIOLIB_H
....@@ -19,9 +16,7 @@
1916 #include <linux/module.h>
2017 #include <linux/cdev.h>
2118
22
-enum of_gpio_flags;
23
-enum gpio_lookup_flags;
24
-struct acpi_device;
19
+#define GPIOCHIP_NAME "gpiochip"
2520
2621 /**
2722 * struct gpio_device - internal state container for GPIO devices
....@@ -61,6 +56,7 @@
6156 const char *label;
6257 void *data;
6358 struct list_head list;
59
+ struct blocking_notifier_head notifier;
6460
6561 #ifdef CONFIG_PINCTRL
6662 /*
....@@ -73,133 +69,31 @@
7369 #endif
7470 };
7571
76
-/**
77
- * struct acpi_gpio_info - ACPI GPIO specific information
78
- * @adev: reference to ACPI device which consumes GPIO resource
79
- * @flags: GPIO initialization flags
80
- * @gpioint: if %true this GPIO is of type GpioInt otherwise type is GpioIo
81
- * @polarity: interrupt polarity as provided by ACPI
82
- * @triggering: triggering type as provided by ACPI
83
- * @quirks: Linux specific quirks as provided by struct acpi_gpio_mapping
84
- */
85
-struct acpi_gpio_info {
86
- struct acpi_device *adev;
87
- enum gpiod_flags flags;
88
- bool gpioint;
89
- int polarity;
90
- int triggering;
91
- unsigned int quirks;
92
-};
93
-
9472 /* gpio suffixes used for ACPI and device tree lookup */
9573 static __maybe_unused const char * const gpio_suffixes[] = { "gpios", "gpio" };
9674
97
-#ifdef CONFIG_OF_GPIO
98
-struct gpio_desc *of_find_gpio(struct device *dev,
99
- const char *con_id,
100
- unsigned int idx,
101
- enum gpio_lookup_flags *flags);
102
-struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np,
103
- const char *list_name, int index, enum of_gpio_flags *flags);
104
-int of_gpiochip_add(struct gpio_chip *gc);
105
-void of_gpiochip_remove(struct gpio_chip *gc);
106
-#else
107
-static inline struct gpio_desc *of_find_gpio(struct device *dev,
108
- const char *con_id,
109
- unsigned int idx,
110
- enum gpio_lookup_flags *flags)
111
-{
112
- return ERR_PTR(-ENOENT);
113
-}
114
-static inline struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np,
115
- const char *list_name, int index, enum of_gpio_flags *flags)
116
-{
117
- return ERR_PTR(-ENOENT);
118
-}
119
-static inline int of_gpiochip_add(struct gpio_chip *gc) { return 0; }
120
-static inline void of_gpiochip_remove(struct gpio_chip *gc) { }
121
-#endif /* CONFIG_OF_GPIO */
75
+struct gpio_array {
76
+ struct gpio_desc **desc;
77
+ unsigned int size;
78
+ struct gpio_chip *chip;
79
+ unsigned long *get_mask;
80
+ unsigned long *set_mask;
81
+ unsigned long invert_mask[];
82
+};
12283
123
-#ifdef CONFIG_ACPI
124
-void acpi_gpiochip_add(struct gpio_chip *chip);
125
-void acpi_gpiochip_remove(struct gpio_chip *chip);
126
-
127
-void acpi_gpiochip_request_interrupts(struct gpio_chip *chip);
128
-void acpi_gpiochip_free_interrupts(struct gpio_chip *chip);
129
-
130
-int acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags,
131
- struct acpi_gpio_info *info);
132
-
133
-struct gpio_desc *acpi_find_gpio(struct device *dev,
134
- const char *con_id,
135
- unsigned int idx,
136
- enum gpiod_flags *dflags,
137
- enum gpio_lookup_flags *lookupflags);
138
-struct gpio_desc *acpi_node_get_gpiod(struct fwnode_handle *fwnode,
139
- const char *propname, int index,
140
- struct acpi_gpio_info *info);
141
-
142
-int acpi_gpio_count(struct device *dev, const char *con_id);
143
-
144
-bool acpi_can_fallback_to_crs(struct acpi_device *adev, const char *con_id);
145
-#else
146
-static inline void acpi_gpiochip_add(struct gpio_chip *chip) { }
147
-static inline void acpi_gpiochip_remove(struct gpio_chip *chip) { }
148
-
149
-static inline void
150
-acpi_gpiochip_request_interrupts(struct gpio_chip *chip) { }
151
-
152
-static inline void
153
-acpi_gpiochip_free_interrupts(struct gpio_chip *chip) { }
154
-
155
-static inline int
156
-acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, struct acpi_gpio_info *info)
157
-{
158
- return 0;
159
-}
160
-
161
-static inline struct gpio_desc *
162
-acpi_find_gpio(struct device *dev, const char *con_id,
163
- unsigned int idx, enum gpiod_flags *dflags,
164
- enum gpio_lookup_flags *lookupflags)
165
-{
166
- return ERR_PTR(-ENOENT);
167
-}
168
-static inline struct gpio_desc *
169
-acpi_node_get_gpiod(struct fwnode_handle *fwnode, const char *propname,
170
- int index, struct acpi_gpio_info *info)
171
-{
172
- return ERR_PTR(-ENXIO);
173
-}
174
-static inline int acpi_gpio_count(struct device *dev, const char *con_id)
175
-{
176
- return -ENODEV;
177
-}
178
-
179
-static inline bool acpi_can_fallback_to_crs(struct acpi_device *adev,
180
- const char *con_id)
181
-{
182
- return false;
183
-}
184
-#endif
185
-
186
-struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip, u16 hwnum);
84
+struct gpio_desc *gpiochip_get_desc(struct gpio_chip *gc, unsigned int hwnum);
18785 int gpiod_get_array_value_complex(bool raw, bool can_sleep,
18886 unsigned int array_size,
18987 struct gpio_desc **desc_array,
190
- int *value_array);
88
+ struct gpio_array *array_info,
89
+ unsigned long *value_bitmap);
19190 int gpiod_set_array_value_complex(bool raw, bool can_sleep,
192
- unsigned int array_size,
193
- struct gpio_desc **desc_array,
194
- int *value_array);
91
+ unsigned int array_size,
92
+ struct gpio_desc **desc_array,
93
+ struct gpio_array *array_info,
94
+ unsigned long *value_bitmap);
19595
196
-/* This is just passed between gpiolib and devres */
197
-struct gpio_desc *gpiod_get_from_of_node(struct device_node *node,
198
- const char *propname, int index,
199
- enum gpiod_flags dflags,
200
- const char *label);
201
-
202
-extern struct spinlock gpio_lock;
96
+extern spinlock_t gpio_lock;
20397 extern struct list_head gpio_devices;
20498
20599 struct gpio_desc {
....@@ -214,13 +108,26 @@
214108 #define FLAG_OPEN_DRAIN 7 /* Gpio is open drain type */
215109 #define FLAG_OPEN_SOURCE 8 /* Gpio is open source type */
216110 #define FLAG_USED_AS_IRQ 9 /* GPIO is connected to an IRQ */
111
+#define FLAG_IRQ_IS_ENABLED 10 /* GPIO is connected to an enabled IRQ */
217112 #define FLAG_IS_HOGGED 11 /* GPIO is hogged */
218113 #define FLAG_TRANSITORY 12 /* GPIO may lose value in sleep or reset */
114
+#define FLAG_PULL_UP 13 /* GPIO has pull up enabled */
115
+#define FLAG_PULL_DOWN 14 /* GPIO has pull down enabled */
116
+#define FLAG_BIAS_DISABLE 15 /* GPIO has pull disabled */
117
+#define FLAG_EDGE_RISING 16 /* GPIO CDEV detects rising edge events */
118
+#define FLAG_EDGE_FALLING 17 /* GPIO CDEV detects falling edge events */
219119
220120 /* Connection label */
221121 const char *label;
222122 /* Name of the GPIO */
223123 const char *name;
124
+#ifdef CONFIG_OF_DYNAMIC
125
+ struct device_node *hog;
126
+#endif
127
+#ifdef CONFIG_GPIO_CDEV
128
+ /* debounce period in microseconds */
129
+ unsigned int debounce_period_us;
130
+#endif
224131 };
225132
226133 int gpiod_request(struct gpio_desc *desc, const char *label);
....@@ -237,9 +144,6 @@
237144 {
238145 return desc - &desc->gdev->descs[0];
239146 }
240
-
241
-void devprop_gpiochip_set_names(struct gpio_chip *chip,
242
- const struct fwnode_handle *fwnode);
243147
244148 /* With descriptor prefix */
245149
....@@ -264,35 +168,17 @@
264168
265169 /* With chip prefix */
266170
267
-#define chip_emerg(chip, fmt, ...) \
268
- dev_emerg(&chip->gpiodev->dev, "(%s): " fmt, chip->label, ##__VA_ARGS__)
269
-#define chip_crit(chip, fmt, ...) \
270
- dev_crit(&chip->gpiodev->dev, "(%s): " fmt, chip->label, ##__VA_ARGS__)
271
-#define chip_err(chip, fmt, ...) \
272
- dev_err(&chip->gpiodev->dev, "(%s): " fmt, chip->label, ##__VA_ARGS__)
273
-#define chip_warn(chip, fmt, ...) \
274
- dev_warn(&chip->gpiodev->dev, "(%s): " fmt, chip->label, ##__VA_ARGS__)
275
-#define chip_info(chip, fmt, ...) \
276
- dev_info(&chip->gpiodev->dev, "(%s): " fmt, chip->label, ##__VA_ARGS__)
277
-#define chip_dbg(chip, fmt, ...) \
278
- dev_dbg(&chip->gpiodev->dev, "(%s): " fmt, chip->label, ##__VA_ARGS__)
279
-
280
-#ifdef CONFIG_GPIO_SYSFS
281
-
282
-int gpiochip_sysfs_register(struct gpio_device *gdev);
283
-void gpiochip_sysfs_unregister(struct gpio_device *gdev);
284
-
285
-#else
286
-
287
-static inline int gpiochip_sysfs_register(struct gpio_device *gdev)
288
-{
289
- return 0;
290
-}
291
-
292
-static inline void gpiochip_sysfs_unregister(struct gpio_device *gdev)
293
-{
294
-}
295
-
296
-#endif /* CONFIG_GPIO_SYSFS */
171
+#define chip_emerg(gc, fmt, ...) \
172
+ dev_emerg(&gc->gpiodev->dev, "(%s): " fmt, gc->label, ##__VA_ARGS__)
173
+#define chip_crit(gc, fmt, ...) \
174
+ dev_crit(&gc->gpiodev->dev, "(%s): " fmt, gc->label, ##__VA_ARGS__)
175
+#define chip_err(gc, fmt, ...) \
176
+ dev_err(&gc->gpiodev->dev, "(%s): " fmt, gc->label, ##__VA_ARGS__)
177
+#define chip_warn(gc, fmt, ...) \
178
+ dev_warn(&gc->gpiodev->dev, "(%s): " fmt, gc->label, ##__VA_ARGS__)
179
+#define chip_info(gc, fmt, ...) \
180
+ dev_info(&gc->gpiodev->dev, "(%s): " fmt, gc->label, ##__VA_ARGS__)
181
+#define chip_dbg(gc, fmt, ...) \
182
+ dev_dbg(&gc->gpiodev->dev, "(%s): " fmt, gc->label, ##__VA_ARGS__)
297183
298184 #endif /* GPIOLIB_H */