From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Arnd Bergmann <arnd@arndb.de>,
Linus Walleij <linus.walleij@linaro.org>,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>,
Tony Lindgren <tony@atomide.com>,
Thomas Gleixner <tglx@linutronix.de>,
Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Michael Ellerman <mpe@ellerman.id.au>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Vincenzo Palazzo <vincenzopalazzodev@gmail.com>,
Devarsh Thakkar <devarsht@ti.com>,
Michael Walle <michael@walle.cc>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Dipen Patel <dipenp@nvidia.com>,
Thierry Reding <treding@nvidia.com>,
Stefan Schmidt <stefan@datenfreihafen.org>,
Miquel Raynal <miquel.raynal@bootlin.com>,
Lee Jones <lee@kernel.org>,
linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-doc-tw-discuss@lists.sourceforge.net,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
linux-samsung-soc@vger.kernel.org,
linux-m68k@lists.linux-m68k.org, linuxppc-dev@lists.ozlabs.org,
linux-sh@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-tegra@vger.kernel.org, linux-input@vger.kernel.org,
linux-media@vger.kernel.org, linux-wpan@vger.kernel.org,
netdev@vger.kernel.org, linux-wireless@vger.kernel.org,
brcm80211-dev-list.pdl@broadcom.com,
SHA-cyfmac-dev-list@infineon.com, linux-arch@vger.kernel.org,
devicetree@vger.kernel.org
Cc: Bartosz Golaszewski <brgl@bgdev.pl>,
Jonathan Corbet <corbet@lwn.net>, Alex Shi <alexs@kernel.org>,
Yanteng Si <siyanteng@loongson.cn>, Hu Haowen <src.res@email.cn>,
Russell King <linux@armlinux.org.uk>,
Aaro Koskinen <aaro.koskinen@iki.fi>,
Janusz Krzysztofik <jmkrzyszt@gmail.com>,
Andrew Lunn <andrew@lunn.ch>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Gregory Clement <gregory.clement@bootlin.com>,
Alim Akhtar <alim.akhtar@samsung.com>,
Nicholas Piggin <npiggin@gmail.com>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
Rich Felker <dalias@libc.org>,
Mun Yew Tham <mun.yew.tham@intel.com>, Keerthy <j-keerthy@ti.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Thierry Reding <thierry.reding@gmail.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Alexander Aring <alex.aring@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Arend van Spriel <aspriel@gmail.com>,
Franky Lin <franky.lin@broadcom.com>,
Hante Meuleman <hante.meuleman@broadcom.com>,
Kalle Valo <kvalo@kernel.org>, Qiang Zhao <qiang.zhao@nxp.com>,
Li Yang <leoyang.li@nxp.com>, Rob Herring <robh+dt@kernel.org>,
Frank Rowand <frowand.list@gmail.com>
Subject: [PATCH v4 07/18] gpiolib: remove asm-generic/gpio.h
Date: Wed, 8 Feb 2023 19:33:32 +0200 [thread overview]
Message-ID: <20230208173343.37582-8-andriy.shevchenko@linux.intel.com> (raw)
In-Reply-To: <20230208173343.37582-1-andriy.shevchenko@linux.intel.com>
From: Arnd Bergmann <arnd@arndb.de>
The asm-generic/gpio.h file is now always included when
using gpiolib, so just move its contents into linux/gpio.h
with a few minor simplifications.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
MAINTAINERS | 1 -
arch/m68k/include/asm/mcfgpio.h | 2 +-
drivers/gpio/gpio-davinci.c | 2 -
drivers/pinctrl/core.c | 1 -
include/asm-generic/gpio.h | 146 --------------------------------
include/linux/gpio.h | 94 +++++++++++++++++---
6 files changed, 85 insertions(+), 161 deletions(-)
delete mode 100644 include/asm-generic/gpio.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 94971603568b..955a513ac504 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8730,7 +8730,6 @@ F: Documentation/admin-guide/gpio/
F: Documentation/devicetree/bindings/gpio/
F: Documentation/driver-api/gpio/
F: drivers/gpio/
-F: include/asm-generic/gpio.h
F: include/dt-bindings/gpio/
F: include/linux/gpio.h
F: include/linux/gpio/
diff --git a/arch/m68k/include/asm/mcfgpio.h b/arch/m68k/include/asm/mcfgpio.h
index 27f32cc81da6..2cefe8445980 100644
--- a/arch/m68k/include/asm/mcfgpio.h
+++ b/arch/m68k/include/asm/mcfgpio.h
@@ -9,7 +9,7 @@
#define mcfgpio_h
#ifdef CONFIG_GPIOLIB
-#include <asm-generic/gpio.h>
+#include <linux/gpio.h>
#else
int __mcfgpio_get_value(unsigned gpio);
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index 26b1f7465e09..7fc83057990a 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -24,8 +24,6 @@
#include <linux/spinlock.h>
#include <linux/pm_runtime.h>
-#include <asm-generic/gpio.h>
-
#define MAX_REGS_BANKS 5
#define MAX_INT_PER_BANK 32
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index d6e6c751255f..401886c81344 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -30,7 +30,6 @@
#ifdef CONFIG_GPIOLIB
#include "../gpio/gpiolib.h"
-#include <asm-generic/gpio.h>
#endif
#include "core.h"
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h
deleted file mode 100644
index 1c910d124423..000000000000
--- a/include/asm-generic/gpio.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _ASM_GENERIC_GPIO_H
-#define _ASM_GENERIC_GPIO_H
-
-#include <linux/types.h>
-#include <linux/errno.h>
-
-#ifdef CONFIG_GPIOLIB
-
-#include <linux/compiler.h>
-#include <linux/gpio/consumer.h>
-
-/*
- * Platforms may implement their GPIO interface with library code,
- * at a small performance cost for non-inlined operations and some
- * extra memory (for code and for per-GPIO table entries).
- */
-
-/*
- * At the end we want all GPIOs to be dynamically allocated from 0.
- * However, some legacy drivers still perform fixed allocation.
- * Until they are all fixed, leave 0-512 space for them.
- */
-#define GPIO_DYNAMIC_BASE 512
-
-struct device;
-struct gpio;
-struct seq_file;
-struct module;
-struct device_node;
-struct gpio_desc;
-
-/* Always use the library code for GPIO management calls,
- * or when sleeping may be involved.
- */
-extern int gpio_request(unsigned gpio, const char *label);
-extern void gpio_free(unsigned gpio);
-
-static inline int gpio_direction_input(unsigned gpio)
-{
- return gpiod_direction_input(gpio_to_desc(gpio));
-}
-static inline int gpio_direction_output(unsigned gpio, int value)
-{
- return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
-}
-
-static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
-{
- return gpiod_set_debounce(gpio_to_desc(gpio), debounce);
-}
-
-static inline int gpio_get_value_cansleep(unsigned gpio)
-{
- return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
-}
-static inline void gpio_set_value_cansleep(unsigned gpio, int value)
-{
- return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
-}
-
-
-/* A platform's <asm/gpio.h> code may want to inline the I/O calls when
- * the GPIO is constant and refers to some always-present controller,
- * giving direct access to chip registers and tight bitbanging loops.
- */
-static inline int __gpio_get_value(unsigned gpio)
-{
- return gpiod_get_raw_value(gpio_to_desc(gpio));
-}
-static inline void __gpio_set_value(unsigned gpio, int value)
-{
- return gpiod_set_raw_value(gpio_to_desc(gpio), value);
-}
-
-static inline int __gpio_cansleep(unsigned gpio)
-{
- return gpiod_cansleep(gpio_to_desc(gpio));
-}
-
-static inline int __gpio_to_irq(unsigned gpio)
-{
- return gpiod_to_irq(gpio_to_desc(gpio));
-}
-
-extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
-extern int gpio_request_array(const struct gpio *array, size_t num);
-extern void gpio_free_array(const struct gpio *array, size_t num);
-
-/*
- * A sysfs interface can be exported by individual drivers if they want,
- * but more typically is configured entirely from userspace.
- */
-static inline int gpio_export(unsigned gpio, bool direction_may_change)
-{
- return gpiod_export(gpio_to_desc(gpio), direction_may_change);
-}
-
-static inline void gpio_unexport(unsigned gpio)
-{
- gpiod_unexport(gpio_to_desc(gpio));
-}
-
-#else /* !CONFIG_GPIOLIB */
-
-#include <linux/kernel.h>
-
-/* platforms that don't directly support access to GPIOs through I2C, SPI,
- * or other blocking infrastructure can use these wrappers.
- */
-
-static inline int gpio_cansleep(unsigned gpio)
-{
- return 0;
-}
-
-static inline int gpio_get_value_cansleep(unsigned gpio)
-{
- might_sleep();
- return __gpio_get_value(gpio);
-}
-
-static inline void gpio_set_value_cansleep(unsigned gpio, int value)
-{
- might_sleep();
- __gpio_set_value(gpio, value);
-}
-
-#endif /* !CONFIG_GPIOLIB */
-
-/*
- * "valid" GPIO numbers are nonnegative and may be passed to
- * setup routines like gpio_request(). only some valid numbers
- * can successfully be requested and used.
- *
- * Invalid GPIO numbers are useful for indicating no-such-GPIO in
- * platform data and other tables.
- */
-
-static inline bool gpio_is_valid(int number)
-{
- /* only non-negative numbers are valid */
- return number >= 0;
-}
-
-#endif /* _ASM_GENERIC_GPIO_H */
diff --git a/include/linux/gpio.h b/include/linux/gpio.h
index 2b75017b3aad..d5ce78e2bdd9 100644
--- a/include/linux/gpio.h
+++ b/include/linux/gpio.h
@@ -13,6 +13,7 @@
#define __LINUX_GPIO_H
#include <linux/errno.h>
+#include <linux/types.h>
/* see Documentation/driver-api/gpio/legacy.rst */
@@ -54,26 +55,100 @@ struct gpio {
};
#ifdef CONFIG_GPIOLIB
-#include <asm-generic/gpio.h>
-static inline int gpio_get_value(unsigned int gpio)
+#include <linux/gpio/consumer.h>
+
+/*
+ * "valid" GPIO numbers are nonnegative and may be passed to
+ * setup routines like gpio_request(). Only some valid numbers
+ * can successfully be requested and used.
+ *
+ * Invalid GPIO numbers are useful for indicating no-such-GPIO in
+ * platform data and other tables.
+ */
+static inline bool gpio_is_valid(int number)
+{
+ /* only non-negative numbers are valid */
+ return number >= 0;
+}
+
+/*
+ * Platforms may implement their GPIO interface with library code,
+ * at a small performance cost for non-inlined operations and some
+ * extra memory (for code and for per-GPIO table entries).
+ */
+
+/*
+ * At the end we want all GPIOs to be dynamically allocated from 0.
+ * However, some legacy drivers still perform fixed allocation.
+ * Until they are all fixed, leave 0-512 space for them.
+ */
+#define GPIO_DYNAMIC_BASE 512
+
+/* Always use the library code for GPIO management calls,
+ * or when sleeping may be involved.
+ */
+int gpio_request(unsigned gpio, const char *label);
+void gpio_free(unsigned gpio);
+
+static inline int gpio_direction_input(unsigned gpio)
+{
+ return gpiod_direction_input(gpio_to_desc(gpio));
+}
+static inline int gpio_direction_output(unsigned gpio, int value)
+{
+ return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
+}
+
+static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
+{
+ return gpiod_set_debounce(gpio_to_desc(gpio), debounce);
+}
+
+static inline int gpio_get_value_cansleep(unsigned gpio)
+{
+ return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
+}
+static inline void gpio_set_value_cansleep(unsigned gpio, int value)
{
- return __gpio_get_value(gpio);
+ return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
}
-static inline void gpio_set_value(unsigned int gpio, int value)
+static inline int gpio_get_value(unsigned gpio)
+{
+ return gpiod_get_raw_value(gpio_to_desc(gpio));
+}
+static inline void gpio_set_value(unsigned gpio, int value)
{
- __gpio_set_value(gpio, value);
+ return gpiod_set_raw_value(gpio_to_desc(gpio), value);
}
-static inline int gpio_cansleep(unsigned int gpio)
+static inline int gpio_cansleep(unsigned gpio)
{
- return __gpio_cansleep(gpio);
+ return gpiod_cansleep(gpio_to_desc(gpio));
}
-static inline int gpio_to_irq(unsigned int gpio)
+static inline int gpio_to_irq(unsigned gpio)
{
- return __gpio_to_irq(gpio);
+ return gpiod_to_irq(gpio_to_desc(gpio));
+}
+
+int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
+int gpio_request_array(const struct gpio *array, size_t num);
+void gpio_free_array(const struct gpio *array, size_t num);
+
+/*
+ * A sysfs interface can be exported by individual drivers if they want,
+ * but more typically is configured entirely from userspace.
+ */
+static inline int gpio_export(unsigned gpio, bool direction_may_change)
+{
+ return gpiod_export(gpio_to_desc(gpio), direction_may_change);
+}
+
+static inline void gpio_unexport(unsigned gpio)
+{
+ gpiod_unexport(gpio_to_desc(gpio));
}
/* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */
@@ -88,7 +163,6 @@ int devm_gpio_request_one(struct device *dev, unsigned gpio,
#include <linux/bug.h>
#include <linux/kernel.h>
-#include <linux/types.h>
struct device;
struct gpio_chip;
--
2.39.1
WARNING: multiple messages have this Message-ID (diff)
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Arnd Bergmann <arnd@arndb.de>,
Linus Walleij <linus.walleij@linaro.org>,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>,
Tony Lindgren <tony@atomide.com>,
Thomas Gleixner <tglx@linutronix.de>,
Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Michael Ellerman <mpe@ellerman.id.au>,
Christophe Leroy <christophe.leroy@csgroup.eu>,
Vincenzo Palazzo <vincenzopalazzodev@gmail.com>,
Devarsh Thakkar <devarsht@ti.com>,
Michael Walle <michael@walle.cc>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Dipen Patel <dipenp@nvidia.com>,
Thierry Reding <treding@nvidia.com>,
Stefan Schmidt <stefan@datenfreihafen.org>,
Miquel Raynal <miquel.raynal@bootlin.com>,
Lee Jones <lee@kernel.org>,
linux-gpio@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-doc-tw-discuss@lists.sourceforge.net,
linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
linux-samsung-soc@vger.kernel.org,
linux-m68k@lists.linux-m68k.org, linuxppc-dev@lists.ozlabs.org,
linux-sh@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-tegra@vger.kernel.org, linux-input@vger.kernel.org,
linux-media@vger.kernel.org, linux-wpan@vger.kernel.org,
netdev@vger.kernel.org, linux-wireless@vger.kernel.org,
brcm80211-dev-list.pdl@broadcom.com,
SHA-cyfmac-dev-list@infineon.com, linux-arch@vger.kernel.org,
devicetree@vger.kernel.org
Cc: Andrew Lunn <andrew@lunn.ch>,
Alexander Aring <alex.aring@gmail.com>,
Rich Felker <dalias@libc.org>, Eric Dumazet <edumazet@google.com>,
Thierry Reding <thierry.reding@gmail.com>,
Alim Akhtar <alim.akhtar@samsung.com>,
Li Yang <leoyang.li@nxp.com>,
Frank Rowand <frowand.list@gmail.com>,
Alex Shi <alexs@kernel.org>, Qiang Zhao <qiang.zhao@nxp.com>,
Yanteng Si <siyanteng@loongson.cn>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
Jonathan Corbet <corbet@lwn.net>,
Bartosz Golaszewski <brgl@bgdev.pl>,
Janusz Krzysztofik <jmkrzyszt@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Jonathan Hunter <jonathanh@nvidia.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Kalle Valo <kvalo@kernel.org>,
Hante Meuleman <hante.meuleman@broadcom.com>,
Nicholas Piggin <npiggin@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Frank y Lin <franky.lin@broadcom.com>,
Arend van Spriel <aspriel@gmail.com>,
Mun Yew Tham <mun.yew.tham@intel.com>,
Hu Haowen <src.res@email.cn>, Keerthy <j-keerthy@ti.com>,
Aaro Koskinen <aaro.koskinen@iki.fi>,
"David S. Miller" <davem@davemloft.net>,
Gregory Clement <gregory.clement@bootlin.com>
Subject: [PATCH v4 07/18] gpiolib: remove asm-generic/gpio.h
Date: Wed, 8 Feb 2023 19:33:32 +0200 [thread overview]
Message-ID: <20230208173343.37582-8-andriy.shevchenko@linux.intel.com> (raw)
In-Reply-To: <20230208173343.37582-1-andriy.shevchenko@linux.intel.com>
From: Arnd Bergmann <arnd@arndb.de>
The asm-generic/gpio.h file is now always included when
using gpiolib, so just move its contents into linux/gpio.h
with a few minor simplifications.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
MAINTAINERS | 1 -
arch/m68k/include/asm/mcfgpio.h | 2 +-
drivers/gpio/gpio-davinci.c | 2 -
drivers/pinctrl/core.c | 1 -
include/asm-generic/gpio.h | 146 --------------------------------
include/linux/gpio.h | 94 +++++++++++++++++---
6 files changed, 85 insertions(+), 161 deletions(-)
delete mode 100644 include/asm-generic/gpio.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 94971603568b..955a513ac504 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8730,7 +8730,6 @@ F: Documentation/admin-guide/gpio/
F: Documentation/devicetree/bindings/gpio/
F: Documentation/driver-api/gpio/
F: drivers/gpio/
-F: include/asm-generic/gpio.h
F: include/dt-bindings/gpio/
F: include/linux/gpio.h
F: include/linux/gpio/
diff --git a/arch/m68k/include/asm/mcfgpio.h b/arch/m68k/include/asm/mcfgpio.h
index 27f32cc81da6..2cefe8445980 100644
--- a/arch/m68k/include/asm/mcfgpio.h
+++ b/arch/m68k/include/asm/mcfgpio.h
@@ -9,7 +9,7 @@
#define mcfgpio_h
#ifdef CONFIG_GPIOLIB
-#include <asm-generic/gpio.h>
+#include <linux/gpio.h>
#else
int __mcfgpio_get_value(unsigned gpio);
diff --git a/drivers/gpio/gpio-davinci.c b/drivers/gpio/gpio-davinci.c
index 26b1f7465e09..7fc83057990a 100644
--- a/drivers/gpio/gpio-davinci.c
+++ b/drivers/gpio/gpio-davinci.c
@@ -24,8 +24,6 @@
#include <linux/spinlock.h>
#include <linux/pm_runtime.h>
-#include <asm-generic/gpio.h>
-
#define MAX_REGS_BANKS 5
#define MAX_INT_PER_BANK 32
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index d6e6c751255f..401886c81344 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -30,7 +30,6 @@
#ifdef CONFIG_GPIOLIB
#include "../gpio/gpiolib.h"
-#include <asm-generic/gpio.h>
#endif
#include "core.h"
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h
deleted file mode 100644
index 1c910d124423..000000000000
--- a/include/asm-generic/gpio.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef _ASM_GENERIC_GPIO_H
-#define _ASM_GENERIC_GPIO_H
-
-#include <linux/types.h>
-#include <linux/errno.h>
-
-#ifdef CONFIG_GPIOLIB
-
-#include <linux/compiler.h>
-#include <linux/gpio/consumer.h>
-
-/*
- * Platforms may implement their GPIO interface with library code,
- * at a small performance cost for non-inlined operations and some
- * extra memory (for code and for per-GPIO table entries).
- */
-
-/*
- * At the end we want all GPIOs to be dynamically allocated from 0.
- * However, some legacy drivers still perform fixed allocation.
- * Until they are all fixed, leave 0-512 space for them.
- */
-#define GPIO_DYNAMIC_BASE 512
-
-struct device;
-struct gpio;
-struct seq_file;
-struct module;
-struct device_node;
-struct gpio_desc;
-
-/* Always use the library code for GPIO management calls,
- * or when sleeping may be involved.
- */
-extern int gpio_request(unsigned gpio, const char *label);
-extern void gpio_free(unsigned gpio);
-
-static inline int gpio_direction_input(unsigned gpio)
-{
- return gpiod_direction_input(gpio_to_desc(gpio));
-}
-static inline int gpio_direction_output(unsigned gpio, int value)
-{
- return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
-}
-
-static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
-{
- return gpiod_set_debounce(gpio_to_desc(gpio), debounce);
-}
-
-static inline int gpio_get_value_cansleep(unsigned gpio)
-{
- return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
-}
-static inline void gpio_set_value_cansleep(unsigned gpio, int value)
-{
- return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
-}
-
-
-/* A platform's <asm/gpio.h> code may want to inline the I/O calls when
- * the GPIO is constant and refers to some always-present controller,
- * giving direct access to chip registers and tight bitbanging loops.
- */
-static inline int __gpio_get_value(unsigned gpio)
-{
- return gpiod_get_raw_value(gpio_to_desc(gpio));
-}
-static inline void __gpio_set_value(unsigned gpio, int value)
-{
- return gpiod_set_raw_value(gpio_to_desc(gpio), value);
-}
-
-static inline int __gpio_cansleep(unsigned gpio)
-{
- return gpiod_cansleep(gpio_to_desc(gpio));
-}
-
-static inline int __gpio_to_irq(unsigned gpio)
-{
- return gpiod_to_irq(gpio_to_desc(gpio));
-}
-
-extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
-extern int gpio_request_array(const struct gpio *array, size_t num);
-extern void gpio_free_array(const struct gpio *array, size_t num);
-
-/*
- * A sysfs interface can be exported by individual drivers if they want,
- * but more typically is configured entirely from userspace.
- */
-static inline int gpio_export(unsigned gpio, bool direction_may_change)
-{
- return gpiod_export(gpio_to_desc(gpio), direction_may_change);
-}
-
-static inline void gpio_unexport(unsigned gpio)
-{
- gpiod_unexport(gpio_to_desc(gpio));
-}
-
-#else /* !CONFIG_GPIOLIB */
-
-#include <linux/kernel.h>
-
-/* platforms that don't directly support access to GPIOs through I2C, SPI,
- * or other blocking infrastructure can use these wrappers.
- */
-
-static inline int gpio_cansleep(unsigned gpio)
-{
- return 0;
-}
-
-static inline int gpio_get_value_cansleep(unsigned gpio)
-{
- might_sleep();
- return __gpio_get_value(gpio);
-}
-
-static inline void gpio_set_value_cansleep(unsigned gpio, int value)
-{
- might_sleep();
- __gpio_set_value(gpio, value);
-}
-
-#endif /* !CONFIG_GPIOLIB */
-
-/*
- * "valid" GPIO numbers are nonnegative and may be passed to
- * setup routines like gpio_request(). only some valid numbers
- * can successfully be requested and used.
- *
- * Invalid GPIO numbers are useful for indicating no-such-GPIO in
- * platform data and other tables.
- */
-
-static inline bool gpio_is_valid(int number)
-{
- /* only non-negative numbers are valid */
- return number >= 0;
-}
-
-#endif /* _ASM_GENERIC_GPIO_H */
diff --git a/include/linux/gpio.h b/include/linux/gpio.h
index 2b75017b3aad..d5ce78e2bdd9 100644
--- a/include/linux/gpio.h
+++ b/include/linux/gpio.h
@@ -13,6 +13,7 @@
#define __LINUX_GPIO_H
#include <linux/errno.h>
+#include <linux/types.h>
/* see Documentation/driver-api/gpio/legacy.rst */
@@ -54,26 +55,100 @@ struct gpio {
};
#ifdef CONFIG_GPIOLIB
-#include <asm-generic/gpio.h>
-static inline int gpio_get_value(unsigned int gpio)
+#include <linux/gpio/consumer.h>
+
+/*
+ * "valid" GPIO numbers are nonnegative and may be passed to
+ * setup routines like gpio_request(). Only some valid numbers
+ * can successfully be requested and used.
+ *
+ * Invalid GPIO numbers are useful for indicating no-such-GPIO in
+ * platform data and other tables.
+ */
+static inline bool gpio_is_valid(int number)
+{
+ /* only non-negative numbers are valid */
+ return number >= 0;
+}
+
+/*
+ * Platforms may implement their GPIO interface with library code,
+ * at a small performance cost for non-inlined operations and some
+ * extra memory (for code and for per-GPIO table entries).
+ */
+
+/*
+ * At the end we want all GPIOs to be dynamically allocated from 0.
+ * However, some legacy drivers still perform fixed allocation.
+ * Until they are all fixed, leave 0-512 space for them.
+ */
+#define GPIO_DYNAMIC_BASE 512
+
+/* Always use the library code for GPIO management calls,
+ * or when sleeping may be involved.
+ */
+int gpio_request(unsigned gpio, const char *label);
+void gpio_free(unsigned gpio);
+
+static inline int gpio_direction_input(unsigned gpio)
+{
+ return gpiod_direction_input(gpio_to_desc(gpio));
+}
+static inline int gpio_direction_output(unsigned gpio, int value)
+{
+ return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
+}
+
+static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
+{
+ return gpiod_set_debounce(gpio_to_desc(gpio), debounce);
+}
+
+static inline int gpio_get_value_cansleep(unsigned gpio)
+{
+ return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
+}
+static inline void gpio_set_value_cansleep(unsigned gpio, int value)
{
- return __gpio_get_value(gpio);
+ return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
}
-static inline void gpio_set_value(unsigned int gpio, int value)
+static inline int gpio_get_value(unsigned gpio)
+{
+ return gpiod_get_raw_value(gpio_to_desc(gpio));
+}
+static inline void gpio_set_value(unsigned gpio, int value)
{
- __gpio_set_value(gpio, value);
+ return gpiod_set_raw_value(gpio_to_desc(gpio), value);
}
-static inline int gpio_cansleep(unsigned int gpio)
+static inline int gpio_cansleep(unsigned gpio)
{
- return __gpio_cansleep(gpio);
+ return gpiod_cansleep(gpio_to_desc(gpio));
}
-static inline int gpio_to_irq(unsigned int gpio)
+static inline int gpio_to_irq(unsigned gpio)
{
- return __gpio_to_irq(gpio);
+ return gpiod_to_irq(gpio_to_desc(gpio));
+}
+
+int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
+int gpio_request_array(const struct gpio *array, size_t num);
+void gpio_free_array(const struct gpio *array, size_t num);
+
+/*
+ * A sysfs interface can be exported by individual drivers if they want,
+ * but more typically is configured entirely from userspace.
+ */
+static inline int gpio_export(unsigned gpio, bool direction_may_change)
+{
+ return gpiod_export(gpio_to_desc(gpio), direction_may_change);
+}
+
+static inline void gpio_unexport(unsigned gpio)
+{
+ gpiod_unexport(gpio_to_desc(gpio));
}
/* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */
@@ -88,7 +163,6 @@ int devm_gpio_request_one(struct device *dev, unsigned gpio,
#include <linux/bug.h>
#include <linux/kernel.h>
-#include <linux/types.h>
struct device;
struct gpio_chip;
--
2.39.1
next prev parent reply other threads:[~2023-02-08 17:35 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-08 17:33 [PATCH v4 00/18] gpiolib cleanups Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 01/18] ARM: orion/gpio: Use the right include Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 02/18] ARM: s3c24xx: " Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:39 ` Krzysztof Kozlowski
2023-02-08 17:39 ` Krzysztof Kozlowski
2023-02-08 17:43 ` Andy Shevchenko
2023-02-08 17:43 ` Andy Shevchenko
2023-02-09 10:45 ` Linus Walleij
2023-02-09 10:45 ` Linus Walleij
2023-02-08 18:02 ` Krzysztof Kozlowski
2023-02-08 18:02 ` Krzysztof Kozlowski
2023-02-08 17:33 ` [PATCH v4 03/18] hte: tegra-194: Use proper includes Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-09 11:29 ` Dipen Patel
2023-02-09 11:29 ` Dipen Patel
2023-02-08 17:33 ` [PATCH v4 04/18] gpiolib: Make the legacy <linux/gpio.h> consumer-only Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 05/18] gpiolib: remove empty asm/gpio.h files Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 06/18] gpiolib: coldfire: remove custom asm/gpio.h Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko [this message]
2023-02-08 17:33 ` [PATCH v4 07/18] gpiolib: remove asm-generic/gpio.h Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 08/18] gpiolib: remove gpio_set_debounce() Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-10 0:30 ` Dmitry Torokhov
2023-02-10 0:30 ` Dmitry Torokhov
2023-02-08 17:33 ` [PATCH v4 09/18] gpiolib: remove legacy gpio_export() Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 10/18] gpiolib: split linux/gpio/driver.h out of linux/gpio.h Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 11/18] gpiolib: split of_mm_gpio_chip out of linux/of_gpio.h Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 12/18] gpio: aggregator: Add missing header(s) Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-09 10:43 ` Linus Walleij
2023-02-09 10:43 ` Linus Walleij
2023-02-08 17:33 ` [PATCH v4 13/18] gpio: reg: " Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-09 10:43 ` Linus Walleij
2023-02-09 10:43 ` Linus Walleij
2023-02-08 17:33 ` [PATCH v4 14/18] gpio: regmap: " Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-09 10:41 ` Linus Walleij
2023-02-09 10:41 ` Linus Walleij
2023-02-08 17:33 ` [PATCH v4 15/18] gpiolib: Drop unused forward declaration from driver.h Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-08 17:33 ` [PATCH v4 16/18] gpiolib: Deduplicate forward declarations in consumer.h Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-09 10:42 ` Linus Walleij
2023-02-09 10:42 ` Linus Walleij
2023-02-08 17:33 ` [PATCH v4 17/18] gpiolib: Group " Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-09 10:42 ` Linus Walleij
2023-02-09 10:42 ` Linus Walleij
2023-02-08 17:33 ` [PATCH v4 18/18] gpiolib: Clean up headers Andy Shevchenko
2023-02-08 17:33 ` Andy Shevchenko
2023-02-09 10:44 ` Linus Walleij
2023-02-09 10:44 ` Linus Walleij
2023-02-15 15:52 ` [PATCH v4 00/18] gpiolib cleanups Bartosz Golaszewski
2023-02-15 15:52 ` Bartosz Golaszewski
2023-02-15 15:59 ` Andy Shevchenko
2023-02-15 15:59 ` Andy Shevchenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230208173343.37582-8-andriy.shevchenko@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=SHA-cyfmac-dev-list@infineon.com \
--cc=aaro.koskinen@iki.fi \
--cc=alex.aring@gmail.com \
--cc=alexs@kernel.org \
--cc=alim.akhtar@samsung.com \
--cc=andrew@lunn.ch \
--cc=arnd@arndb.de \
--cc=aspriel@gmail.com \
--cc=bartosz.golaszewski@linaro.org \
--cc=brcm80211-dev-list.pdl@broadcom.com \
--cc=brgl@bgdev.pl \
--cc=christophe.leroy@csgroup.eu \
--cc=corbet@lwn.net \
--cc=dalias@libc.org \
--cc=davem@davemloft.net \
--cc=devarsht@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=dipenp@nvidia.com \
--cc=dmitry.torokhov@gmail.com \
--cc=edumazet@google.com \
--cc=franky.lin@broadcom.com \
--cc=frowand.list@gmail.com \
--cc=geert@linux-m68k.org \
--cc=gregory.clement@bootlin.com \
--cc=hante.meuleman@broadcom.com \
--cc=j-keerthy@ti.com \
--cc=jmkrzyszt@gmail.com \
--cc=jonathanh@nvidia.com \
--cc=krzysztof.kozlowski@linaro.org \
--cc=kuba@kernel.org \
--cc=kvalo@kernel.org \
--cc=lee@kernel.org \
--cc=leoyang.li@nxp.com \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc-tw-discuss@lists.sourceforge.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linux-wpan@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mchehab@kernel.org \
--cc=michael@walle.cc \
--cc=mika.westerberg@linux.intel.com \
--cc=miquel.raynal@bootlin.com \
--cc=mpe@ellerman.id.au \
--cc=mun.yew.tham@intel.com \
--cc=netdev@vger.kernel.org \
--cc=npiggin@gmail.com \
--cc=pabeni@redhat.com \
--cc=qiang.zhao@nxp.com \
--cc=robh+dt@kernel.org \
--cc=sebastian.hesselbarth@gmail.com \
--cc=siyanteng@loongson.cn \
--cc=src.res@email.cn \
--cc=stefan@datenfreihafen.org \
--cc=tglx@linutronix.de \
--cc=thierry.reding@gmail.com \
--cc=tony@atomide.com \
--cc=treding@nvidia.com \
--cc=vincenzopalazzodev@gmail.com \
--cc=ysato@users.sourceforge.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.