#ifndef __LINUX_GPIO_H
#define __LINUX_GPIO_H
#include <linux/types.h>
#ifdef CONFIG_GPIOLIB
#include <linux/gpio/consumer.h>
#endif
#ifdef CONFIG_GPIOLIB_LEGACY
struct device;
#define GPIOF_IN ((1 << 0))
#define GPIOF_OUT_INIT_LOW ((0 << 0) | (0 << 1))
#define GPIOF_OUT_INIT_HIGH ((0 << 0) | (1 << 1))
#ifdef CONFIG_GPIOLIB
static inline bool gpio_is_valid(int number)
{
return number >= 0;
}
int gpio_request(unsigned gpio, const char *label);
void gpio_free(unsigned gpio);
static inline int gpio_direction_input(unsigned gpio)
{
return gpiod_direction_input(gpio_to_desc(gpio));
}
static inline int gpio_direction_output(unsigned gpio, int value)
{
return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
}
static inline int gpio_get_value_cansleep(unsigned gpio)
{
return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
}
static inline void gpio_set_value_cansleep(unsigned gpio, int value)
{
gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
}
static inline int gpio_get_value(unsigned gpio)
{
return gpiod_get_raw_value(gpio_to_desc(gpio));
}
static inline void gpio_set_value(unsigned gpio, int value)
{
gpiod_set_raw_value(gpio_to_desc(gpio), value);
}
static inline int gpio_to_irq(unsigned gpio)
{
return gpiod_to_irq(gpio_to_desc(gpio));
}
int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
int devm_gpio_request_one(struct device *dev, unsigned gpio,
unsigned long flags, const char *label);
#else
#include <linux/kernel.h>
#include <asm/bug.h>
#include <asm/errno.h>
static inline bool gpio_is_valid(int number)
{
return false;
}
static inline int gpio_request(unsigned gpio, const char *label)
{
return -ENOSYS;
}
static inline int gpio_request_one(unsigned gpio,
unsigned long flags, const char *label)
{
return -ENOSYS;
}
static inline void gpio_free(unsigned gpio)
{
might_sleep();
WARN_ON(1);
}
static inline int gpio_direction_input(unsigned gpio)
{
return -ENOSYS;
}
static inline int gpio_direction_output(unsigned gpio, int value)
{
return -ENOSYS;
}
static inline int gpio_get_value(unsigned gpio)
{
WARN_ON(1);
return 0;
}
static inline void gpio_set_value(unsigned gpio, int value)
{
WARN_ON(1);
}
static inline int gpio_get_value_cansleep(unsigned gpio)
{
WARN_ON(1);
return 0;
}
static inline void gpio_set_value_cansleep(unsigned gpio, int value)
{
WARN_ON(1);
}
static inline int gpio_to_irq(unsigned gpio)
{
WARN_ON(1);
return -EINVAL;
}
static inline int devm_gpio_request_one(struct device *dev, unsigned gpio,
unsigned long flags, const char *label)
{
WARN_ON(1);
return -EINVAL;
}
#endif
#endif
#endif