From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Linus Walleij <linus.walleij@linaro.org>,
Andy Shevchenko <andy@kernel.org>
Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Subject: [PATCH 02/36] pinctrl: provide new GPIO-to-pinctrl glue helpers
Date: Tue, 3 Oct 2023 16:50:40 +0200 [thread overview]
Message-ID: <20231003145114.21637-3-brgl@bgdev.pl> (raw)
In-Reply-To: <20231003145114.21637-1-brgl@bgdev.pl>
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Currently the pinctrl GPIO helpers all take a number from the global
GPIO numberspace - of which we're trying to get rid of as argument.
These helpers are almost universally called from GPIOLIB driver
callbacks which take a pointer to the backing gpio_chip and the
controller-relative offset as arguments.
Let's provide improved variants of these functions that match the
GPIOLIB signatures as the first step in removing the older flavor.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
drivers/pinctrl/core.c | 107 ++++++++++++++++++++++---------
include/linux/pinctrl/consumer.h | 46 +++++++++++++
2 files changed, 124 insertions(+), 29 deletions(-)
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index e2f7519bef04..679f48c5beeb 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -23,6 +23,7 @@
#include <linux/seq_file.h>
#include <linux/slab.h>
+#include <linux/gpio/driver.h>
#include <linux/pinctrl/consumer.h>
#include <linux/pinctrl/devinfo.h>
#include <linux/pinctrl/machine.h>
@@ -781,14 +782,13 @@ bool pinctrl_gpio_can_use_line(unsigned gpio)
}
EXPORT_SYMBOL_GPL(pinctrl_gpio_can_use_line);
-/**
- * pinctrl_gpio_request() - request a single pin to be used as GPIO
- * @gpio: the GPIO pin number from the GPIO subsystem number space
- *
- * This function should *ONLY* be used from gpiolib-based GPIO drivers,
- * as part of their gpio_request() semantics, platforms and individual drivers
- * shall *NOT* request GPIO pins to be muxed in.
- */
+bool pinctrl_gpio_can_use_line_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return pinctrl_gpio_can_use_line(gc->base + offset);
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_can_use_line_new);
+
+/* This function is deprecated and will be removed. Don't use. */
int pinctrl_gpio_request(unsigned gpio)
{
struct pinctrl_dev *pctldev;
@@ -817,13 +817,21 @@ int pinctrl_gpio_request(unsigned gpio)
EXPORT_SYMBOL_GPL(pinctrl_gpio_request);
/**
- * pinctrl_gpio_free() - free control on a single pin, currently used as GPIO
- * @gpio: the GPIO pin number from the GPIO subsystem number space
+ * pinctrl_gpio_request_new() - request a single pin to be used as GPIO
+ * @gc: GPIO chip structure from the GPIO subsystem
+ * @offset: hardware offset of the GPIO relative to the controller
*
* This function should *ONLY* be used from gpiolib-based GPIO drivers,
- * as part of their gpio_free() semantics, platforms and individual drivers
- * shall *NOT* request GPIO pins to be muxed out.
+ * as part of their gpio_request() semantics, platforms and individual drivers
+ * shall *NOT* request GPIO pins to be muxed in.
*/
+int pinctrl_gpio_request_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return pinctrl_gpio_request(gc->base + offset);
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_request_new);
+
+/* This function is deprecated and will be removed. Don't use. */
void pinctrl_gpio_free(unsigned gpio)
{
struct pinctrl_dev *pctldev;
@@ -846,6 +854,21 @@ void pinctrl_gpio_free(unsigned gpio)
}
EXPORT_SYMBOL_GPL(pinctrl_gpio_free);
+/**
+ * pinctrl_gpio_free_new() - free control on a single pin, currently used as GPIO
+ * @gc: GPIO chip structure from the GPIO subsystem
+ * @offset: hardware offset of the GPIO relative to the controller
+ *
+ * This function should *ONLY* be used from gpiolib-based GPIO drivers,
+ * as part of their gpio_request() semantics, platforms and individual drivers
+ * shall *NOT* request GPIO pins to be muxed in.
+ */
+void pinctrl_gpio_free_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return pinctrl_gpio_free(gc->base + offset);
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_free_new);
+
static int pinctrl_gpio_direction(unsigned gpio, bool input)
{
struct pinctrl_dev *pctldev;
@@ -869,14 +892,7 @@ static int pinctrl_gpio_direction(unsigned gpio, bool input)
return ret;
}
-/**
- * pinctrl_gpio_direction_input() - request a GPIO pin to go into input mode
- * @gpio: the GPIO pin number from the GPIO subsystem number space
- *
- * This function should *ONLY* be used from gpiolib-based GPIO drivers,
- * as part of their gpio_direction_input() semantics, platforms and individual
- * drivers shall *NOT* touch pin control GPIO calls.
- */
+/* This function is deprecated and will be removed. Don't use. */
int pinctrl_gpio_direction_input(unsigned gpio)
{
return pinctrl_gpio_direction(gpio, true);
@@ -884,13 +900,21 @@ int pinctrl_gpio_direction_input(unsigned gpio)
EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_input);
/**
- * pinctrl_gpio_direction_output() - request a GPIO pin to go into output mode
- * @gpio: the GPIO pin number from the GPIO subsystem number space
+ * pinctrl_gpio_direction_input_new() - request a GPIO pin to go into input mode
+ * @gc: GPIO chip structure from the GPIO subsystem
+ * @offset: hardware offset of the GPIO relative to the controller
*
* This function should *ONLY* be used from gpiolib-based GPIO drivers,
- * as part of their gpio_direction_output() semantics, platforms and individual
+ * as part of their gpio_direction_input() semantics, platforms and individual
* drivers shall *NOT* touch pin control GPIO calls.
*/
+int pinctrl_gpio_direction_input_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return pinctrl_gpio_direction_input(gc->base + offset);
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_input_new);
+
+/* This function is deprecated and will be removed. Don't use. */
int pinctrl_gpio_direction_output(unsigned gpio)
{
return pinctrl_gpio_direction(gpio, false);
@@ -898,14 +922,22 @@ int pinctrl_gpio_direction_output(unsigned gpio)
EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_output);
/**
- * pinctrl_gpio_set_config() - Apply config to given GPIO pin
- * @gpio: the GPIO pin number from the GPIO subsystem number space
- * @config: the configuration to apply to the GPIO
+ * pinctrl_gpio_direction_output_new() - request a GPIO pin to go into output
+ * mode
+ * @gc: GPIO chip structure from the GPIO subsystem
+ * @offset: hardware offset of the GPIO relative to the controller
*
- * This function should *ONLY* be used from gpiolib-based GPIO drivers, if
- * they need to call the underlying pin controller to change GPIO config
- * (for example set debounce time).
+ * This function should *ONLY* be used from gpiolib-based GPIO drivers,
+ * as part of their gpio_direction_output() semantics, platforms and individual
+ * drivers shall *NOT* touch pin control GPIO calls.
*/
+int pinctrl_gpio_direction_output_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return pinctrl_gpio_direction_output(gc->base + offset);
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_output_new);
+
+/* This function is deprecated and will be removed. Don't use. */
int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
{
unsigned long configs[] = { config };
@@ -926,6 +958,23 @@ int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
}
EXPORT_SYMBOL_GPL(pinctrl_gpio_set_config);
+/**
+ * pinctrl_gpio_set_config_new() - Apply config to given GPIO pin
+ * @gc: GPIO chip structure from the GPIO subsystem
+ * @offset: hardware offset of the GPIO relative to the controller
+ * @config: the configuration to apply to the GPIO
+ *
+ * This function should *ONLY* be used from gpiolib-based GPIO drivers, if
+ * they need to call the underlying pin controller to change GPIO config
+ * (for example set debounce time).
+ */
+int pinctrl_gpio_set_config_new(struct gpio_chip *gc, unsigned int offset,
+ unsigned long config)
+{
+ return pinctrl_gpio_set_config(gc->base + offset, config);
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_set_config_new);
+
static struct pinctrl_state *find_state(struct pinctrl *p,
const char *name)
{
diff --git a/include/linux/pinctrl/consumer.h b/include/linux/pinctrl/consumer.h
index 22eef0a513ce..c95c13983376 100644
--- a/include/linux/pinctrl/consumer.h
+++ b/include/linux/pinctrl/consumer.h
@@ -17,6 +17,7 @@
#include <linux/pinctrl/pinctrl-state.h>
struct device;
+struct gpio_chip;
/* This struct is private to the core and should be regarded as a cookie */
struct pinctrl;
@@ -26,11 +27,20 @@ struct pinctrl_state;
/* External interface to pin control */
bool pinctrl_gpio_can_use_line(unsigned gpio);
+bool pinctrl_gpio_can_use_line_new(struct gpio_chip *gc, unsigned int offset);
int pinctrl_gpio_request(unsigned gpio);
+int pinctrl_gpio_request_new(struct gpio_chip *gc, unsigned int offset);
void pinctrl_gpio_free(unsigned gpio);
+void pinctrl_gpio_free_new(struct gpio_chip *gc, unsigned int offset);
int pinctrl_gpio_direction_input(unsigned gpio);
+int pinctrl_gpio_direction_input_new(struct gpio_chip *gc,
+ unsigned int offset);
int pinctrl_gpio_direction_output(unsigned gpio);
+int pinctrl_gpio_direction_output_new(struct gpio_chip *gc,
+ unsigned int offset);
int pinctrl_gpio_set_config(unsigned gpio, unsigned long config);
+int pinctrl_gpio_set_config_new(struct gpio_chip *gc, unsigned int offset,
+ unsigned long config);
struct pinctrl * __must_check pinctrl_get(struct device *dev);
void pinctrl_put(struct pinctrl *p);
@@ -68,30 +78,66 @@ static inline bool pinctrl_gpio_can_use_line(unsigned gpio)
return true;
}
+static inline bool
+pinctrl_gpio_can_use_line_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return true;
+}
+
static inline int pinctrl_gpio_request(unsigned gpio)
{
return 0;
}
+static inline int
+pinctrl_gpio_request_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return 0;
+}
+
static inline void pinctrl_gpio_free(unsigned gpio)
{
}
+static inline void
+pinctrl_gpio_free_new(struct gpio_chip *gc, unsigned int offset)
+{
+}
+
static inline int pinctrl_gpio_direction_input(unsigned gpio)
{
return 0;
}
+static inline int
+pinctrl_gpio_direction_input_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return 0;
+}
+
static inline int pinctrl_gpio_direction_output(unsigned gpio)
{
return 0;
}
+static inline int
+pinctrl_gpio_direction_output_new(struct gpio_chip *gc, unsigned int offset)
+{
+ return 0;
+}
+
static inline int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
{
return 0;
}
+static inline int
+pinctrl_gpio_set_config_new(struct gpio_chip *gc, unsigned int offset,
+ unsigned long config)
+{
+ return 0;
+}
+
static inline struct pinctrl * __must_check pinctrl_get(struct device *dev)
{
return NULL;
--
2.39.2
next prev parent reply other threads:[~2023-10-03 14:51 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-03 14:50 [PATCH 00/36] pinctrl: don't use GPIOLIB global numberspace in helpers Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 01/36] pinctrl: remove unneeded extern specifiers from consumer.h Bartosz Golaszewski
2023-10-03 21:39 ` Linus Walleij
2023-10-03 14:50 ` Bartosz Golaszewski [this message]
2023-10-03 15:08 ` [PATCH 02/36] pinctrl: provide new GPIO-to-pinctrl glue helpers Andy Shevchenko
2023-10-03 15:10 ` Andy Shevchenko
2023-10-03 14:50 ` [PATCH 03/36] gpiolib: generic: use new pinctrl GPIO helpers Bartosz Golaszewski
2023-10-03 15:14 ` Andy Shevchenko
2023-10-03 14:50 ` [PATCH 04/36] gpio: cdev: use pinctrl_gpio_can_use_line_new() Bartosz Golaszewski
2023-10-03 15:02 ` Kent Gibson
2023-10-03 15:17 ` Andy Shevchenko
2023-10-03 15:24 ` Kent Gibson
2023-10-03 18:07 ` Bartosz Golaszewski
2023-10-04 4:16 ` Kent Gibson
2023-10-04 7:52 ` Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 05/36] gpio: rcar: use new pinctrl GPIO helpers Bartosz Golaszewski
2023-10-09 11:22 ` Geert Uytterhoeven
2023-10-03 14:50 ` [PATCH 06/36] gpio: tegra: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 07/36] gpio: em: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 08/36] gpio: aspeed: " Bartosz Golaszewski
2023-10-03 14:50 ` Bartosz Golaszewski
2023-10-03 14:50 ` Bartosz Golaszewski
2023-10-03 23:30 ` Andrew Jeffery
2023-10-03 23:30 ` Andrew Jeffery
2023-10-03 23:30 ` Andrew Jeffery
2023-10-04 7:13 ` Bartosz Golaszewski
2023-10-04 7:13 ` Bartosz Golaszewski
2023-10-04 7:13 ` Bartosz Golaszewski
2023-10-09 9:45 ` Uwe Kleine-König
2023-10-09 9:45 ` Uwe Kleine-König
2023-10-09 9:45 ` Uwe Kleine-König
2023-10-03 14:50 ` [PATCH 09/36] gpio: mvebu: " Bartosz Golaszewski
2023-10-09 9:44 ` Uwe Kleine-König
2023-10-03 14:50 ` [PATCH 10/36] gpio: pxa: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 11/36] gpio: rockchip: " Bartosz Golaszewski
2023-10-03 14:50 ` Bartosz Golaszewski
2023-10-05 9:58 ` Heiko Stübner
2023-10-05 9:58 ` Heiko Stübner
2023-10-03 14:50 ` [PATCH 12/36] gpio: vf610: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 13/36] pinctrl: nuvoton: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 14/36] pinctrl: renesas: " Bartosz Golaszewski
2023-10-09 11:22 ` Geert Uytterhoeven
2023-10-03 14:50 ` [PATCH 15/36] pinctrl: bcm: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 16/36] pinctrl: stm32: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 17/36] pinctrl: spear: " Bartosz Golaszewski
2023-10-04 6:01 ` Viresh Kumar
2023-12-06 16:19 ` patchwork-bot+linux-soc
2023-10-03 14:50 ` [PATCH 18/36] pinctrl: starfive: " Bartosz Golaszewski
2023-10-04 9:37 ` Emil Renner Berthing
2023-10-04 9:39 ` Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 19/36] pinctrl: ocelot: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 20/36] pinctrl: rk805: " Bartosz Golaszewski
2023-10-03 14:50 ` [PATCH 21/36] pinctrl: cirrus: " Bartosz Golaszewski
2023-10-03 15:41 ` Charles Keepax
2023-10-03 14:51 ` [PATCH 22/36] pinctrl: mediatek: " Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 23/36] pinctrl: axp209: " Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 24/36] pinctrl: vt8500: " Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 25/36] pinctrl: cy8c95x0: " Bartosz Golaszewski
2023-10-03 15:11 ` Andy Shevchenko
2023-10-03 14:51 ` [PATCH 26/36] pinctrl: as3722: " Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 27/36] pinctrl: ingenic: " Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 28/36] pinctrl: intel: " Bartosz Golaszewski
2023-10-03 15:12 ` Andy Shevchenko
2023-10-04 7:33 ` Mika Westerberg
2023-10-03 14:51 ` [PATCH 29/36] pinctrl: st: " Bartosz Golaszewski
2023-10-04 14:41 ` Patrice CHOTARD
2023-10-03 14:51 ` [PATCH 30/36] pinctrl: remove old " Bartosz Golaszewski
2023-10-03 15:20 ` Andy Shevchenko
2023-10-04 8:49 ` Bartosz Golaszewski
2023-10-04 12:45 ` Andy Shevchenko
2023-10-03 18:34 ` kernel test robot
2023-10-03 14:51 ` [PATCH 31/36] treewide: rename pinctrl_gpio_can_use_line_new() Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 32/36] treewide: rename pinctrl_gpio_request_new() Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 33/36] treewide: rename pinctrl_gpio_free_new() Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 34/36] treewide: rename pinctrl_gpio_direction_input_new() Bartosz Golaszewski
2023-10-03 15:16 ` Andy Shevchenko
2023-10-03 19:08 ` Bartosz Golaszewski
2023-10-04 12:49 ` Andy Shevchenko
2023-10-04 12:53 ` Andy Shevchenko
2023-10-04 14:46 ` Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 35/36] treewide: rename pinctrl_gpio_direction_output_new() Bartosz Golaszewski
2023-10-03 14:51 ` [PATCH 36/36] treewide: rename pinctrl_gpio_set_config_new() Bartosz Golaszewski
2023-10-03 21:51 ` [PATCH 00/36] pinctrl: don't use GPIOLIB global numberspace in helpers Linus Walleij
2023-10-04 8:12 ` Bartosz Golaszewski
2023-10-04 8:42 ` Linus Walleij
2023-10-04 9:35 ` Andy Shevchenko
2023-10-04 9:40 ` Bartosz Golaszewski
2023-10-04 12:55 ` 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=20231003145114.21637-3-brgl@bgdev.pl \
--to=brgl@bgdev.pl \
--cc=andy@kernel.org \
--cc=bartosz.golaszewski@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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.