git: da94bc915a14 - main - gpio: don't misuse pin->flags
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 21 Apr 2025 16:28:31 UTC
The branch main has been updated by emaste:
URL: https://cgit.FreeBSD.org/src/commit/?id=da94bc915a142d3ca44dea6277db89f194f3f628
commit da94bc915a142d3ca44dea6277db89f194f3f628
Author: Ahmad Khalifa <ahmadkhalifa570@gmail.com>
AuthorDate: 2025-03-11 11:39:28 +0000
Commit: Ed Maste <emaste@FreeBSD.org>
CommitDate: 2025-04-21 16:28:14 +0000
gpio: don't misuse pin->flags
The flags member of gpio_pin_t was only meant for pin flags acquired via
the FDT.
Instead, make an accessor so gpioaei can still access the flags and
remove the now unused gpio_pin_get_by_acpi_index.
Reviewed-by: Warner Losh <imp@FreeBSD.org>
Pull-request: https://github.com/freebsd/freebsd-src/pull/1667
Signed-off-by: Ahmad Khalifa <ahmadkhalifa570@gmail.com>
---
sys/dev/gpio/acpi_gpiobus.c | 20 +++-----------------
sys/dev/gpio/acpi_gpiobusvar.h | 5 ++---
sys/dev/gpio/gpioaei.c | 9 ++++++---
3 files changed, 11 insertions(+), 23 deletions(-)
diff --git a/sys/dev/gpio/acpi_gpiobus.c b/sys/dev/gpio/acpi_gpiobus.c
index 935f4bb4569c..96faec5e6f02 100644
--- a/sys/dev/gpio/acpi_gpiobus.c
+++ b/sys/dev/gpio/acpi_gpiobus.c
@@ -380,23 +380,6 @@ acpi_gpiobus_detach(device_t dev)
return (gpiobus_detach(dev));
}
-int
-gpio_pin_get_by_acpi_index(device_t consumer, uint32_t idx,
- gpio_pin_t *out_pin)
-{
- struct acpi_gpiobus_ivar *devi;
- int rv;
-
- rv = gpio_pin_get_by_child_index(consumer, idx, out_pin);
- if (rv != 0)
- return (rv);
-
- devi = device_get_ivars(consumer);
- (*out_pin)->flags = devi->flags;
-
- return (0);
-}
-
static int
acpi_gpiobus_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
{
@@ -406,6 +389,9 @@ acpi_gpiobus_read_ivar(device_t dev, device_t child, int which, uintptr_t *resul
case ACPI_GPIOBUS_IVAR_HANDLE:
*result = (uintptr_t)devi->dev_handle;
break;
+ case ACPI_GPIOBUS_IVAR_FLAGS:
+ *result = (uintptr_t)devi->flags;
+ break;
default:
return (gpiobus_read_ivar(dev, child, which, result));
}
diff --git a/sys/dev/gpio/acpi_gpiobusvar.h b/sys/dev/gpio/acpi_gpiobusvar.h
index 77cb91110cb5..f8d502eab9d1 100644
--- a/sys/dev/gpio/acpi_gpiobusvar.h
+++ b/sys/dev/gpio/acpi_gpiobusvar.h
@@ -34,16 +34,15 @@
enum acpi_gpiobus_ivars {
ACPI_GPIOBUS_IVAR_HANDLE = 10600,
+ ACPI_GPIOBUS_IVAR_FLAGS,
};
#define ACPI_GPIOBUS_ACCESSOR(var, ivar, type) \
__BUS_ACCESSOR(acpi_gpiobus, var, ACPI_GPIOBUS, ivar, type)
ACPI_GPIOBUS_ACCESSOR(handle, HANDLE, ACPI_HANDLE)
+ACPI_GPIOBUS_ACCESSOR(flags, FLAGS, uint32_t)
#undef ACPI_GPIOBUS_ACCESSOR
-int gpio_pin_get_by_acpi_index(device_t consumer, uint32_t idx,
- gpio_pin_t *out_pin);
-
#endif /* __ACPI_GPIOBUS_H__ */
diff --git a/sys/dev/gpio/gpioaei.c b/sys/dev/gpio/gpioaei.c
index f43674b53c7d..6cbb5f1bb7ed 100644
--- a/sys/dev/gpio/gpioaei.c
+++ b/sys/dev/gpio/gpioaei.c
@@ -79,6 +79,7 @@ gpio_aei_attach(device_t dev)
{
struct gpio_aei_softc * sc = device_get_softc(dev);
gpio_pin_t pin;
+ uint32_t flags;
ACPI_HANDLE handle;
int err;
@@ -87,17 +88,19 @@ gpio_aei_attach(device_t dev)
/* Store parameters needed by gpio_aei_intr. */
handle = acpi_gpiobus_get_handle(dev);
- if (gpio_pin_get_by_acpi_index(dev, 0, &pin) != 0) {
+ if (gpio_pin_get_by_child_index(dev, 0, &pin) != 0) {
device_printf(dev, "Unable to get the input pin\n");
return (ENXIO);
}
sc->type = ACPI_AEI_TYPE_UNKNOWN;
sc->pin = pin->pin;
+
+ flags = acpi_gpiobus_get_flags(dev);
if (pin->pin <= 255) {
char objname[5]; /* "_EXX" or "_LXX" */
sprintf(objname, "_%c%02X",
- (pin->flags & GPIO_INTR_EDGE_MASK) ? 'E' : 'L', pin->pin);
+ (flags & GPIO_INTR_EDGE_MASK) ? 'E' : 'L', pin->pin);
if (ACPI_SUCCESS(AcpiGetHandle(handle, objname, &sc->handle)))
sc->type = ACPI_AEI_TYPE_ELX;
}
@@ -113,7 +116,7 @@ gpio_aei_attach(device_t dev)
/* Set up the interrupt. */
if ((sc->intr_res = gpio_alloc_intr_resource(dev, &sc->intr_rid,
- RF_ACTIVE, pin, pin->flags & GPIO_INTR_MASK)) == NULL) {
+ RF_ACTIVE, pin, flags & GPIO_INTR_MASK)) == NULL) {
device_printf(dev, "Cannot allocate an IRQ\n");
return (ENOTSUP);
}