diff options
Diffstat (limited to 'lib/utils/gpio')
-rw-r--r-- | lib/utils/gpio/gpio.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/utils/gpio/gpio.c b/lib/utils/gpio/gpio.c index 3a3a6b2..6ffe929 100644 --- a/lib/utils/gpio/gpio.c +++ b/lib/utils/gpio/gpio.c @@ -73,17 +73,26 @@ int gpio_direction_output(struct gpio_pin *gp, int value) if (!gp->chip->direction_output) return SBI_ENOSYS; + if (gp->flags & GPIO_FLAG_ACTIVE_LOW) + value = value == 0 ? 1 : 0; + return gp->chip->direction_output(gp, value); } int gpio_get(struct gpio_pin *gp) { + int value; + if (!gp || !gp->chip || (gp->chip->ngpio <= gp->offset)) return SBI_EINVAL; if (!gp->chip->get) return SBI_ENOSYS; - return gp->chip->get(gp); + value = gp->chip->get(gp); + + if (gp->flags & GPIO_FLAG_ACTIVE_LOW) + value = value == 0 ? 1 : 0; + return value; } int gpio_set(struct gpio_pin *gp, int value) @@ -93,6 +102,9 @@ int gpio_set(struct gpio_pin *gp, int value) if (!gp->chip->set) return SBI_ENOSYS; + if (gp->flags & GPIO_FLAG_ACTIVE_LOW) + value = value == 0 ? 1 : 0; + gp->chip->set(gp, value); return 0; } |