Messages in this thread Patch in this message | | | From | David Brownell <> | Subject | Re: [PATCH 1/4 resend] [x86] Add generic GPIO support to x86 | Date | Wed, 13 Feb 2008 17:55:30 -0800 |
| |
On Wednesday 13 February 2008, Andrew Morton wrote: > It would be more modern to have a <linux/gpio.h> which takes care of > cruddy details, but it's getting too late for that.
Sort of like this? For drivers that don't want to list themselves in Kconfig as depending on GENERIC_GPIO (e.g. one NAND driver I heard about), this lets them use <linux/gpio.h> ... existing code can't break, and it won't hurt if new code uses this.
- Dave
============== CUT HERE Add a <linux/gpio.h> defining fail/warn stubs for GPIO calls on platforms that don't support the GPIO programming interface. It includes the arch-specific interface glue otherwise.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> --- include/linux/gpio.h | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ g26/include/linux/gpio.h 2008-02-13 17:40:06.000000000 -0800 @@ -0,0 +1,93 @@ +#ifndef __LINUX_GPIO_H +#define __LINUX_GPIO_H + +#ifdef CONFIG_GENERIC_GPIO +#include <asm/gpio.h> + +#else + +/* + * Some platforms don't support the GPIO programming interface. + * + * In case some driver uses it anyway (it should normally have + * depended on GENERIC_GPIO), these routines help the compiler + * optimize out much GPIO-related code ... or trigger a runtime + * warning when something is wrongly called. + */ + +static inline int gpio_is_valid(int number) +{ + return 0; +} + +static inline int gpio_request(unsigned gpio, const char *label) +{ + return -EINVAL; +} + +static inline void gpio_free(unsigned gpio) +{ + /* GPIO can never have been requested */ + WARN_ON(1); +} + +static inline int gpio_direction_input(unsigned gpio) +{ + return -EINVAL; +} + +static inline int gpio_direction_output(unsigned gpio, int value) +{ + return -EINVAL; +} + +static inline int gpio_get_value(unsigned gpio) +{ + /* GPIO can never have been requested or set as {in,out}put */ + WARN_ON(1); + return 0; +} + +static inline void gpio_set_value(unsigned gpio, int value) +{ + /* GPIO can never have been requested or set as output */ + WARN_ON(1); +} + +static int gpio_cansleep(unsigned gpio) +{ + /* GPIO can never have been requested or set as {in,out}put */ + WARN_ON(1); + return 0; +} + +static inline int gpio_get_value_cansleep(unsigned gpio) +{ + /* GPIO can never have been requested or set as {in,out}put */ + WARN_ON(1); + return 0; +} + +static inline void gpio_set_value_cansleep(unsigned gpio, int value) +{ + /* GPIO can never have been requested or set as output */ + WARN_ON(1); +} + +static inline int gpio_to_irq(unsigned gpio) +{ + /* GPIO can never have been requested or set as input */ + WARN_ON(1); + return -EINVAL; +} + +static inline int irq_to_gpio(unsigned irq) +{ + /* irq can never have been returned from gpio_to_irq() */ + WARN_ON(1); + return -EINVAL; +} + +#endif + +#endif /* __LINUX_GPIO_H */
| |