diff options
-rw-r--r-- | zephyr/projects/nissa/src/nivviks/board_config.c | 9 | ||||
-rw-r--r-- | zephyr/shim/src/adc.c | 11 |
2 files changed, 20 insertions, 0 deletions
diff --git a/zephyr/projects/nissa/src/nivviks/board_config.c b/zephyr/projects/nissa/src/nivviks/board_config.c index 24531b62c6..89ecfc63c3 100644 --- a/zephyr/projects/nissa/src/nivviks/board_config.c +++ b/zephyr/projects/nissa/src/nivviks/board_config.c @@ -10,6 +10,7 @@ #include <kernel.h> #include <sys/printk.h> +#include "adc.h" #include "driver/charger/isl923x_public.h" #include "driver/retimer/anx7483_public.h" #include "gpio/gpio_int.h" @@ -78,6 +79,14 @@ static void nivviks_subboard_init(void) gpio_pin_configure_dt(GPIO_DT_FROM_ALIAS(gpio_hpd_odl), GPIO_INPUT); } + /* + * Workaround for b/224900226. + * Read all ADCs so that they are initialised. + * TODO(b/224900226): Remove when fixed. + */ + for (enum adc_channel adc = 0; adc < ADC_CH_COUNT; adc++) { + adc_read_channel(adc); + } } DECLARE_HOOK(HOOK_INIT, nivviks_subboard_init, HOOK_PRIO_FIRST+1); diff --git a/zephyr/shim/src/adc.c b/zephyr/shim/src/adc.c index 68babcc576..d5f0ed4a8b 100644 --- a/zephyr/shim/src/adc.c +++ b/zephyr/shim/src/adc.c @@ -82,5 +82,16 @@ int adc_read_channel(enum adc_channel ch) ADC_GAIN_1, CONFIG_PLATFORM_EC_ADC_RESOLUTION, &ret); ret = (ret * adc_channels[ch].factor_mul) / adc_channels[ch].factor_div; +#ifdef CONFIG_BOARD_NIVVIKS + /* + * TODO(b/224900226): Remove when fixed. + * Temporary workaround for b/224900226, where + * the temperature ADCs sometimes read zero. + */ + if (ret == 0) { + LOG_ERR("Zero read on sensor %d, ignored", ch); + return -1; + } +#endif return ret; } |