summaryrefslogtreecommitdiffstats
path: root/sys/dev/gpio/gpioc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/gpio/gpioc.c')
-rw-r--r--sys/dev/gpio/gpioc.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/sys/dev/gpio/gpioc.c b/sys/dev/gpio/gpioc.c
index 156f05c..2fad4df 100644
--- a/sys/dev/gpio/gpioc.c
+++ b/sys/dev/gpio/gpioc.c
@@ -29,19 +29,16 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/types.h>
-
#include <sys/bus.h>
#include <sys/conf.h>
+#include <sys/gpio.h>
#include <sys/ioccom.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/module.h>
-#include <sys/queue.h>
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <sys/gpio.h>
+#include <dev/gpio/gpiobusvar.h>
+
#include "gpio_if.h"
#undef GPIOC_DEBUG
@@ -119,6 +116,7 @@ gpioc_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int fflag,
struct gpioc_softc *sc = cdev->si_drv1;
struct gpio_pin pin;
struct gpio_req req;
+ uint32_t caps;
switch (cmd) {
case GPIOMAXPIN:
@@ -141,8 +139,12 @@ gpioc_ioctl(struct cdev *cdev, u_long cmd, caddr_t arg, int fflag,
case GPIOSETCONFIG:
bcopy(arg, &pin, sizeof(pin));
dprintf("set config pin %d\n", pin.gp_pin);
- res = GPIO_PIN_SETFLAGS(sc->sc_pdev, pin.gp_pin,
- pin.gp_flags);
+ res = GPIO_PIN_GETCAPS(sc->sc_pdev, pin.gp_pin, &caps);
+ if (res == 0)
+ res = gpio_check_flags(caps, pin.gp_flags);
+ if (res == 0)
+ res = GPIO_PIN_SETFLAGS(sc->sc_pdev, pin.gp_pin,
+ pin.gp_flags);
break;
case GPIOGET:
bcopy(arg, &req, sizeof(req));
OpenPOWER on IntegriCloud