@@ -1967,8 +1967,9 @@ uint64_t esp_sleep_get_gpio_wakeup_status(void)
19671967
19681968static void gpio_deep_sleep_wakeup_prepare (void )
19691969{
1970- for (gpio_num_t gpio_idx = GPIO_NUM_0 ; gpio_idx < GPIO_NUM_MAX ; gpio_idx ++ ) {
1971- if (((1ULL << gpio_idx ) & s_config .gpio_wakeup_mask ) == 0 ) {
1970+ uint32_t valid_wake_io_mask = SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK ;
1971+ for (gpio_num_t gpio_idx = __builtin_ctz (valid_wake_io_mask ); valid_wake_io_mask >> gpio_idx ; gpio_idx ++ ) {
1972+ if ((s_config .gpio_wakeup_mask & BIT64 (gpio_idx )) == 0 ) {
19721973 continue ;
19731974 }
19741975#if CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS
@@ -1994,13 +1995,20 @@ esp_err_t esp_deep_sleep_enable_gpio_wakeup(uint64_t gpio_pin_mask, esp_deepslee
19941995 }
19951996 gpio_int_type_t intr_type = ((mode == ESP_GPIO_WAKEUP_GPIO_LOW ) ? GPIO_INTR_LOW_LEVEL : GPIO_INTR_HIGH_LEVEL );
19961997 esp_err_t err = ESP_OK ;
1997- for (gpio_num_t gpio_idx = GPIO_NUM_0 ; gpio_idx < GPIO_NUM_MAX ; gpio_idx ++ , gpio_pin_mask >>= 1 ) {
1998- if ((gpio_pin_mask & 1 ) == 0 ) {
1999- continue ;
1998+
1999+ uint64_t invalid_io_mask = gpio_pin_mask & ~SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK ;
2000+ if (invalid_io_mask != 0 ) {
2001+ for (gpio_num_t gpio_idx = __builtin_ctzll (invalid_io_mask ); invalid_io_mask >> gpio_idx ; gpio_idx ++ ) {
2002+ if (invalid_io_mask & BIT64 (gpio_idx )) {
2003+ ESP_LOGE (TAG , "gpio %d is an invalid deep sleep wakeup IO" , gpio_idx );
2004+ return ESP_ERR_INVALID_ARG ;
2005+ }
20002006 }
2001- if (!esp_sleep_is_valid_wakeup_gpio (gpio_idx )) {
2002- ESP_LOGE (TAG , "gpio %d is an invalid deep sleep wakeup IO" , gpio_idx );
2003- return ESP_ERR_INVALID_ARG ;
2007+ }
2008+
2009+ for (gpio_num_t gpio_idx = __builtin_ctzll (gpio_pin_mask ); gpio_pin_mask >> gpio_idx ; gpio_idx ++ ) {
2010+ if ((gpio_pin_mask & BIT64 (gpio_idx )) == 0 ) {
2011+ continue ;
20042012 }
20052013 err = gpio_deep_sleep_wakeup_enable (gpio_idx , intr_type );
20062014
0 commit comments