git: 4fd32b1e7f54 - main - gpio: add GPIO_GET_PIN_LIST
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 27 Aug 2025 21:57:10 UTC
The branch main has been updated by vexeduxr:
URL: https://cgit.FreeBSD.org/src/commit/?id=4fd32b1e7f54811bd3a6f362493d256db40bb686
commit 4fd32b1e7f54811bd3a6f362493d256db40bb686
Author: Ahmad Khalifa <vexeduxr@FreeBSD.org>
AuthorDate: 2025-08-27 21:25:39 +0000
Commit: Ahmad Khalifa <vexeduxr@FreeBSD.org>
CommitDate: 2025-08-27 21:38:32 +0000
gpio: add GPIO_GET_PIN_LIST
While most GPIO controllers provide pins from 0 .. N in a sequential
manner, not all controllers start with pin 0, and not all controllers
order their pins sequentially. Allow callers to get a pin list from the
controller. The default behaviour is to fill pin_list with pins 0 to
GPIO_PIN_MAX().
Suggested by: mmel
Reviewed by: mmel
Approved by: imp (mentor)
Differential Revision: https://reviews.freebsd.org/D52172
---
sys/dev/gpio/gpio_if.m | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/sys/dev/gpio/gpio_if.m b/sys/dev/gpio/gpio_if.m
index 5501b2b5c0e7..0b6988ceba79 100644
--- a/sys/dev/gpio/gpio_if.m
+++ b/sys/dev/gpio/gpio_if.m
@@ -62,6 +62,22 @@ CODE {
return (0);
}
+
+ static int
+ gpio_default_get_pin_list(device_t dev, uint32_t *pin_list)
+ {
+ uint32_t maxpin;
+ int err;
+
+ err = GPIO_PIN_MAX(dev, &maxpin);
+ if (err != 0)
+ return (ENXIO);
+
+ for (int i = 0; i <= maxpin; i++)
+ pin_list[i] = i;
+
+ return (0);
+ }
};
HEADER {
@@ -185,3 +201,13 @@ METHOD int pin_config_32 {
uint32_t num_pins;
uint32_t *pin_flags;
} DEFAULT gpio_default_nosupport;
+
+#
+# Get the controller's pin numbers. pin_list is expected to be an array with at
+# least GPIO_PIN_MAX() elements. Populates pin_list from 0 to GPIO_PIN_MAX() by
+# default.
+#
+METHOD int get_pin_list {
+ device_t dev;
+ uint32_t *pin_list;
+} DEFAULT gpio_default_get_pin_list;