cregit-Linux how code gets into the kernel

Release 4.12 include/linux/gpio/consumer.h

#ifndef __LINUX_GPIO_CONSUMER_H

#define __LINUX_GPIO_CONSUMER_H

#include <linux/bug.h>
#include <linux/err.h>
#include <linux/kernel.h>

struct device;

/**
 * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are
 * preferable to the old integer-based handles.
 *
 * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid
 * until the GPIO is released.
 */
struct gpio_desc;

/**
 * Struct containing an array of descriptors that can be obtained using
 * gpiod_get_array().
 */

struct gpio_descs {
	
unsigned int ndescs;
	
struct gpio_desc *desc[];
};


#define GPIOD_FLAGS_BIT_DIR_SET		BIT(0)

#define GPIOD_FLAGS_BIT_DIR_OUT		BIT(1)

#define GPIOD_FLAGS_BIT_DIR_VAL		BIT(2)

/**
 * Optional flags that can be passed to one of gpiod_* to configure direction
 * and output value. These values cannot be OR'd.
 */

enum gpiod_flags {
	
GPIOD_ASIS	= 0,
	
GPIOD_IN	= GPIOD_FLAGS_BIT_DIR_SET,
	
GPIOD_OUT_LOW	= GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT,
	
GPIOD_OUT_HIGH	= GPIOD_FLAGS_BIT_DIR_SET | GPIOD_FLAGS_BIT_DIR_OUT |
			  GPIOD_FLAGS_BIT_DIR_VAL,
};

#ifdef CONFIG_GPIOLIB

/* Return the number of GPIOs associated with a device / function */
int gpiod_count(struct device *dev, const char *con_id);

/* Acquire and dispose GPIOs */
struct gpio_desc *__must_check gpiod_get(struct device *dev,
					 const char *con_id,
					 enum gpiod_flags flags);
struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
					       const char *con_id,
					       unsigned int idx,
					       enum gpiod_flags flags);
struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
						  const char *con_id,
						  enum gpiod_flags flags);
struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
							const char *con_id,
							unsigned int index,
							enum gpiod_flags flags);
struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
						const char *con_id,
						enum gpiod_flags flags);
struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
							const char *con_id,
							enum gpiod_flags flags);
void gpiod_put(struct gpio_desc *desc);
void gpiod_put_array(struct gpio_descs *descs);

struct gpio_desc *__must_check devm_gpiod_get(struct device *dev,
					      const char *con_id,
					      enum gpiod_flags flags);
struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
						    const char *con_id,
						    unsigned int idx,
						    enum gpiod_flags flags);
struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev,
						       const char *con_id,
						       enum gpiod_flags flags);
struct gpio_desc *__must_check
devm_gpiod_get_index_optional(struct device *dev, const char *con_id,
			      unsigned int index, enum gpiod_flags flags);
struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev,
						     const char *con_id,
						     enum gpiod_flags flags);
struct gpio_descs *__must_check
devm_gpiod_get_array_optional(struct device *dev, const char *con_id,
			      enum gpiod_flags flags);
void devm_gpiod_put(struct device *dev, struct gpio_desc *desc);
void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs);

int gpiod_get_direction(struct gpio_desc *desc);
int gpiod_direction_input(struct gpio_desc *desc);
int gpiod_direction_output(struct gpio_desc *desc, int value);
int gpiod_direction_output_raw(struct gpio_desc *desc, int value);

/* Value get/set from non-sleeping context */
int gpiod_get_value(const struct gpio_desc *desc);
void gpiod_set_value(struct gpio_desc *desc, int value);
void gpiod_set_array_value(unsigned int array_size,
			   struct gpio_desc **desc_array, int *value_array);
int gpiod_get_raw_value(const struct gpio_desc *desc);
void gpiod_set_raw_value(struct gpio_desc *desc, int value);
void gpiod_set_raw_array_value(unsigned int array_size,
			       struct gpio_desc **desc_array,
			       int *value_array);

/* Value get/set from sleeping context */
int gpiod_get_value_cansleep(const struct gpio_desc *desc);
void gpiod_set_value_cansleep(struct gpio_desc *desc, int value);
void gpiod_set_array_value_cansleep(unsigned int array_size,
				    struct gpio_desc **desc_array,
				    int *value_array);
int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc);
void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value);
void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
					struct gpio_desc **desc_array,
					int *value_array);

int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce);

int gpiod_is_active_low(const struct gpio_desc *desc);
int gpiod_cansleep(const struct gpio_desc *desc);

int gpiod_to_irq(const struct gpio_desc *desc);

/* Convert between the old gpio_ and new gpiod_ interfaces */
struct gpio_desc *gpio_to_desc(unsigned gpio);
int desc_to_gpio(const struct gpio_desc *desc);

/* Child properties interface */
struct fwnode_handle;

struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
					 const char *propname, int index,
					 enum gpiod_flags dflags,
					 const char *label);
struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev,
						const char *con_id, int index,
						struct fwnode_handle *child,
						enum gpiod_flags flags,
						const char *label);

#else /* CONFIG_GPIOLIB */


static inline int gpiod_count(struct device *dev, const char *con_id) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim20100.00%1100.00%
Total20100.00%1100.00%


static inline struct gpio_desc *__must_check gpiod_get(struct device *dev, const char *con_id, enum gpiod_flags flags) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot2683.87%133.33%
Linus Walleij412.90%133.33%
Uwe Kleine-König13.23%133.33%
Total31100.00%3100.00%


static inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev, const char *con_id, unsigned int idx, enum gpiod_flags flags) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot3085.71%133.33%
Linus Walleij411.43%133.33%
Uwe Kleine-König12.86%133.33%
Total35100.00%3100.00%


static inline struct gpio_desc *__must_check gpiod_get_optional(struct device *dev, const char *con_id, enum gpiod_flags flags) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Thierry Reding2177.78%125.00%
Linus Walleij414.81%125.00%
Dmitry Torokhov13.70%125.00%
Uwe Kleine-König13.70%125.00%
Total27100.00%4100.00%


static inline struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev, const char *con_id, unsigned int index, enum gpiod_flags flags) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Thierry Reding2580.65%125.00%
Linus Walleij412.90%125.00%
Uwe Kleine-König13.23%125.00%
Dmitry Torokhov13.23%125.00%
Total31100.00%4100.00%


static inline struct gpio_descs *__must_check gpiod_get_array(struct device *dev, const char *con_id, enum gpiod_flags flags) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim31100.00%1100.00%
Total31100.00%1100.00%


static inline struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev, const char *con_id, enum gpiod_flags flags) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim2696.30%150.00%
Dmitry Torokhov13.70%150.00%
Total27100.00%2100.00%


static inline void gpiod_put(struct gpio_desc *desc) { might_sleep(); /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot21100.00%1100.00%
Total21100.00%1100.00%


static inline void gpiod_put_array(struct gpio_descs *descs) { might_sleep(); /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim21100.00%1100.00%
Total21100.00%1100.00%


static inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, const char *con_id, enum gpiod_flags flags) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot2683.87%133.33%
Linus Walleij412.90%133.33%
Uwe Kleine-König13.23%133.33%
Total31100.00%3100.00%


static inline struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, const char *con_id, unsigned int idx, enum gpiod_flags flags) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot3085.71%133.33%
Linus Walleij411.43%133.33%
Uwe Kleine-König12.86%133.33%
Total35100.00%3100.00%


static inline struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev, const char *con_id, enum gpiod_flags flags) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Thierry Reding2177.78%125.00%
Linus Walleij414.81%125.00%
Dmitry Torokhov13.70%125.00%
Uwe Kleine-König13.70%125.00%
Total27100.00%4100.00%


static inline struct gpio_desc *__must_check devm_gpiod_get_index_optional(struct device *dev, const char *con_id, unsigned int index, enum gpiod_flags flags) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Thierry Reding2580.65%125.00%
Linus Walleij412.90%125.00%
Dmitry Torokhov13.23%125.00%
Uwe Kleine-König13.23%125.00%
Total31100.00%4100.00%


static inline struct gpio_descs *__must_check devm_gpiod_get_array(struct device *dev, const char *con_id, enum gpiod_flags flags) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim31100.00%1100.00%
Total31100.00%1100.00%


