Re: [PATCH] asm-generic/gpio.h: merge basic gpiolib wrappers
From: Mike Frysinger <hidden>
Date: 2011-10-27 13:29:40
Also in:
linux-alpha, linux-arch, linux-arm-kernel, linux-mips
On Thu, Oct 27, 2011 at 15:11, Russell King - ARM Linux wrote:
On Thu, Oct 27, 2011 at 09:01:43AM -0400, Mike Frysinger wrote:quoted
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index d494001..622851c 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h@@ -170,6 +170,29 @@ extern int __gpio_cansleep(unsigned gpio);=A0extern int __gpio_to_irq(unsigned gpio); +#ifndef gpio_get_value +#define gpio_get_value(gpio) __gpio_get_value(gpio) +#endif + +#ifndef gpio_set_value +#define gpio_set_value(gpio, value) __gpio_set_value(gpio, value) +#endif + +#ifndef gpio_cansleep +#define gpio_cansleep(gpio) __gpio_cansleep(gpio) +#endif + +#ifndef gpio_to_irq +#define gpio_to_irq(gpio) __gpio_to_irq(gpio) +#endif + +#ifndef irq_to_gpio +static inline int irq_to_gpio(unsigned int irq) +{ + =A0 =A0 return -EINVAL; +} +#endif +This is extremely dangerous. =A0Consider for example this code (see ARM mach-davinci's gpio.h): ... This is why I didn't solve this using the preprocessor method in ARM, but instead used __ARM_GPIOLIB_COMPLEX to control whether these definitions are required.
i thought the arm mach were defining things already, but i guess i missed some in my review easy enough to glue the arm-specific world to the asm-generic world ... a bit ugly, but should work i think: #ifndef __ARM_GPIOLIB_COMPLEX /* assume the mach has defined this */ #ifndef gpio_get_value #define gpio_get_value gpio_get_value #endif #ifndef gpio_set_value #define gpio_set_value gpio_set_value #endif #ifndef gpio_cansleep #define gpio_cansleep gpio_cansleep #endif #ifndef gpio_to_irq #define gpio_to_irq gpio_to_irq #endif #ifndef irq_to_gpio #define irq_to_gpio irq_to_gpio #endif ... the next step might be to drill down into the arm mach's and sprinkle the defines into the parts that need it ... -mike