Skip to content

Commit

Permalink
gpio: devm_gpio_* support should not depend on GPIOLIB
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shawn Guo authored and Linus Walleij committed Jan 22, 2013
1 parent d59b4ea commit 6a89a31
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 27 deletions.
3 changes: 3 additions & 0 deletions drivers/gpio/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ config ARCH_REQUIRE_GPIOLIB
Selecting this from the architecture code will cause the gpiolib
code to always get built in.

config GPIO_DEVRES
def_bool y
depends on HAS_IOMEM


menuconfig GPIOLIB
Expand Down
3 changes: 2 additions & 1 deletion drivers/gpio/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

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_GPIO_ACPI) += gpiolib-acpi.o

Expand Down
6 changes: 0 additions & 6 deletions include/asm-generic/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 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

/*
Expand Down
28 changes: 8 additions & 20 deletions include/linux/gpio.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,24 +94,12 @@ static inline int gpio_request(unsigned gpio, const char *label)
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,
unsigned long flags, const char *label)
{
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)
{
return -ENOSYS;
Expand All @@ -125,14 +113,6 @@ static inline void gpio_free(unsigned gpio)
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)
{
might_sleep();
Expand Down Expand Up @@ -248,4 +228,12 @@ gpiochip_remove_pin_ranges(struct gpio_chip *chip)

#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 */

0 comments on commit 6a89a31

Please sign in to comment.