baylibre-acme: gpio: Don't set direction in get/set functions.

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 <bgolaszewski@baylibre.com>
This commit is contained in:
Bartosz Golaszewski 2015-09-16 15:24:40 +02:00 committed by Uwe Hermann
parent 4678bdb607
commit b41bbfdbe2
1 changed files with 4 additions and 8 deletions

View 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);
}