diff --git a/components/driver/i2s.c b/components/driver/i2s.c index 4cac2e8d2..4c1f834bd 100644 --- a/components/driver/i2s.c +++ b/components/driver/i2s.c @@ -1087,13 +1087,19 @@ esp_err_t i2s_driver_install(i2s_port_t i2s_num, const i2s_config_t *i2s_config, p_i2s_obj[i2s_num]->channel_num = i2s_config->channel_format < I2S_CHANNEL_FMT_ONLY_RIGHT ? 2 : 1; #ifdef CONFIG_PM_ENABLE - err = esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, "i2s_driver", - &p_i2s_obj[i2s_num]->pm_lock); + if (i2s_config->use_apll) { + err = esp_pm_lock_create(ESP_PM_NO_LIGHT_SLEEP, 0, "i2s_driver", &p_i2s_obj[i2s_num]->pm_lock); + } else { + err = esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, "i2s_driver", &p_i2s_obj[i2s_num]->pm_lock); + } if (err != ESP_OK) { + free(p_i2s_obj[i2s_num]); + p_i2s_obj[i2s_num] = NULL; + ESP_LOGE(I2S_TAG, "I2S pm lock error"); return err; } - #endif //CONFIG_PM_ENABLE + //To make sure hardware is enabled before any hardware register operations. if (i2s_num == I2S_NUM_1) { periph_module_enable(PERIPH_I2S1_MODULE); @@ -1166,7 +1172,7 @@ esp_err_t i2s_driver_uninstall(i2s_port_t i2s_num) } #ifdef CONFIG_PM_ENABLE if (p_i2s_obj[i2s_num]->pm_lock) { - esp_pm_lock_delete(p_i2s_obj[i2s_num]->pm_lock); + esp_pm_lock_delete(p_i2s_obj[i2s_num]->pm_lock); } #endif diff --git a/docs/en/api-reference/system/power_management.rst b/docs/en/api-reference/system/power_management.rst index 9380a8d88..6c7446a1d 100644 --- a/docs/en/api-reference/system/power_management.rst +++ b/docs/en/api-reference/system/power_management.rst @@ -108,6 +108,10 @@ Currently, the following peripheral drivers are aware of DFS and will use ``ESP_ - SPI master +- I2C + +- I2S (If APLL clock is used then it will use ``ESP_PM_NO_LIGHT_SLEEP`` lock) + - SDMMC The following drivers will hold ``ESP_PM_APB_FREQ_MAX`` lock while the driver is enabled: @@ -124,10 +128,6 @@ The following drivers will hold ``ESP_PM_APB_FREQ_MAX`` lock while the driver is The following peripheral drivers are not aware of DFS yet. Applications need to acquire/release locks when necessary: -- I2C - -- I2S - - MCPWM - PCNT