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);
}
#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
- 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:
The following peripheral drivers are not aware of DFS yet. Applications need to acquire/release locks when necessary:
-- I2C
-
-- I2S
-
- MCPWM
- PCNT