summaryrefslogtreecommitdiffstats
path: root/lib/libgpio
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libgpio')
-rw-r--r--lib/libgpio/gpio.c41
-rw-r--r--lib/libgpio/libgpio.h8
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
OpenPOWER on IntegriCloud