From a129933ccd1b24f3c4529de17a4c199dc85a4779 Mon Sep 17 00:00:00 2001 From: Armando Date: Tue, 6 Jul 2021 17:31:27 +0800 Subject: [PATCH] adc: apply adc power API to adc driver --- components/driver/adc_common.c | 6 ++++-- components/driver/esp32/adc.c | 3 +++ components/driver/esp32s2/adc.c | 3 +++ components/soc/include/hal/adc_hal.h | 5 ----- components/soc/src/esp32/adc_hal.c | 3 --- components/soc/src/esp32s2/adc_hal.c | 3 --- components/soc/src/hal/adc_hal.c | 5 ----- 7 files changed, 10 insertions(+), 18 deletions(-) diff --git a/components/driver/adc_common.c b/components/driver/adc_common.c index 6ac2eacb5e..6c1e7631b6 100644 --- a/components/driver/adc_common.c +++ b/components/driver/adc_common.c @@ -156,9 +156,11 @@ void adc_power_on(void) __attribute__((alias("adc_power_on_internal"))); static void adc_power_off_internal(void) { - ADC_ENTER_CRITICAL(); +#if CONFIG_IDF_TARGET_ESP32 adc_hal_set_power_manage(ADC_POWER_SW_OFF); - ADC_EXIT_CRITICAL(); +#else + adc_hal_set_power_manage(ADC_POWER_BY_FSM); +#endif } void adc_power_off(void) __attribute__((alias("adc_power_off_internal"))); diff --git a/components/driver/esp32/adc.c b/components/driver/esp32/adc.c index 1e00c28b99..9857e6ce5f 100644 --- a/components/driver/esp32/adc.c +++ b/components/driver/esp32/adc.c @@ -137,6 +137,7 @@ esp_err_t adc_digi_init(void) esp_err_t adc_digi_deinit(void) { + adc_power_release(); ADC_ENTER_CRITICAL(); adc_hal_digi_deinit(); ADC_EXIT_CRITICAL(); @@ -145,6 +146,8 @@ esp_err_t adc_digi_deinit(void) esp_err_t adc_digi_controller_config(const adc_digi_config_t *config) { + /* If enable digital controller, adc xpd should always on. */ + adc_power_acquire(); ADC_ENTER_CRITICAL(); adc_hal_digi_controller_config(config); ADC_EXIT_CRITICAL(); diff --git a/components/driver/esp32s2/adc.c b/components/driver/esp32s2/adc.c index 303c250be1..7d473c6646 100644 --- a/components/driver/esp32s2/adc.c +++ b/components/driver/esp32s2/adc.c @@ -83,6 +83,7 @@ esp_err_t adc_digi_deinit(void) s_adc_digi_arbiter_lock = NULL; } #endif + adc_power_release(); ADC_ENTER_CRITICAL(); adc_hal_digi_deinit(); ADC_EXIT_CRITICAL(); @@ -107,6 +108,8 @@ esp_err_t adc_digi_controller_config(const adc_digi_config_t *config) } #endif //CONFIG_PM_ENABLE + /* If enable digtal controller, adc xpd should always on. */ + adc_power_acquire(); ADC_ENTER_CRITICAL(); adc_hal_digi_controller_config(config); ADC_EXIT_CRITICAL(); diff --git a/components/soc/include/hal/adc_hal.h b/components/soc/include/hal/adc_hal.h index 3a0a5a5c55..364489e537 100644 --- a/components/soc/include/hal/adc_hal.h +++ b/components/soc/include/hal/adc_hal.h @@ -11,11 +11,6 @@ */ void adc_hal_init(void); -/** - * ADC module deinitialization. - */ -void adc_hal_deinit(void); - /** * Set adc sample cycle. * diff --git a/components/soc/src/esp32/adc_hal.c b/components/soc/src/esp32/adc_hal.c index 8a06631401..a00cf1e91c 100644 --- a/components/soc/src/esp32/adc_hal.c +++ b/components/soc/src/esp32/adc_hal.c @@ -27,13 +27,10 @@ void adc_hal_digi_deinit(void) { adc_ll_digi_clear_pattern_table(ADC_NUM_1); adc_ll_digi_clear_pattern_table(ADC_NUM_2); - adc_hal_deinit(); } void adc_hal_digi_controller_config(const adc_digi_config_t *cfg) { - /* If enable digital controller, adc xpd should always on. */ - adc_ll_set_power_manage(ADC_POWER_SW_ON); /* Single channel mode or multi channel mode. */ adc_ll_digi_set_convert_mode(cfg->conv_mode); if (cfg->conv_mode & ADC_CONV_SINGLE_UNIT_1) { diff --git a/components/soc/src/esp32s2/adc_hal.c b/components/soc/src/esp32s2/adc_hal.c index 9af481282a..aa78c45d90 100644 --- a/components/soc/src/esp32s2/adc_hal.c +++ b/components/soc/src/esp32s2/adc_hal.c @@ -38,7 +38,6 @@ void adc_hal_digi_deinit(void) adc_ll_digi_filter_reset(ADC_NUM_2); adc_ll_digi_reset(); adc_ll_digi_controller_clk_disable(); - adc_hal_deinit(); } static inline void adc_set_init_code(adc_ll_num_t adc_n, adc_channel_t channel, adc_atten_t atten) @@ -49,8 +48,6 @@ static inline void adc_set_init_code(adc_ll_num_t adc_n, adc_channel_t channel, void adc_hal_digi_controller_config(const adc_digi_config_t *cfg) { - /* If enable digtal controller, adc xpd should always on. */ - adc_ll_set_power_manage(ADC_POWER_SW_ON); /* Single channel mode or multi channel mode. */ adc_ll_digi_set_convert_mode(cfg->conv_mode); if (cfg->conv_mode & ADC_CONV_SINGLE_UNIT_1) { diff --git a/components/soc/src/hal/adc_hal.c b/components/soc/src/hal/adc_hal.c index f1d08100d7..26fcd433e1 100644 --- a/components/soc/src/hal/adc_hal.c +++ b/components/soc/src/hal/adc_hal.c @@ -25,11 +25,6 @@ void adc_hal_init(void) adc_ll_digi_output_invert(ADC_NUM_2, SOC_ADC_DIGI_DATA_INVERT_DEFAULT(ADC_NUM_2)); } -void adc_hal_deinit(void) -{ - adc_ll_set_power_manage(ADC_POWER_SW_OFF); -} - int adc_hal_convert(adc_ll_num_t adc_n, int channel, int *value) { adc_ll_rtc_enable_channel(adc_n, channel);