@@ -1925,8 +1925,9 @@ uint64_t esp_sleep_get_gpio_wakeup_status(void)
19251925
19261926static void gpio_deep_sleep_wakeup_prepare (void )
19271927{
1928- for (gpio_num_t gpio_idx = GPIO_NUM_0 ; gpio_idx < GPIO_NUM_MAX ; gpio_idx ++ ) {
1929- if (((1ULL << gpio_idx ) & s_config .gpio_wakeup_mask ) == 0 ) {
1928+ uint32_t valid_wake_io_mask = SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK ;
1929+ for (gpio_num_t gpio_idx = __builtin_ctz (valid_wake_io_mask ); valid_wake_io_mask >> gpio_idx ; gpio_idx ++ ) {
1930+ if ((s_config .gpio_wakeup_mask & BIT64 (gpio_idx )) == 0 ) {
19301931 continue ;
19311932 }
19321933#if CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS
@@ -1952,13 +1953,18 @@ esp_err_t esp_deep_sleep_enable_gpio_wakeup(uint64_t gpio_pin_mask, esp_deepslee
19521953 }
19531954 gpio_int_type_t intr_type = ((mode == ESP_GPIO_WAKEUP_GPIO_LOW ) ? GPIO_INTR_LOW_LEVEL : GPIO_INTR_HIGH_LEVEL );
19541955 esp_err_t err = ESP_OK ;
1955- for (gpio_num_t gpio_idx = GPIO_NUM_0 ; gpio_idx < GPIO_NUM_MAX ; gpio_idx ++ , gpio_pin_mask >>= 1 ) {
1956- if ((gpio_pin_mask & 1 ) == 0 ) {
1957- continue ;
1956+ uint64_t invalid_io_mask = gpio_pin_mask & ~SOC_GPIO_DEEP_SLEEP_WAKE_VALID_GPIO_MASK ;
1957+ if (invalid_io_mask != 0 ) {
1958+ for (gpio_num_t gpio_idx = __builtin_ctzll (invalid_io_mask ); invalid_io_mask >> gpio_idx ; gpio_idx ++ ) {
1959+ if (invalid_io_mask & BIT64 (gpio_idx )) {
1960+ ESP_LOGE (TAG , "gpio %d is an invalid deep sleep wakeup IO" , gpio_idx );
1961+ return ESP_ERR_INVALID_ARG ;
1962+ }
19581963 }
1959- if (!esp_sleep_is_valid_wakeup_gpio (gpio_idx )) {
1960- ESP_LOGE (TAG , "gpio %d is an invalid deep sleep wakeup IO" , gpio_idx );
1961- return ESP_ERR_INVALID_ARG ;
1964+ }
1965+ for (gpio_num_t gpio_idx = __builtin_ctzll (gpio_pin_mask ); gpio_pin_mask >> gpio_idx ; gpio_idx ++ ) {
1966+ if ((gpio_pin_mask & BIT64 (gpio_idx )) == 0 ) {
1967+ continue ;
19621968 }
19631969 err = gpio_deep_sleep_wakeup_enable (gpio_idx , intr_type );
19641970
0 commit comments