@@ -266,7 +266,13 @@ static uint32_t rtc_sleep_finish(void);
266266uint32_t rtc_sleep_start (uint32_t wakeup_opt , uint32_t reject_opt )
267267{
268268 REG_SET_FIELD (RTC_CNTL_WAKEUP_STATE_REG , RTC_CNTL_WAKEUP_ENA , wakeup_opt );
269- WRITE_PERI_REG (RTC_CNTL_SLP_REJECT_CONF_REG , reject_opt );
269+ /* In ESP32, only GPIO and SDIO can be as reject source during light sleep. */
270+ if (reject_opt & RTC_GPIO_TRIG_EN ) {
271+ REG_SET_BIT (RTC_CNTL_SLP_REJECT_CONF_REG , RTC_CNTL_GPIO_REJECT_EN );
272+ };
273+ if (reject_opt & RTC_SDIO_TRIG_EN ) {
274+ REG_SET_BIT (RTC_CNTL_SLP_REJECT_CONF_REG , RTC_CNTL_SDIO_REJECT_EN );
275+ };
270276
271277 SET_PERI_REG_MASK (RTC_CNTL_INT_CLR_REG ,
272278 RTC_CNTL_SLP_REJECT_INT_CLR | RTC_CNTL_SLP_WAKEUP_INT_CLR );
@@ -288,7 +294,13 @@ uint32_t rtc_sleep_start(uint32_t wakeup_opt, uint32_t reject_opt)
288294uint32_t rtc_deep_sleep_start (uint32_t wakeup_opt , uint32_t reject_opt )
289295{
290296 REG_SET_FIELD (RTC_CNTL_WAKEUP_STATE_REG , RTC_CNTL_WAKEUP_ENA , wakeup_opt );
291- WRITE_PERI_REG (RTC_CNTL_SLP_REJECT_CONF_REG , reject_opt );
297+ /* In ESP32, only GPIO and SDIO can be as reject source during deep sleep. */
298+ if (reject_opt & RTC_GPIO_TRIG_EN ) {
299+ REG_SET_BIT (RTC_CNTL_SLP_REJECT_CONF_REG , RTC_CNTL_GPIO_REJECT_EN );
300+ };
301+ if (reject_opt & RTC_SDIO_TRIG_EN ) {
302+ REG_SET_BIT (RTC_CNTL_SLP_REJECT_CONF_REG , RTC_CNTL_SDIO_REJECT_EN );
303+ };
292304
293305 SET_PERI_REG_MASK (RTC_CNTL_INT_CLR_REG ,
294306 RTC_CNTL_SLP_REJECT_INT_CLR | RTC_CNTL_SLP_WAKEUP_INT_CLR );
0 commit comments