consumer.h revision ef70bbe1aaa612f75360e5df5952fddec50b7ca9
179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#ifndef __LINUX_GPIO_CONSUMER_H 279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#define __LINUX_GPIO_CONSUMER_H 379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#include <linux/err.h> 579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#include <linux/kernel.h> 679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#ifdef CONFIG_GPIOLIB 879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct device; 1079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_chip; 1179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 1279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/** 1379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * Opaque descriptor for a GPIO. These are obtained using gpiod_get() and are 1479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * preferable to the old integer-based handles. 1579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * 1679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * Contrary to integers, a pointer to a gpio_desc is guaranteed to be valid 1779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot * until the GPIO is released. 1879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot */ 1979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_desc; 2079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 21bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot/* Acquire and dispose GPIOs */ 22bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check gpiod_get(struct device *dev, 23bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot const char *con_id); 24bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check gpiod_get_index(struct device *dev, 25bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot const char *con_id, 26bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot unsigned int idx); 27bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotvoid gpiod_put(struct gpio_desc *desc); 28bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot 29bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check devm_gpiod_get(struct device *dev, 30bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot const char *con_id); 31bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotstruct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, 32bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot const char *con_id, 33bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot unsigned int idx); 34bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbotvoid devm_gpiod_put(struct device *dev, struct gpio_desc *desc); 35bae48da237fcedd7ad09569025483b988635efb7Alexandre Courbot 3679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_direction(const struct gpio_desc *desc); 3779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_direction_input(struct gpio_desc *desc); 3879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_direction_output(struct gpio_desc *desc, int value); 39ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabelint gpiod_direction_output_raw(struct gpio_desc *desc, int value); 4079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 4179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/* Value get/set from non-sleeping context */ 4279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_value(const struct gpio_desc *desc); 4379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_value(struct gpio_desc *desc, int value); 4479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_raw_value(const struct gpio_desc *desc); 4579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_raw_value(struct gpio_desc *desc, int value); 4679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 4779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/* Value get/set from sleeping context */ 4879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_value_cansleep(const struct gpio_desc *desc); 4979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_value_cansleep(struct gpio_desc *desc, int value); 5079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_get_raw_value_cansleep(const struct gpio_desc *desc); 5179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value); 5279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 5379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce); 5479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 5579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_is_active_low(const struct gpio_desc *desc); 5679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_cansleep(const struct gpio_desc *desc); 5779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 5879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_to_irq(const struct gpio_desc *desc); 5979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 6079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot/* Convert between the old gpio_ and new gpiod_ interfaces */ 6179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_desc *gpio_to_desc(unsigned gpio); 6279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint desc_to_gpio(const struct gpio_desc *desc); 6379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc); 6479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 6579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#else /* CONFIG_GPIOLIB */ 6679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 6779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *__must_check gpiod_get(struct device *dev, 6879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot const char *con_id) 6979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 7079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return ERR_PTR(-ENOSYS); 7179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 7279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev, 7379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot const char *con_id, 7479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot unsigned int idx) 7579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 7679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return ERR_PTR(-ENOSYS); 7779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 7879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_put(struct gpio_desc *desc) 7979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 8079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot might_sleep(); 8179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 8279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 8379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 8479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 8579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 8679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, 8779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot const char *con_id) 8879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 8979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return ERR_PTR(-ENOSYS); 9079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 9179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline 9279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstruct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, 9379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot const char *con_id, 9479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot unsigned int idx) 9579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 9679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return ERR_PTR(-ENOSYS); 9779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 9879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) 9979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 10079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot might_sleep(); 10179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 10279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 10379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 10479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 10579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 10679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 10779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_direction(const struct gpio_desc *desc) 10879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 10979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 11079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 11179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -ENOSYS; 11279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 11379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_direction_input(struct gpio_desc *desc) 11479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 11579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 11679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 11779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -ENOSYS; 11879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 11979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_direction_output(struct gpio_desc *desc, int value) 12079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 12179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 12279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 12379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -ENOSYS; 12479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 125ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabelstatic inline int gpiod_direction_output_raw(struct gpio_desc *desc, int value) 126ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel{ 127ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel /* GPIO can never have been requested */ 128ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel WARN_ON(1); 129ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel return -ENOSYS; 130ef70bbe1aaa612f75360e5df5952fddec50b7ca9Philipp Zabel} 13179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 13279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 13379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_value(const struct gpio_desc *desc) 13479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 13579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 13679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 13779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return 0; 13879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 13979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_value(struct gpio_desc *desc, int value) 14079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 14179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 14279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 14379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 14479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_raw_value(const struct gpio_desc *desc) 14579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 14679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 14779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 14879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return 0; 14979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 15079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_raw_value(struct gpio_desc *desc, int value) 15179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 15279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 15379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 15479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 15579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 15679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_value_cansleep(const struct gpio_desc *desc) 15779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 15879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 15979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 16079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return 0; 16179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 16279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_value_cansleep(struct gpio_desc *desc, int value) 16379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 16479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 16579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 16679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 16779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc) 16879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 16979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 17079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 17179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return 0; 17279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 17379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, 17479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot int value) 17579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 17679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 17779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 17879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 17979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 18079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce) 18179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 18279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 18379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 18479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -ENOSYS; 18579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 18679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 18779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_is_active_low(const struct gpio_desc *desc) 18879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 18979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 19079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 19179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return 0; 19279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 19379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_cansleep(const struct gpio_desc *desc) 19479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 19579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 19679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 19779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return 0; 19879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 19979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 20079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_to_irq(const struct gpio_desc *desc) 20179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 20279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 20379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 20479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -EINVAL; 20579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 20679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 20779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_desc *gpio_to_desc(unsigned gpio) 20879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 20979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return ERR_PTR(-EINVAL); 21079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 21179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int desc_to_gpio(const struct gpio_desc *desc) 21279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 21379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 21479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 21579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -EINVAL; 21679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 21779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc) 21879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 21979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot /* GPIO can never have been requested */ 22079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot WARN_ON(1); 22179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return ERR_PTR(-ENODEV); 22279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 22379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 22479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 22579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#endif /* CONFIG_GPIOLIB */ 22679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 22779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) 22879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 22979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_export(struct gpio_desc *desc, bool direction_may_change); 23079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_export_link(struct device *dev, const char *name, 23179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot struct gpio_desc *desc); 23279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotint gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value); 23379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotvoid gpiod_unexport(struct gpio_desc *desc); 23479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 23579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 23679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 23779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_export(struct gpio_desc *desc, 23879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot bool direction_may_change) 23979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 24079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -ENOSYS; 24179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 24279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 24379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_export_link(struct device *dev, const char *name, 24479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot struct gpio_desc *desc) 24579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 24679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -ENOSYS; 24779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 24879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 24979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline int gpiod_sysfs_set_active_low(struct gpio_desc *desc, int value) 25079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 25179a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot return -ENOSYS; 25279a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 25379a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 25479a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbotstatic inline void gpiod_unexport(struct gpio_desc *desc) 25579a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot{ 25679a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot} 25779a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 25879a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#endif /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ 25979a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot 26079a9becda8940deb2274b5aa4577c86d52ee7ecbAlexandre Courbot#endif 261