Răsfoiți Sursa

Merge branch 'bugfix/fix_nolightsleep_after_wifi_init' into 'master'

esp_wifi: fix nolightsleep after wifi init

See merge request espressif/esp-idf!13404
Jiang Jiang Jian 4 ani în urmă
părinte
comite
73adacb7d4

+ 6 - 0
components/esp_hw_support/include/esp_sleep.h

@@ -303,6 +303,12 @@ esp_err_t esp_sleep_enable_uart_wakeup(int uart_num);
  */
 esp_err_t esp_sleep_enable_wifi_wakeup(void);
 
+/**
+ * @brief Disable wakeup by WiFi MAC
+ * @return
+ *      - ESP_OK on success
+ */
+esp_err_t esp_sleep_disable_wifi_wakeup(void);
 
 /**
  * @brief Get the bit mask of GPIOs which caused wakeup (ext1)

+ 9 - 0
components/esp_hw_support/sleep_modes.c

@@ -1176,6 +1176,15 @@ esp_err_t esp_sleep_enable_wifi_wakeup(void)
 #endif
 }
 
+esp_err_t esp_sleep_disable_wifi_wakeup(void)
+{
+#if SOC_PM_SUPPORT_WIFI_WAKEUP
+    s_config.wakeup_triggers &= (~RTC_WIFI_TRIG_EN);
+    return ESP_OK;
+#else
+    return ESP_ERR_NOT_SUPPORTED;
+#endif
+}
 
 esp_sleep_wakeup_cause_t esp_sleep_get_wakeup_cause(void)
 {

+ 6 - 4
components/esp_pm/pm_impl.c

@@ -579,10 +579,12 @@ esp_err_t esp_pm_unregister_skip_light_sleep_callback(skip_light_sleep_cb_t cb)
 
 static inline bool IRAM_ATTR periph_should_skip_light_sleep(void)
 {
-    for (int i = 0; i < PERIPH_SKIP_LIGHT_SLEEP_NO; i++) {
-        if (s_periph_skip_light_sleep_cb[i]) {
-            if (s_periph_skip_light_sleep_cb[i]() == true) {
-                return true;
+    if (s_light_sleep_en) {
+        for (int i = 0; i < PERIPH_SKIP_LIGHT_SLEEP_NO; i++) {
+            if (s_periph_skip_light_sleep_cb[i]) {
+                if (s_periph_skip_light_sleep_cb[i]() == true) {
+                    return true;
+                }
             }
         }
     }

+ 1 - 1
components/esp_wifi/lib

@@ -1 +1 @@
-Subproject commit a5ce0c65ede0c36332b9cddb98693f436ee0345d
+Subproject commit e4415c13367c1dcff2d8e3d7e34052391c71eeff

+ 1 - 0
components/esp_wifi/src/wifi_init.c

@@ -150,6 +150,7 @@ esp_err_t esp_wifi_deinit(void)
 #if SOC_WIFI_HW_TSF
     esp_pm_unregister_skip_light_sleep_callback(esp_wifi_internal_is_tsf_active);
     esp_pm_unregister_inform_out_light_sleep_overhead_callback(esp_wifi_internal_update_light_sleep_wake_ahead_time);
+    esp_sleep_disable_wifi_wakeup();
 #endif
 #if CONFIG_ESP_WIFI_SLP_IRAM_OPT
     esp_pm_unregister_light_sleep_default_params_config_callback();