diff --git a/epicardium/modules/gpio.c b/epicardium/modules/gpio.c index 6bcb68ec721269ff8d479896d1e71730946a4b6b..68271cb93352e372d45bd679fcafedf55850b4c8 100644 --- a/epicardium/modules/gpio.c +++ b/epicardium/modules/gpio.c @@ -5,6 +5,7 @@ #include "adc.h" #include "mxc_errors.h" #include "modules/log.h" +#include "modules/modules.h" /* * Despite what the schematic (currently, 2019-08-18) says these are the correct @@ -133,13 +134,18 @@ int epic_gpio_read_pin(uint8_t pin) } else if (cfg->func == GPIO_FUNC_IN) { return GPIO_InGet(cfg) != 0; } else if (cfg->func == GPIO_FUNC_ALT1) { - ADC_StartConvert(s_adc_channels[pin], 0, 0); - uint16_t value; - int rc = ADC_GetData(&value); - if (rc < 0) { - return -EIO; + int rc = hwlock_acquire(HWLOCK_ADC, pdMS_TO_TICKS(10)); + if (!rc) { + ADC_StartConvert(s_adc_channels[pin], 0, 0); + uint16_t value; + int rc = ADC_GetData(&value); + hwlock_release(HWLOCK_ADC); + if (rc < 0) { + return -EIO; + } + return (int)value; } - return (int)value; + return rc; } else { return -EINVAL; }