mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-09-22 04:31:58 +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
|
config COLDFIRE
|
||||||
bool "Coldfire CPU family support"
|
bool "Coldfire CPU family support"
|
||||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
|
||||||
select CPU_HAS_NO_BITFIELDS
|
select CPU_HAS_NO_BITFIELDS
|
||||||
select CPU_HAS_NO_CAS
|
select CPU_HAS_NO_CAS
|
||||||
select CPU_HAS_NO_MULDIV64
|
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
|
# 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
|
menuconfig GPIOLIB
|
||||||
bool "GPIO Support"
|
bool "GPIO Support"
|
||||||
help
|
help
|
||||||
|
@ -54,11 +54,6 @@ struct gpio {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_GPIOLIB
|
#ifdef CONFIG_GPIOLIB
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_HAVE_CUSTOM_GPIO_H
|
|
||||||
#include <asm/gpio.h>
|
|
||||||
#else
|
|
||||||
|
|
||||||
#include <asm-generic/gpio.h>
|
#include <asm-generic/gpio.h>
|
||||||
|
|
||||||
static inline int gpio_get_value(unsigned int gpio)
|
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);
|
return __gpio_to_irq(gpio);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* ! CONFIG_ARCH_HAVE_CUSTOM_GPIO_H */
|
|
||||||
|
|
||||||
/* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */
|
/* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */
|
||||||
|
|
||||||
struct device;
|
struct device;
|
||||||
|
Loading…
Reference in New Issue
Block a user