From 5325059aa1ac8d4836cbaf1e74f9796a4d24ffd1 Mon Sep 17 00:00:00 2001 From: swym <0xfd000000@gmail.com> Date: Sun, 25 Aug 2019 12:24:42 +0200 Subject: [PATCH] analog pgio: lock ADC HW --- epicardium/modules/gpio.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/epicardium/modules/gpio.c b/epicardium/modules/gpio.c index 6bcb68ec..68271cb9 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; } -- GitLab