Messages in this thread Patch in this message | | | From | Michael Buesch <> | Subject | Re: [PATCH RFC] x86: Add user configurable GPIO-lib support | Date | Wed, 2 Jul 2008 01:05:52 +0200 |
| |
On Tuesday 01 July 2008 13:19:18 Ingo Molnar wrote: > > * Michael Buesch <mb@bu3sch.de> wrote: > > > > ... and thus perhaps your GPIO_USERSELECTION patch should move into > > > drivers/ and be generally accessible, not special to x86? > > > > Yes I'd really like to move it there, too. But currently that clashes > > with architectures like MIPS, some PPC flavours and probably others > > that implement their own GPIO API. We should have an > > ARCH_IMPLEMENT_GPIO or whatever, but currently we don't seem to have > > that. > > > > So well. If it's desired to put the user selection into drivers/gpio > > (which I'd really prefer), I can try to make a patch that adds > > ARCH_IMPLEMENT_GPIO to every arch that implements their own GPIO API > > and make GPIO_USERSELECTION depend on !ARCH_IMPLEMENT_GPIO. > > or we could try it the other way around: stick > ARCH_ALLOWS_TRULY_GENERAL_PURPOSE_INPUT_OUTPUT (note: please use a > better name ;-) into x86, add the user text to drivers/ and let other > architectures enable it too? > > That way your commits would still be pretty focused (you'd avoid having > to touch a lot of architectures) and it would still work all across the > spectrum.
Something like this, perhaps. Not 100% finished, yet (see the FIXME).
Index: linux-2.6/arch/x86/Kconfig =================================================================== --- linux-2.6.orig/arch/x86/Kconfig 2008-07-01 12:45:23.000000000 +0200 +++ linux-2.6/arch/x86/Kconfig 2008-07-02 00:21:05.000000000 +0200 @@ -25,6 +25,7 @@ config X86 select HAVE_KRETPROBES select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64) select HAVE_ARCH_KGDB if !X86_VOYAGER + select ARCH_WANT_OPTIONAL_GPIOLIB if !X86_RDC321X config ARCH_DEFCONFIG string Index: linux-2.6/include/asm-x86/gpio.h =================================================================== --- linux-2.6.orig/include/asm-x86/gpio.h 2008-07-01 12:45:23.000000000 +0200 +++ linux-2.6/include/asm-x86/gpio.h 2008-07-02 00:00:34.000000000 +0200 @@ -1,6 +1,62 @@ +/* + * Generic GPIO API implementation for x86. + * + * Derived from the generic GPIO API for powerpc: + * + * Copyright (c) 2007-2008 MontaVista Software, Inc. + * + * Author: Anton Vorontsov <avorontsov@ru.mvista.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + #ifndef _ASM_I386_GPIO_H #define _ASM_I386_GPIO_H +#ifdef CONFIG_X86_RDC321X #include <gpio.h> +#else /* CONFIG_X86_RDC321X */ + +#include <asm-generic/gpio.h> + +#ifdef CONFIG_HAVE_GPIO_LIB + +/* + * Just call gpiolib. + */ +static inline int gpio_get_value(unsigned int gpio) +{ + return __gpio_get_value(gpio); +} + +static inline void gpio_set_value(unsigned int gpio, int value) +{ + __gpio_set_value(gpio, value); +} + +static inline int gpio_cansleep(unsigned int gpio) +{ + return __gpio_cansleep(gpio); +} + +/* + * Not implemented, yet. + */ +static inline int gpio_to_irq(unsigned int gpio) +{ + return -ENOSYS; +} + +static inline int irq_to_gpio(unsigned int irq) +{ + return -EINVAL; +} + +#endif /* CONFIG_HAVE_GPIO_LIB */ + +#endif /* CONFIG_X86_RDC321X */ #endif /* _ASM_I386_GPIO_H */ Index: linux-2.6/arch/powerpc/Kconfig =================================================================== --- linux-2.6.orig/arch/powerpc/Kconfig 2008-07-01 12:45:23.000000000 +0200 +++ linux-2.6/arch/powerpc/Kconfig 2008-07-02 01:01:26.000000000 +0200 @@ -110,6 +110,7 @@ config PPC select HAVE_KPROBES select HAVE_KRETPROBES select HAVE_LMB + select ARCH_WANT_OPTIONAL_GPIOLIB config EARLY_PRINTK bool Index: linux-2.6/drivers/gpio/Kconfig =================================================================== --- linux-2.6.orig/drivers/gpio/Kconfig 2008-07-01 12:45:23.000000000 +0200 +++ linux-2.6/drivers/gpio/Kconfig 2008-07-02 01:00:16.000000000 +0200 @@ -2,15 +2,39 @@ # GPIO infrastructure and expanders # +config ARCH_WANT_OPTIONAL_GPIOLIB + bool + help + Select this config option from the architecture Kconfig, if + it is possible to use gpiolib on the architecture, but let the + user decide whether to actually build it or not. + Select this instead of HAVE_GPIO_LIB, if your architecture does + not depend on GPIOs being available, but rather let the user + decide whether he needs it or not. + +#FIXME: Probably rename the following to ARCH_REQUIRE_GPIOLIB config HAVE_GPIO_LIB bool + select GPIOLIB help Platforms select gpiolib if they use this infrastructure for all their GPIOs, usually starting with ones integrated into SOC processors. + Selecting this from the architecture code will cause the gpiolib + code to always get built in. + +menuconfig GPIOLIB + bool "GPIO Support" + depends on ARCH_WANT_OPTIONAL_GPIOLIB || HAVE_GPIO_LIB + select GENERIC_GPIO + help + This enables GPIO support through the generic GPIO library. + You only need to enable this, if you also want to enable + one or more of the GPIO expansion card drivers below. + + If unsure, say N. -menu "GPIO Support" - depends on HAVE_GPIO_LIB +if GPIOLIB config DEBUG_GPIO bool "Debug GPIO calls" @@ -70,4 +94,4 @@ config GPIO_MCP23S08 SPI driver for Microchip MCP23S08 I/O expander. This provides a GPIO interface supporting inputs and outputs. -endmenu +endif Index: linux-2.6/drivers/gpio/Makefile =================================================================== --- linux-2.6.orig/drivers/gpio/Makefile 2008-07-01 12:45:23.000000000 +0200 +++ linux-2.6/drivers/gpio/Makefile 2008-07-02 00:45:11.000000000 +0200 @@ -2,7 +2,7 @@ ccflags-$(CONFIG_DEBUG_GPIO) += -DDEBUG -obj-$(CONFIG_HAVE_GPIO_LIB) += gpiolib.o +obj-$(CONFIG_GPIOLIB) += gpiolib.o obj-$(CONFIG_GPIO_MCP23S08) += mcp23s08.o obj-$(CONFIG_GPIO_PCA953X) += pca953x.o
-- Greetings Michael.
| |