static inline struct gpio_descs *__must_check devm_gpiod_get_array_optional(struct device *dev, const char *con_id, enum gpiod_flags flags) { return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim2696.30%150.00%
Dmitry Torokhov13.70%150.00%
Total27100.00%2100.00%


static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) { might_sleep(); /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot26100.00%1100.00%
Total26100.00%1100.00%


static inline void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs) { might_sleep(); /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim26100.00%1100.00%
Total26100.00%1100.00%


static inline int gpiod_get_direction(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return -ENOSYS; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot23100.00%1100.00%
Total23100.00%1100.00%


static inline int gpiod_direction_input(struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return -ENOSYS; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot22100.00%1100.00%
Total22100.00%1100.00%


static inline int gpiod_direction_output(struct gpio_desc *desc, int value) { /* GPIO can never have been requested */ WARN_ON(1); return -ENOSYS; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot25100.00%1100.00%
Total25100.00%1100.00%


static inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value) { /* GPIO can never have been requested */ WARN_ON(1); return -ENOSYS; }

Contributors

PersonTokensPropCommitsCommitProp
Philipp Zabel25100.00%1100.00%
Total25100.00%1100.00%


static inline int gpiod_get_value(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot22100.00%1100.00%
Total22100.00%1100.00%


static inline void gpiod_set_value(struct gpio_desc *desc, int value) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot21100.00%1100.00%
Total21100.00%1100.00%


static inline void gpiod_set_array_value(unsigned int array_size, struct gpio_desc **desc_array, int *value_array) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim27100.00%2100.00%
Total27100.00%2100.00%


static inline int gpiod_get_raw_value(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot22100.00%1100.00%
Total22100.00%1100.00%


static inline void gpiod_set_raw_value(struct gpio_desc *desc, int value) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot21100.00%1100.00%
Total21100.00%1100.00%


static inline void gpiod_set_raw_array_value(unsigned int array_size, struct gpio_desc **desc_array, int *value_array) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim27100.00%2100.00%
Total27100.00%2100.00%


static inline int gpiod_get_value_cansleep(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot22100.00%1100.00%
Total22100.00%1100.00%


static inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot21100.00%1100.00%
Total21100.00%1100.00%


static inline void gpiod_set_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, int *value_array) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim27100.00%2100.00%
Total27100.00%2100.00%


static inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot22100.00%1100.00%
Total22100.00%1100.00%


static inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot21100.00%1100.00%
Total21100.00%1100.00%


static inline void gpiod_set_raw_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, int *value_array) { /* GPIO can never have been requested */ WARN_ON(1); }

Contributors

PersonTokensPropCommitsCommitProp
Rojhalat Ibrahim27100.00%2100.00%
Total27100.00%2100.00%


static inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce) { /* GPIO can never have been requested */ WARN_ON(1); return -ENOSYS; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot25100.00%1100.00%
Total25100.00%1100.00%


static inline int gpiod_is_active_low(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot22100.00%1100.00%
Total22100.00%1100.00%


static inline int gpiod_cansleep(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot22100.00%1100.00%
Total22100.00%1100.00%


static inline int gpiod_to_irq(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return -EINVAL; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot23100.00%1100.00%
Total23100.00%1100.00%


static inline struct gpio_desc *gpio_to_desc(unsigned gpio) { return ERR_PTR(-EINVAL); }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot19100.00%1100.00%
Total19100.00%1100.00%


static inline int desc_to_gpio(const struct gpio_desc *desc) { /* GPIO can never have been requested */ WARN_ON(1); return -EINVAL; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot23100.00%1100.00%
Total23100.00%1100.00%

/* Child properties interface */ struct fwnode_handle;
static inline struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode, const char *propname, int index, enum gpiod_flags dflags, const char *label) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Geert Uytterhoeven2668.42%125.00%
Alexander Stein513.16%125.00%
Andy Shevchenko410.53%125.00%
Boris Brezillon37.89%125.00%
Total38100.00%4100.00%


static inline struct gpio_desc *devm_fwnode_get_index_gpiod_from_child(struct device *dev, const char *con_id, int index, struct fwnode_handle *child, enum gpiod_flags flags, const char *label) { return ERR_PTR(-ENOSYS); }

Contributors

PersonTokensPropCommitsCommitProp
Geert Uytterhoeven3069.77%125.00%
Alexander Stein511.63%125.00%
Boris Brezillon49.30%125.00%
Andy Shevchenko49.30%125.00%
Total43100.00%4100.00%

#endif /* CONFIG_GPIOLIB */
static inline struct gpio_desc *devm_fwnode_get_gpiod_from_child(struct device *dev, const char *con_id, struct fwnode_handle *child, enum gpiod_flags flags, const char *label) { return devm_fwnode_get_index_gpiod_from_child(dev, con_id, 0, child, flags, label); }

Contributors

PersonTokensPropCommitsCommitProp
Boris Brezillon49100.00%1100.00%
Total49100.00%1100.00%

#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) int gpiod_export(struct gpio_desc *desc, bool direction_may_change); int gpiod_export_link(struct device *dev, const char *name, struct gpio_desc *desc); void gpiod_unexport(struct gpio_desc *desc); #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
static inline int gpiod_export(struct gpio_desc *desc, bool direction_may_change) { return -ENOSYS; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot19100.00%1100.00%
Total19100.00%1100.00%


static inline int gpiod_export_link(struct device *dev, const char *name, struct gpio_desc *desc) { return -ENOSYS; }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot26100.00%1100.00%
Total26100.00%1100.00%


static inline void gpiod_unexport(struct gpio_desc *desc) { }

Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot11100.00%1100.00%
Total11100.00%1100.00%

#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ #endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Alexandre Courbot102451.64%315.00%
Rojhalat Ibrahim49925.16%420.00%
Thierry Reding1648.27%15.00%
Boris Brezillon633.18%15.00%
Geert Uytterhoeven603.03%15.00%
Philipp Zabel371.87%15.00%
Linus Walleij351.77%210.00%
Mika Westerberg351.77%15.00%
Alexander Stein201.01%15.00%
Uwe Kleine-König160.81%15.00%
Andy Shevchenko160.81%15.00%
Dmitry Torokhov60.30%15.00%
Oliver Schinagl50.25%15.00%
Arnd Bergmann30.15%15.00%
Total1983100.00%20100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.