Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Aug 2025 21:57:10 GMT
From:      Ahmad Khalifa <vexeduxr@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 4fd32b1e7f54 - main - gpio: add GPIO_GET_PIN_LIST
Message-ID:  <202508272157.57RLvABq026493@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202508272157.57RLvABq026493>