make legacy gpio request/free calls superfluous (OMAP and mainline)
Subsystems (2)
PATCH 5/5 make legacy gpio request/free calls superfluous (OMAP and mainline)
From: Jarkko Nikula <[email protected]>
Clean up OMAP GPIO request/free functions
- Rename and declare static OMAP specific GPIO request/free functions
- Register them into gpiolib as chip-specific hooks
- Add omap_request_gpio/omap_free_gpio wrappers for existing code not converted yet to use gpiolib
Signed-off-by Jarkko Nikula <[email protected]>
[ [email protected]: remove needless check_gpio() calls ]
Signed-off-by David Brownell <[email protected]>
--- arch/arm/plat-omap/gpio.c | 43 +++++++------------------------ arch/arm/plat-omap/include/mach/gpio.h | 12 +++++++- 2 files changed, 21 insertions(+), 34 deletions(-)
arch/arm/plat-omap/gpio.c +11 -32
@@ -885,26 +885,17 @@ static int gpio_wake_enable(unsigned intreturn retval; } -int omap_request_gpio (int gpio) +static int omap_gpio_request (struct gpio_chip *chip,unsigned offset) { -struct gpio_bank *bank; + struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);unsigned long flags; -int status; - -if (check_gpio (gpio) <0 ) -return -EINVAL ; - - status =gpio_request (gpio,NULL ); -if (status <0 ) -return status; - bank =get_gpio_bank (gpio);spin_lock_irqsave (&bank->lock, flags);/* Set trigger to none. You need to enable the desired trigger with * request_irq() or set_irq_type(). */ -_set_gpio_triggering (bank,get_gpio_index (gpio),IRQ_TYPE_NONE ); +_set_gpio_triggering (bank, offset,IRQ_TYPE_NONE );#ifdef CONFIG_ARCH_OMAP15XX if (bank->method ==METHOD_GPIO_1510 ) {
@@ -912,7 +903,7 @@ int omap_request_gpio(int gpio)/* Claim the pin for MPU */ reg = bank->base +OMAP1510_GPIO_PIN_CONTROL ; - __raw_writel(__raw_readl(reg) | (1 << get_gpio_index(gpio)), reg); + __raw_writel(__raw_readl(reg) | (1 << offset), reg); }#endif spin_unlock_irqrestore (&bank->lock, flags);
@@ -920,39 +911,28 @@ int omap_request_gpio(int gpio)return 0 ; } -void omap_free_gpio (int gpio) +static void omap_gpio_free (struct gpio_chip *chip,unsigned offset) { -struct gpio_bank *bank; + struct gpio_bank *bank = container_of(chip, struct gpio_bank, chip);unsigned long flags; -if (check_gpio (gpio) <0 ) -return ; - bank =get_gpio_bank (gpio);spin_lock_irqsave (&bank->lock, flags); -if (unlikely (!gpiochip_is_requested (&bank->chip, -get_gpio_index (gpio)))) { -spin_unlock_irqrestore (&bank->lock, flags); -printk (KERN_ERR "omap-gpio: GPIO %d wasn't reserved!\n" , gpio); -dump_stack (); -return ; - }#ifdef CONFIG_ARCH_OMAP16XX if (bank->method ==METHOD_GPIO_1610 ) {/* Disable wake-up during idle for dynamic tick */ void __iomem *reg = bank->base +OMAP1610_GPIO_CLEAR_WAKEUPENA ; -__raw_writel (1 <<get_gpio_index (gpio), reg); +__raw_writel (1 << offset, reg); }#endif #if defined(CONFIG_ARCH_OMAP24XX ) || defined(CONFIG_ARCH_OMAP34XX )if (bank->method ==METHOD_GPIO_24XX ) {/* Disable wake-up during idle for dynamic tick */ void __iomem *reg = bank->base +OMAP24XX_GPIO_CLEARWKUENA ; -__raw_writel (1 <<get_gpio_index (gpio), reg); +__raw_writel (1 << offset, reg); }#endif -_reset_gpio (bank, gpio); +_reset_gpio (bank, bank->chip.base + offset);spin_unlock_irqrestore (&bank->lock, flags); -gpio_free (gpio); }/*
@@ -1457,6 +1437,8 @@ static int __init _omap_gpio_init(void)/* REVISIT eventually switch from OMAP-specific gpio structs * over to the generic ones */ + bank->chip.request = omap_gpio_request; + bank->chip.free = omap_gpio_free; bank->chip.direction_input = gpio_input; bank->chip.get = gpio_get; bank->chip.direction_output = gpio_output;
@@ -1725,9 +1707,6 @@ static int __init omap_gpio_sysinit(voidreturn ret; } -EXPORT_SYMBOL (omap_request_gpio); -EXPORT_SYMBOL (omap_free_gpio); -arch_initcall (omap_gpio_sysinit);
arch/arm/plat-omap/include/mach/gpio.h +10 -2
@@ -71,8 +71,6 @@ IH_GPIO_BASE + (nr))extern int omap_gpio_init (void );/* Call from board init only */ -extern int omap_request_gpio (int gpio); -extern void omap_free_gpio (int gpio);extern void omap2_gpio_prepare_for_retention (void );extern void omap2_gpio_resume_after_retention (void );extern void omap_set_gpio_debounce (int gpio,int enable);
@@ -89,6 +87,16 @@ extern void omap_set_gpio_debounce_time(#include <linux/errno.h> #include <asm-generic/gpio.h> +static inline int omap_request_gpio (int gpio) +{ +return gpio_request (gpio,"FIXME" ); +} + +static inline void omap_free_gpio (int gpio) +{ +gpio_free (gpio); +} +static inline int gpio_get_value (unsigned gpio) {return __gpio_get_value (gpio);