Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a89a314 authored by Shawn Guo's avatar Shawn Guo Committed by Linus Walleij
Browse files

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: default avatarShawn Guo <shawn.guo@linaro.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent d59b4eaa
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+2 −1
Original line number Diff line number Diff line
@@ -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

+0 −6
Original line number Diff line number Diff line
@@ -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

/*
+8 −20
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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 */