gpio: devm_gpio_* support should not depend on GPIOLIB
Some architectures (e.g. blackfin) provide gpio API without requiring GPIOLIB support (ARCH_WANT_OPTIONAL_GPIOLIB). devm_gpio_* functions should also work for these architectures, since they do not really depend on GPIOLIB. Add a new option GPIO_DEVRES (enabled by default) to control the build of devres.c. It also removes the empty version of devm_gpio_* functions for !GENERIC_GPIO build from linux/gpio.h, and moves the function declarations from asm-generic/gpio.h into linux/gpio.h. Signed-off-by: Shawn Guo <shawn.guo@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
d59b4eaaf0
commit
6a89a314ab
|
@ -30,6 +30,9 @@ config ARCH_REQUIRE_GPIOLIB
|
||||||
Selecting this from the architecture code will cause the gpiolib
|
Selecting this from the architecture code will cause the gpiolib
|
||||||
code to always get built in.
|
code to always get built in.
|
||||||
|
|
||||||
|
config GPIO_DEVRES
|
||||||
|
def_bool y
|
||||||
|
depends on HAS_IOMEM
|
||||||
|
|
||||||
|
|
||||||
menuconfig GPIOLIB
|
menuconfig GPIOLIB
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
|
|
||||||
ccflags-$(CONFIG_DEBUG_GPIO) += -DDEBUG
|
ccflags-$(CONFIG_DEBUG_GPIO) += -DDEBUG
|
||||||
|
|
||||||
obj-$(CONFIG_GPIOLIB) += gpiolib.o devres.o
|
obj-$(CONFIG_GPIO_DEVRES) += devres.o
|
||||||
|
obj-$(CONFIG_GPIOLIB) += gpiolib.o
|
||||||
obj-$(CONFIG_OF_GPIO) += gpiolib-of.o
|
obj-$(CONFIG_OF_GPIO) += gpiolib-of.o
|
||||||
obj-$(CONFIG_GPIO_ACPI) += gpiolib-acpi.o
|
obj-$(CONFIG_GPIO_ACPI) += gpiolib-acpi.o
|
||||||
|
|
||||||
|
|
|
@ -192,12 +192,6 @@ extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *labe
|
||||||
extern int gpio_request_array(const struct gpio *array, size_t num);
|
extern int gpio_request_array(const struct gpio *array, size_t num);
|
||||||
extern void gpio_free_array(const struct gpio *array, size_t num);
|
extern void gpio_free_array(const struct gpio *array, size_t num);
|
||||||
|
|
||||||
/* bindings for managed devices that want to request gpios */
|
|
||||||
int devm_gpio_request(struct device *dev, unsigned gpio, const char *label);
|
|
||||||
int devm_gpio_request_one(struct device *dev, unsigned gpio,
|
|
||||||
unsigned long flags, const char *label);
|
|
||||||
void devm_gpio_free(struct device *dev, unsigned int gpio);
|
|
||||||
|
|
||||||
#ifdef CONFIG_GPIO_SYSFS
|
#ifdef CONFIG_GPIO_SYSFS
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -94,24 +94,12 @@ static inline int gpio_request(unsigned gpio, const char *label)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int devm_gpio_request(struct device *dev, unsigned gpio,
|
|
||||||
const char *label)
|
|
||||||
{
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int gpio_request_one(unsigned gpio,
|
static inline int gpio_request_one(unsigned gpio,
|
||||||
unsigned long flags, const char *label)
|
unsigned long flags, const char *label)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int devm_gpio_request_one(struct device *dev, unsigned gpio,
|
|
||||||
unsigned long flags, const char *label)
|
|
||||||
{
|
|
||||||
return -ENOSYS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int gpio_request_array(const struct gpio *array, size_t num)
|
static inline int gpio_request_array(const struct gpio *array, size_t num)
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
@ -125,14 +113,6 @@ static inline void gpio_free(unsigned gpio)
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void devm_gpio_free(struct device *dev, unsigned gpio)
|
|
||||||
{
|
|
||||||
might_sleep();
|
|
||||||
|
|
||||||
/* GPIO can never have been requested */
|
|
||||||
WARN_ON(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void gpio_free_array(const struct gpio *array, size_t num)
|
static inline void gpio_free_array(const struct gpio *array, size_t num)
|
||||||
{
|
{
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
@ -248,4 +228,12 @@ gpiochip_remove_pin_ranges(struct gpio_chip *chip)
|
||||||
|
|
||||||
#endif /* ! CONFIG_GENERIC_GPIO */
|
#endif /* ! CONFIG_GENERIC_GPIO */
|
||||||
|
|
||||||
|
struct device;
|
||||||
|
|
||||||
|
/* bindings for managed devices that want to request gpios */
|
||||||
|
int devm_gpio_request(struct device *dev, unsigned gpio, const char *label);
|
||||||
|
int devm_gpio_request_one(struct device *dev, unsigned gpio,
|
||||||
|
unsigned long flags, const char *label);
|
||||||
|
void devm_gpio_free(struct device *dev, unsigned int gpio);
|
||||||
|
|
||||||
#endif /* __LINUX_GPIO_H */
|
#endif /* __LINUX_GPIO_H */
|
||||||
|
|
Loading…
Reference in New Issue