diff options
Diffstat (limited to 'lib/libgpio')
-rw-r--r-- | lib/libgpio/gpio.c | 41 | ||||
-rw-r--r-- | lib/libgpio/libgpio.h | 8 |
2 files changed, 49 insertions, 0 deletions
diff --git a/lib/libgpio/gpio.c b/lib/libgpio/gpio.c index 8170822..48642f5 100644 --- a/lib/libgpio/gpio.c +++ b/lib/libgpio/gpio.c @@ -276,3 +276,44 @@ gpio_pin_pulsate(gpio_handle_t handle, gpio_pin_t pin) { return (gpio_pin_set_flag(handle, pin, GPIO_PIN_PULSATE)); } + +int +gpio_pin_pwm(gpio_handle_t handle, gpio_pin_t pin) +{ + return (gpio_pin_set_flag(handle, pin, GPIO_PIN_PWM)); +} + +int +gpio_pwm_get(gpio_handle_t handle, gpio_pwm_t pwm, gpio_pin_t pin, + uint32_t reg, uint32_t *value) +{ + struct gpio_pwm_req pwmreq; + + bzero(&pwmreq, sizeof(pwmreq)); + pwmreq.gp_pwm = pwm; + pwmreq.gp_pwm_pin = pin; + pwmreq.gp_pwm_reg = reg; + if (ioctl(handle, GPIOPWMGET, &pwmreq) < 0) + return (-1); + *value = pwmreq.gp_pwm_value; + + return (0); + +} + +int +gpio_pwm_set(gpio_handle_t handle, gpio_pwm_t pwm, gpio_pin_t pin, + uint32_t reg, uint32_t value) +{ + struct gpio_pwm_req pwmreq; + + bzero(&pwmreq, sizeof(pwmreq)); + pwmreq.gp_pwm = pwm; + pwmreq.gp_pwm_pin = pin; + pwmreq.gp_pwm_reg = reg; + pwmreq.gp_pwm_value = value; + if (ioctl(handle, GPIOPWMSET, &pwmreq) < 0) + return (-1); + + return (0); +} diff --git a/lib/libgpio/libgpio.h b/lib/libgpio/libgpio.h index a832234..6cc258e 100644 --- a/lib/libgpio/libgpio.h +++ b/lib/libgpio/libgpio.h @@ -35,6 +35,7 @@ __BEGIN_DECLS #define GPIO_INVALID_HANDLE -1 typedef int gpio_handle_t; +typedef int32_t gpio_pwm_t; typedef uint32_t gpio_pin_t; /* @@ -104,6 +105,13 @@ int gpio_pin_pulldown(gpio_handle_t, gpio_pin_t); int gpio_pin_invin(gpio_handle_t, gpio_pin_t); int gpio_pin_invout(gpio_handle_t, gpio_pin_t); int gpio_pin_pulsate(gpio_handle_t, gpio_pin_t); +int gpio_pin_pwm(gpio_handle_t, gpio_pin_t); + +/* PWM Settings. */ +int gpio_pwm_get(gpio_handle_t, gpio_pwm_t pwm, gpio_pin_t, + uint32_t, uint32_t *); +int gpio_pwm_set(gpio_handle_t, gpio_pwm_t pwm, gpio_pin_t, + uint32_t, uint32_t); __END_DECLS |