]> sigrok.org Git - libsigrok.git/commitdiff
baylibre-acme: gpio: Don't set direction in get/set functions.
authorBartosz Golaszewski <redacted>
Wed, 16 Sep 2015 13:24:40 +0000 (15:24 +0200)
committerUwe Hermann <redacted>
Fri, 18 Sep 2015 17:52:39 +0000 (19:52 +0200)
GPIO direction should be set once right after exporting. There's no need
to reset it again - in fact it's a bug which causes the probe to be reset
every time the value is read/set and gives incorrect results when reading
the GPIO values with direction == 'in'.

Signed-off-by: Bartosz Golaszewski <redacted>
src/hardware/baylibre-acme/gpio.c

index cbabcf7f97e53974e6566eb87ae34e01f75014d0..d86d24113b9b3c7fe647a4f1733f64f4d0f3feee 100644 (file)
@@ -64,6 +64,10 @@ SR_PRIV int sr_gpio_export(unsigned gpio)
        if (exported)
                return 0; /* Already exported. */
 
+       status = sr_gpio_set_direction(gpio, GPIO_DIR_OUT);
+       if (status < 0)
+               return status;
+
        buf = g_string_sized_new(16);
        g_string_printf(buf, "%u\n", gpio);
        status = open_and_write("/sys/class/gpio/export", buf->str);
@@ -143,10 +147,6 @@ SR_PRIV int sr_gpio_setval_export(int gpio, int value)
        if (status < 0)
                return status;
 
-       status = sr_gpio_set_direction(gpio, GPIO_DIR_OUT);
-       if (status < 0)
-               return status;
-
        status = sr_gpio_set_value(gpio, value);
        if (status < 0)
                return status;
@@ -162,9 +162,5 @@ SR_PRIV int sr_gpio_getval_export(int gpio)
        if (status < 0)
                return status;
 
-       status = sr_gpio_set_direction(gpio, GPIO_DIR_IN);
-       if (status < 0)
-               return status;
-
        return sr_gpio_get_value(gpio);
 }