diff --git a/components/esp32/Kconfig b/components/esp32/Kconfig index 194784b4af..23fcf3f30e 100644 --- a/components/esp32/Kconfig +++ b/components/esp32/Kconfig @@ -809,18 +809,6 @@ config ESP32_RTC_CLK_CAL_CYCLES In case more value will help improve the definition of the launch of the crystal. If the crystal could not start, it will be switched to internal RC. -config ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT - bool "Additional current for external 32kHz crystal" - depends on ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL - default "n" - help - Choose which additional current is used for rtc external crystal. - - - "Enable current by touch" option provides touch pad9 current to - external 32kHz crystal, at the expense of slightly higher (4-5uA) deep - sleep current consumption. Note that enabled Touch or ULP wakeup - source at sleep, this item is invalid even selected ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT. - config ESP32_RTC_XTAL_BOOTSTRAP_CYCLES int "Bootstrap cycles for external 32kHz crystal" depends on ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL diff --git a/components/esp32/include/esp_sleep.h b/components/esp32/include/esp_sleep.h index c21f26add5..6ebe79ce35 100644 --- a/components/esp32/include/esp_sleep.h +++ b/components/esp32/include/esp_sleep.h @@ -95,7 +95,6 @@ esp_err_t esp_sleep_disable_wakeup_source(esp_sleep_source_t source); * source is used. * @return * - ESP_OK on success - * - ESP_ERR_NOT_SUPPORTED if additional current by touch (CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT) is enabled. * - ESP_ERR_INVALID_STATE if ULP co-processor is not enabled or if wakeup triggers conflict */ esp_err_t esp_sleep_enable_ulp_wakeup(); @@ -122,7 +121,6 @@ esp_err_t esp_sleep_enable_timer_wakeup(uint64_t time_in_us); * * @return * - ESP_OK on success - * - ESP_ERR_NOT_SUPPORTED if additional current by touch (CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT) is enabled. * - ESP_ERR_INVALID_STATE if wakeup triggers conflict */ esp_err_t esp_sleep_enable_touchpad_wakeup(); diff --git a/components/esp32/sleep_modes.c b/components/esp32/sleep_modes.c index 98a8847618..f3bd071f3f 100644 --- a/components/esp32/sleep_modes.c +++ b/components/esp32/sleep_modes.c @@ -401,9 +401,6 @@ esp_err_t esp_sleep_disable_wakeup_source(esp_sleep_source_t source) esp_err_t esp_sleep_enable_ulp_wakeup() { -#ifdef CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT - return ESP_ERR_NOT_SUPPORTED; -#endif #ifdef CONFIG_ULP_COPROC_ENABLED if(s_config.wakeup_triggers & RTC_EXT0_TRIG_EN) { ESP_LOGE(TAG, "Conflicting wake-up trigger: ext0"); @@ -437,9 +434,6 @@ static void timer_wakeup_prepare() esp_err_t esp_sleep_enable_touchpad_wakeup() { -#ifdef CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT - return ESP_ERR_NOT_SUPPORTED; -#endif if (s_config.wakeup_triggers & (RTC_EXT0_TRIG_EN)) { ESP_LOGE(TAG, "Conflicting wake-up trigger: ext0"); return ESP_ERR_INVALID_STATE; @@ -699,13 +693,6 @@ static uint32_t get_power_down_flags() if (s_config.pd_options[ESP_PD_DOMAIN_XTAL] != ESP_PD_OPTION_ON) { pd_flags |= RTC_SLEEP_PD_XTAL; } - - if ((s_config.wakeup_triggers & (RTC_TOUCH_TRIG_EN | RTC_ULP_TRIG_EN)) == 0) { - // If enabled EXT1 only and enable the additional current by touch, should be keep RTC_PERIPH power on. -#if ((defined CONFIG_ESP32_RTC_CLOCK_SOURCE_EXTERNAL_CRYSTAL) && (defined CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT)) - pd_flags &= ~RTC_SLEEP_PD_RTC_PERIPH; -#endif - } return pd_flags; } diff --git a/components/soc/esp32/rtc_clk.c b/components/soc/esp32/rtc_clk.c index e0e241aaf3..8c2948553d 100644 --- a/components/soc/esp32/rtc_clk.c +++ b/components/soc/esp32/rtc_clk.c @@ -58,7 +58,7 @@ #define APLL_CAL_DELAY_2 0x3f #define APLL_CAL_DELAY_3 0x1f -#define XTAL_32K_DAC_VAL 3 +#define XTAL_32K_DAC_VAL 1 #define XTAL_32K_DRES_VAL 3 #define XTAL_32K_DBIAS_VAL 0 @@ -111,36 +111,14 @@ static const char* TAG = "rtc_clk"; static void rtc_clk_32k_enable_common(int dac, int dres, int dbias) { - CLEAR_PERI_REG_MASK(RTC_IO_XTAL_32K_PAD_REG, - RTC_IO_X32P_RDE | RTC_IO_X32P_RUE | RTC_IO_X32N_RUE | - RTC_IO_X32N_RDE | RTC_IO_X32N_MUX_SEL | RTC_IO_X32P_MUX_SEL); SET_PERI_REG_MASK(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_X32N_MUX_SEL | RTC_IO_X32P_MUX_SEL); - /* Set the parameters of xtal - dac --> current - dres --> resistance - dbias --> bais voltage - */ + CLEAR_PERI_REG_MASK(RTC_IO_XTAL_32K_PAD_REG, + RTC_IO_X32P_RDE | RTC_IO_X32P_RUE | RTC_IO_X32N_RUE | + RTC_IO_X32N_RDE | RTC_IO_X32N_MUX_SEL | RTC_IO_X32P_MUX_SEL); REG_SET_FIELD(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_DAC_XTAL_32K, dac); REG_SET_FIELD(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_DRES_XTAL_32K, dres); REG_SET_FIELD(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_DBIAS_XTAL_32K, dbias); - -#ifdef CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT - /* TOUCH sensor can provide additional current to external XTAL. - In some case, X32N and X32P PAD don't have enough drive capability to start XTAL */ - SET_PERI_REG_MASK(RTC_IO_TOUCH_CFG_REG, RTC_IO_TOUCH_XPD_BIAS_M); - /* Tie PAD Touch8 to VDD - NOTE: TOUCH8 and TOUCH9 register settings are reversed except for DAC, so we set RTC_IO_TOUCH_PAD9_REG here instead - */ - SET_PERI_REG_MASK(RTC_IO_TOUCH_PAD9_REG, RTC_IO_TOUCH_PAD9_TIE_OPT_M); - /* Set the current used to compensate TOUCH PAD8 */ - SET_PERI_REG_BITS(RTC_IO_TOUCH_PAD8_REG, RTC_IO_TOUCH_PAD8_DAC, 4, RTC_IO_TOUCH_PAD8_DAC_S); - /* Power up TOUCH8 - So the Touch DAC start to drive some current from VDD to TOUCH8(which is also XTAL-N) - */ - SET_PERI_REG_MASK(RTC_IO_TOUCH_PAD9_REG, RTC_IO_TOUCH_PAD9_XPD_M); -#endif // CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT - /* Power up external xtal */ - SET_PERI_REG_MASK(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_XPD_XTAL_32K_M); + SET_PERI_REG_MASK(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_XPD_XTAL_32K); } void rtc_clk_32k_enable(bool enable) @@ -148,12 +126,7 @@ void rtc_clk_32k_enable(bool enable) if (enable) { rtc_clk_32k_enable_common(XTAL_32K_DAC_VAL, XTAL_32K_DRES_VAL, XTAL_32K_DBIAS_VAL); } else { - /* Disable X32N and X32P pad drive external xtal */ - CLEAR_PERI_REG_MASK(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_XPD_XTAL_32K_M); -#ifdef CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT - /* Power down TOUCH */ - CLEAR_PERI_REG_MASK(RTC_IO_TOUCH_PAD9_REG, RTC_IO_TOUCH_PAD9_XPD_M); -#endif // CONFIG_ESP32_RTC_EXTERNAL_CRYSTAL_ADDITIONAL_CURRENT + CLEAR_PERI_REG_MASK(RTC_IO_XTAL_32K_PAD_REG, RTC_IO_XPD_XTAL_32K); } }