Re: [PATCH] gpiolib/arches: Centralise bolierplate asm/gpio.h
From: Russell King - ARM Linux <hidden>
Date: 2012-02-04 17:43:06
Also in:
linux-mips, linux-sh, lkml
On Sat, Feb 04, 2012 at 06:06:32PM +0100, Sam Ravnborg wrote:
On Sat, Feb 04, 2012 at 03:54:39PM +0000, Mark Brown wrote:quoted
Rather than requiring architectures that use gpiolib but don't have any need to define anything custom to copy an asm/gpio.h provide a Kconfig symbol which architectures must select in order to include gpio.h and for other architectures just provide the trivial implementation directly.Hi Mark. There is an even simpler solution. For each arch that uses asm-generic/gpio.h add a line to arch/$ARCH/include/asm/Kbuild like this: generic-y += gpio.h This will then make this arch pick up the asm-generic version when you do #include <asm/gpio.h>.
You're assuming that asm-generic/gpio.h was invented to be a replacement for an architecture asm/gpio.h. Unfortunately, things aren't that simple. It would have been a lot better if asm-generic/gpio.h was tacked on the bottom of linux/gpio.h - because that's what it really is. It's core code features, not platform stuff. What's platform specific about asm/gpio.h is the number of GPIOs in the system, and whether it wants to intercept the gpio_xxx() functions to provide fast access to on-chip GPIOs. What I'd suggest is moving asm-generic/gpio.h to linux/gpiolib.h, and making asm-generic/gpio.h include that as a patch until stuff is fixed for its new location. That should result in a proper asm-generic/gpio.h being: /* The trivial gpiolib dispatchers */ #define gpio_get_value __gpio_get_value #define gpio_set_value __gpio_set_value #define gpio_cansleep __gpio_cansleep #define gpio_to_irq __gpio_to_irq and nothing else. Alternatively, instead of linux/gpiolib.h, put it in linux/gpio.h instead, but that gets more icky because of the mess of asm/gpio.h includes (which I've been banging on for years about in ARM patches and they're _still_ coming.)