summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorMehmet Fide <mehmet.fide@screeningeagle.com>2026-09-15 10:05:00 +0200
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-09-21 11:14:49 +0200
commitfc291104d01a4e42b44132925c46655d4be5ed13 (patch)
treebc0537ddb86a650d609be1c5844849a9aa016ca5 /include/linux
parent9fbdc9ab1c304a99960cccb5300956cc73cb7020 (diff)
downloadlinux-next-fc291104d01a4e42b44132925c46655d4be5ed13.tar.gz
linux-next-fc291104d01a4e42b44132925c46655d4be5ed13.zip
gpiolib: add get_config() and gpiochip_generic_get_config()
A chip with a pin control backend sets a line's configuration through set_config() and gpiochip_generic_config(), but has no way to read one back. gpio-mmio needs that to learn the direction of a line whose direction lives in the pin controller. Add the optional get_config() callback, taking the packed parameter to query and returning its bare argument the way pinctrl_gpio_get_config() does, and gpiochip_generic_get_config() as the pin control backed implementation, the mirror of gpiochip_generic_config(): a chip without pin ranges, or a kernel without pinctrl, gets -ENOTSUPP. Nothing in gpiolib calls get_config() and there is no consumer API; it is for the chip's own use. Suggested-by: Linus Walleij <linusw@kernel.org> Signed-off-by: Mehmet Fide <mehmet.fide@screeningeagle.com> Reviewed-by: Linus Walleij <linusw@kernel.org> Link: https://patch.msgid.link/20260915080501.329424-4-mehmet.fide@gmail.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/gpio/driver.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index 17511434ed07..4077dc678cae 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -359,6 +359,10 @@ struct gpio_irq_chip {
* @set_config: optional hook for all kinds of settings. Uses the same
* packed config format as generic pinconf. Must return 0 on success and
* a negative error number on failure.
+ * @get_config: optional hook to read back a setting. Takes the packed
+ * generic pinconf parameter to query and returns its bare argument in
+ * the same variable, like pinctrl_gpio_get_config(). Must return 0 on
+ * success and a negative error number on failure.
* @to_irq: optional hook supporting non-static gpiod_to_irq() mappings;
* implementation may not sleep
* @dbg_show: optional routine to show contents in debugfs; default code
@@ -434,6 +438,9 @@ struct gpio_chip {
int (*set_config)(struct gpio_chip *gc,
unsigned int offset,
unsigned long config);
+ int (*get_config)(struct gpio_chip *gc,
+ unsigned int offset,
+ unsigned long *config);
int (*to_irq)(struct gpio_chip *gc,
unsigned int offset);
@@ -708,6 +715,8 @@ int gpiochip_generic_request(struct gpio_chip *gc, unsigned int offset);
void gpiochip_generic_free(struct gpio_chip *gc, unsigned int offset);
int gpiochip_generic_config(struct gpio_chip *gc, unsigned int offset,
unsigned long config);
+int gpiochip_generic_get_config(struct gpio_chip *gc, unsigned int offset,
+ unsigned long *config);
/**
* struct gpio_pin_range - pin range controlled by a gpio chip