diff options
Diffstat (limited to 'drivers/gpio/gpiolib-shared.h')
| -rw-r--r-- | drivers/gpio/gpiolib-shared.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/drivers/gpio/gpiolib-shared.h b/drivers/gpio/gpiolib-shared.h new file mode 100644 index 000000000..618756f6c --- /dev/null +++ b/drivers/gpio/gpiolib-shared.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef __LINUX_GPIO_SHARED_H +#define __LINUX_GPIO_SHARED_H + +#include <linux/mutex.h> + +struct gpio_device; +struct gpio_desc; +struct device; +struct fwnode_handle; + +#if IS_ENABLED(CONFIG_GPIO_SHARED) + +int gpiochip_setup_shared(struct gpio_chip *gc); +void gpio_device_teardown_shared(struct gpio_device *gdev); +int gpio_shared_add_proxy_lookup(struct device *consumer, + struct fwnode_handle *fwnode, + const char *con_id, unsigned long lflags); + +#else + +static inline int gpiochip_setup_shared(struct gpio_chip *gc) +{ + return 0; +} + +static inline void gpio_device_teardown_shared(struct gpio_device *gdev) { } + +static inline int gpio_shared_add_proxy_lookup(struct device *consumer, + struct fwnode_handle *fwnode, + const char *con_id, + unsigned long lflags) +{ + return 0; +} + +#endif /* CONFIG_GPIO_SHARED */ + +struct gpio_shared_desc { + struct gpio_desc *desc; + unsigned long cfg; + unsigned int usecnt; + unsigned int votecnt; + int def_val; + struct mutex mutex; /* serializes all proxy operations on this descriptor */ +}; + +struct gpio_shared_desc *devm_gpiod_shared_get(struct device *dev); + +#endif /* __LINUX_GPIO_SHARED_H */ |
