summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/shared/gpio.c
diff options
context:
space:
mode:
authorAndre Marques <andre.lousa.marques@gmail.com>2015-08-17 11:42:27 +0100
committerBen Gras <ben@minix3.org>2015-08-18 02:26:48 +0200
commitb09a578e8ad4583a97349f866e981980f0ff6ade (patch)
treeb7de55049a0b0eea30bead4ca87ca392c99875ea /c/src/lib/libbsp/shared/gpio.c
parentRaspberry Pi implementation for the RTEMS GPIO API. (diff)
downloadrtems-b09a578e8ad4583a97349f866e981980f0ff6ade.tar.bz2
Closes ticket #2390, and also updates the RPI implementation.
makes rtems_gpio_bsp_get_value return uint32_t. Motivation: simplify beagle gpio implementation for common gpio apio.
Diffstat (limited to 'c/src/lib/libbsp/shared/gpio.c')
-rw-r--r--c/src/lib/libbsp/shared/gpio.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/c/src/lib/libbsp/shared/gpio.c b/c/src/lib/libbsp/shared/gpio.c
index a87b39fa29..80e27279ea 100644
--- a/c/src/lib/libbsp/shared/gpio.c
+++ b/c/src/lib/libbsp/shared/gpio.c
@@ -911,7 +911,7 @@ uint32_t rtems_gpio_read_group(rtems_gpio_group *group)
uint8_t i;
if ( group->input_count == 0 ) {
- return 0xDEADBEEF;
+ return GPIO_INPUT_ERROR;
}
bank = group->digital_input_bank;
@@ -1158,7 +1158,7 @@ uint32_t rtems_gpio_multi_read(
sc = get_pin_bitmask(pin_numbers, pin_count, &bank, &bitmask, DIGITAL_INPUT);
if ( sc != RTEMS_SUCCESSFUL ) {
- return 0xDEADBEEF;
+ return GPIO_INPUT_ERROR;
}
ACQUIRE_LOCK(gpio_bank_state[bank].lock);
@@ -1250,11 +1250,11 @@ rtems_status_code rtems_gpio_clear(uint32_t pin_number)
return sc;
}
-uint8_t rtems_gpio_get_value(uint32_t pin_number)
+int rtems_gpio_get_value(uint32_t pin_number)
{
uint32_t bank;
uint32_t pin;
- int rv;
+ uint32_t rv;
if ( pin_number < 0 || pin_number >= BSP_GPIO_PIN_COUNT ) {
return -1;
@@ -1280,7 +1280,13 @@ uint8_t rtems_gpio_get_value(uint32_t pin_number)
rv = rtems_gpio_bsp_get_value(bank, pin);
- if ( gpio_pin_state[pin_number].logic_invert && rv > 0 ) {
+ if ( rv == GPIO_INPUT_ERROR ) {
+ RELEASE_LOCK(gpio_bank_state[bank].lock);
+
+ return -1;
+ }
+
+ if ( gpio_pin_state[pin_number].logic_invert ) {
RELEASE_LOCK(gpio_bank_state[bank].lock);
return !rv;
@@ -1288,7 +1294,7 @@ uint8_t rtems_gpio_get_value(uint32_t pin_number)
RELEASE_LOCK(gpio_bank_state[bank].lock);
- return ( rv > 0 ) ? 1 : rv;
+ return rv > 0;
}
rtems_status_code rtems_gpio_request_pin(