mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
gpiolib: coldfire: remove custom asm/gpio.h
Now that coldfire is the only user of a custom asm/gpio.h, it seems better to remove this as well, and have the same interface everywhere. For the gpio_get_value()/gpio_set_value()/gpio_to_irq(), gpio_cansleep() functions, the custom version is only a micro-optimization to inline the function for constant GPIO numbers. However, in the coldfire defconfigs, I was unable to find a single instance where this micro-optimization was even used, and according to Geert the only user appears to be the QSPI chip that is disabled everywhere. The custom gpio_request_one() function is even less useful, as it is guarded by an #ifdef that is never true. Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
parent
ee5a66d87c
commit
94d20f7d67
@ -24,7 +24,6 @@ config M68KCLASSIC
|
||||
|
||||
config COLDFIRE
|
||||
bool "Coldfire CPU family support"
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
select CPU_HAS_NO_BITFIELDS
|
||||
select CPU_HAS_NO_CAS
|
||||
select CPU_HAS_NO_MULDIV64
|
||||
|
@ -1,95 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Coldfire generic GPIO support
|
||||
*
|
||||
* (C) Copyright 2009, Steven King <sfking@fdwdc.com>
|
||||
*/
|
||||
|
||||
#ifndef coldfire_gpio_h
|
||||
#define coldfire_gpio_h
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfgpio.h>
|
||||
/*
|
||||
* The Generic GPIO functions
|
||||
*
|
||||
* If the gpio is a compile time constant and is one of the Coldfire gpios,
|
||||
* use the inline version, otherwise dispatch thru gpiolib.
|
||||
*/
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && gpio < MCFGPIO_PIN_MAX)
|
||||
return mcfgpio_read(__mcfgpio_ppdr(gpio)) & mcfgpio_bit(gpio);
|
||||
else
|
||||
return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && gpio < MCFGPIO_PIN_MAX) {
|
||||
if (gpio < MCFGPIO_SCR_START) {
|
||||
unsigned long flags;
|
||||
MCFGPIO_PORTTYPE data;
|
||||
|
||||
local_irq_save(flags);
|
||||
data = mcfgpio_read(__mcfgpio_podr(gpio));
|
||||
if (value)
|
||||
data |= mcfgpio_bit(gpio);
|
||||
else
|
||||
data &= ~mcfgpio_bit(gpio);
|
||||
mcfgpio_write(data, __mcfgpio_podr(gpio));
|
||||
local_irq_restore(flags);
|
||||
} else {
|
||||
if (value)
|
||||
mcfgpio_write(mcfgpio_bit(gpio),
|
||||
MCFGPIO_SETR_PORT(gpio));
|
||||
else
|
||||
mcfgpio_write(~mcfgpio_bit(gpio),
|
||||
MCFGPIO_CLRR_PORT(gpio));
|
||||
}
|
||||
} else
|
||||
__gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
static inline int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
#if defined(MCFGPIO_IRQ_MIN)
|
||||
if ((gpio >= MCFGPIO_IRQ_MIN) && (gpio < MCFGPIO_IRQ_MAX))
|
||||
#else
|
||||
if (gpio < MCFGPIO_IRQ_MAX)
|
||||
#endif
|
||||
return gpio + MCFGPIO_IRQ_VECBASE;
|
||||
else
|
||||
return __gpio_to_irq(gpio);
|
||||
}
|
||||
|
||||
static inline int gpio_cansleep(unsigned gpio)
|
||||
{
|
||||
return gpio < MCFGPIO_PIN_MAX ? 0 : __gpio_cansleep(gpio);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_GPIOLIB
|
||||
static inline int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = gpio_request(gpio, label);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (flags & GPIOF_DIR_IN)
|
||||
err = gpio_direction_input(gpio);
|
||||
else
|
||||
err = gpio_direction_output(gpio,
|
||||
(flags & GPIOF_INIT_HIGH) ? 1 : 0);
|
||||
|
||||
if (err)
|
||||
gpio_free(gpio);
|
||||
|
||||
return err;
|
||||
}
|
||||
#endif /* !CONFIG_GPIOLIB */
|
||||
#endif
|
@ -3,14 +3,6 @@
|
||||
# GPIO infrastructure and drivers
|
||||
#
|
||||
|
||||
config ARCH_HAVE_CUSTOM_GPIO_H
|
||||
bool
|
||||
help
|
||||
Selecting this config option from the architecture Kconfig allows
|
||||
the architecture to provide a custom asm/gpio.h implementation
|
||||
overriding the default implementations. New uses of this are
|
||||
strongly discouraged.
|
||||
|
||||
menuconfig GPIOLIB
|
||||
bool "GPIO Support"
|
||||
help
|
||||
|
@ -54,11 +54,6 @@ struct gpio {
|
||||
};
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
|
||||
#ifdef CONFIG_ARCH_HAVE_CUSTOM_GPIO_H
|
||||
#include <asm/gpio.h>
|
||||
#else
|
||||
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
static inline int gpio_get_value(unsigned int gpio)
|
||||
@ -81,8 +76,6 @@ static inline int gpio_to_irq(unsigned int gpio)
|
||||
return __gpio_to_irq(gpio);
|
||||
}
|
||||
|
||||
#endif /* ! CONFIG_ARCH_HAVE_CUSTOM_GPIO_H */
|
||||
|
||||
/* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */
|
||||
|
||||
struct device;
|
||||
|
Loading…
Reference in New Issue
Block a user