diff --git a/sys/dev/gpio/gpiobus.c b/sys/dev/gpio/gpiobus.c --- a/sys/dev/gpio/gpiobus.c +++ b/sys/dev/gpio/gpiobus.c @@ -213,21 +213,27 @@ return (0); } -void +int gpio_pin_release(gpio_pin_t gpio) { device_t busdev; + int rv; if (gpio == NULL) - return; + return (EINVAL); KASSERT(gpio->dev != NULL, ("GPIO pin device is NULL.")); busdev = GPIO_GET_BUS(gpio->dev); - if (busdev != NULL) - gpiobus_release_pin(busdev, gpio->pin); + if (busdev == NULL) + return (ENXIO); + + rv = gpiobus_release_pin(busdev, gpio->pin); + if (rv != 0) + return (rv); free(gpio, M_DEVBUF); + return (0); } int diff --git a/sys/dev/gpio/gpiobusvar.h b/sys/dev/gpio/gpiobusvar.h --- a/sys/dev/gpio/gpiobusvar.h +++ b/sys/dev/gpio/gpiobusvar.h @@ -157,7 +157,7 @@ int gpio_pin_get_by_child_index(device_t _child, uint32_t _idx, gpio_pin_t *_gp); /* Release a pin acquired via any gpio_pin_get_xxx() function. */ -void gpio_pin_release(gpio_pin_t gpio); +int gpio_pin_release(gpio_pin_t gpio); /* Work with gpio pins acquired using the functions above. */ int gpio_pin_getcaps(gpio_pin_t pin, uint32_t *caps);