]> granicus.if.org Git - esp-idf/commitdiff
soc/rtc: don't power down BIAS_I2C along with APLL if other PLL is used
authorIvan Grokhotkov <ivan@espressif.com>
Mon, 20 Nov 2017 07:27:16 +0000 (15:27 +0800)
committerIvan Grokhotkov <ivan@espressif.com>
Mon, 20 Nov 2017 07:27:16 +0000 (15:27 +0800)
If enable == false, and SOC_CLK_SEL == PLL, the code would would
erroneously set RTC_CNTL_BIAS_I2C_FORCE_PD. This change fixes the logic.

components/soc/esp32/rtc_clk.c

index aafae93263ff22b1fd4ff8f39cb28d731f19e619..7c8d9609a4da34f7dd36a5fae85d2e599604b2dc 100644 (file)
@@ -168,11 +168,12 @@ void rtc_clk_apll_enable(bool enable, uint32_t sdm0, uint32_t sdm1, uint32_t sdm
 {
     REG_SET_FIELD(RTC_CNTL_ANA_CONF_REG, RTC_CNTL_PLLA_FORCE_PD, enable ? 0 : 1);
     REG_SET_FIELD(RTC_CNTL_ANA_CONF_REG, RTC_CNTL_PLLA_FORCE_PU, enable ? 1 : 0);
-    REG_SET_FIELD(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BIAS_I2C_FORCE_PD, enable ? 0 : 1);
 
     if (!enable &&
         REG_GET_FIELD(RTC_CNTL_CLK_CONF_REG, RTC_CNTL_SOC_CLK_SEL) != RTC_CNTL_SOC_CLK_SEL_PLL) {
-        SET_PERI_REG_MASK(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BIAS_I2C_FORCE_PD);
+        REG_SET_BIT(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BIAS_I2C_FORCE_PD);
+    } else {
+        REG_CLR_BIT(RTC_CNTL_OPTIONS0_REG, RTC_CNTL_BIAS_I2C_FORCE_PD);
     }
 
     if (enable) {