From 6858b37f5108608fac59e8220e9fd6a54297e272 Mon Sep 17 00:00:00 2001 From: Sudeep Mohanty Date: Mon, 24 Feb 2025 15:59:14 +0100 Subject: [PATCH] fix(ulp-riscv): Fixed ADC oneshot initialization for ULP RISC-V This commit fixes a bug in the ADC oneshot driver initialization for the ULP RISC-V. --- components/esp_adc/adc_oneshot.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/components/esp_adc/adc_oneshot.c b/components/esp_adc/adc_oneshot.c index c49b4dc247..aba44c2748 100644 --- a/components/esp_adc/adc_oneshot.c +++ b/components/esp_adc/adc_oneshot.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2019-2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2019-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -107,7 +107,7 @@ esp_err_t adc_oneshot_new_unit(const adc_oneshot_unit_init_cfg_t *init_config, a if (init_config->ulp_mode != ADC_ULP_MODE_DISABLE) { clk_src = LP_ADC_CLK_SRC_LP_DYN_FAST; } else -#endif /* CONFIG_SOC_LP_ADC_SUPPORTED */ +#endif /* SOC_LP_ADC_SUPPORTED */ { clk_src = ADC_DIGI_CLK_SRC_DEFAULT; if (init_config->clk_src) { @@ -119,10 +119,28 @@ esp_err_t adc_oneshot_new_unit(const adc_oneshot_unit_init_cfg_t *init_config, a adc_oneshot_hal_cfg_t config = { .unit = init_config->unit_id, - .work_mode = (init_config->ulp_mode != ADC_ULP_MODE_DISABLE) ? ADC_HAL_LP_MODE : ADC_HAL_SINGLE_READ_MODE, .clk_src = clk_src, .clk_src_freq_hz = clk_src_freq_hz, }; + + switch (init_config->ulp_mode) { + case ADC_ULP_MODE_FSM: + config.work_mode = ADC_HAL_LP_MODE; // esp32 ulp-fsm mode + break; + case ADC_ULP_MODE_RISCV: + config.work_mode = ADC_HAL_SINGLE_READ_MODE; // esp32s2, esp32s3 ulp-riscv mode + break; +#if SOC_LP_ADC_SUPPORTED + case ADC_ULP_MODE_LP_CORE: + config.work_mode = ADC_HAL_LP_MODE; // lp core mode + break; +#endif /* SOC_LP_ADC_SUPPORTED */ + case ADC_ULP_MODE_DISABLE: + default: + config.work_mode = ADC_HAL_SINGLE_READ_MODE; // oneshot read mode + break; + } + adc_oneshot_hal_init(&(unit->hal), &config); #if SOC_ADC_DIG_CTRL_SUPPORTED && !SOC_ADC_RTC_CTRL_SUPPORTED