mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-01 03:34:32 +02:00
fix(mcpwm): only call esp_pm APIs when CONFIG_PM_ENABLE is enabled
This commit is contained in:
@@ -52,7 +52,7 @@ static void mcpwm_cap_timer_unregister_from_group(mcpwm_cap_timer_t *cap_timer)
|
||||
|
||||
static esp_err_t mcpwm_cap_timer_destroy(mcpwm_cap_timer_t *cap_timer)
|
||||
{
|
||||
#if !SOC_MCPWM_CAPTURE_CLK_FROM_GROUP
|
||||
#if !SOC_MCPWM_CAPTURE_CLK_FROM_GROUP && CONFIG_PM_ENABLE
|
||||
if (cap_timer->pm_lock) {
|
||||
ESP_RETURN_ON_ERROR(esp_pm_lock_delete(cap_timer->pm_lock), TAG, "delete pm_lock failed");
|
||||
}
|
||||
@@ -87,7 +87,9 @@ esp_err_t mcpwm_new_capture_timer(const mcpwm_capture_timer_config_t *config, mc
|
||||
#if SOC_MCPWM_CAPTURE_CLK_FROM_GROUP
|
||||
// capture timer clock source is same as the MCPWM group
|
||||
ESP_GOTO_ON_ERROR(mcpwm_select_periph_clock(group, (soc_module_clk_t)clk_src), err, TAG, "set group clock failed");
|
||||
#if CONFIG_PM_ENABLE
|
||||
cap_timer->pm_lock = group->pm_lock;
|
||||
#endif
|
||||
uint32_t periph_src_clk_hz = 0;
|
||||
ESP_GOTO_ON_ERROR(esp_clk_tree_src_get_freq_hz((soc_module_clk_t)clk_src, ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED, &periph_src_clk_hz), err, TAG, "get clock source freq failed");
|
||||
ESP_LOGD(TAG, "periph_src_clk_hz %"PRIu32"", periph_src_clk_hz);
|
||||
@@ -157,9 +159,11 @@ esp_err_t mcpwm_capture_timer_enable(mcpwm_cap_timer_handle_t cap_timer)
|
||||
{
|
||||
ESP_RETURN_ON_FALSE(cap_timer, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
|
||||
ESP_RETURN_ON_FALSE(cap_timer->fsm == MCPWM_CAP_TIMER_FSM_INIT, ESP_ERR_INVALID_STATE, TAG, "timer not in init state");
|
||||
#if CONFIG_PM_ENABLE
|
||||
if (cap_timer->pm_lock) {
|
||||
ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(cap_timer->pm_lock), TAG, "acquire pm_lock failed");
|
||||
}
|
||||
#endif
|
||||
cap_timer->fsm = MCPWM_CAP_TIMER_FSM_ENABLE;
|
||||
return ESP_OK;
|
||||
}
|
||||
@@ -168,9 +172,11 @@ esp_err_t mcpwm_capture_timer_disable(mcpwm_cap_timer_handle_t cap_timer)
|
||||
{
|
||||
ESP_RETURN_ON_FALSE(cap_timer, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
|
||||
ESP_RETURN_ON_FALSE(cap_timer->fsm == MCPWM_CAP_TIMER_FSM_ENABLE, ESP_ERR_INVALID_STATE, TAG, "timer not in enable state");
|
||||
#if CONFIG_PM_ENABLE
|
||||
if (cap_timer->pm_lock) {
|
||||
ESP_RETURN_ON_ERROR(esp_pm_lock_release(cap_timer->pm_lock), TAG, "release pm_lock failed");
|
||||
}
|
||||
#endif
|
||||
cap_timer->fsm = MCPWM_CAP_TIMER_FSM_INIT;
|
||||
return ESP_OK;
|
||||
}
|
||||
|
@@ -120,9 +120,11 @@ void mcpwm_release_group_handle(mcpwm_group_t *group)
|
||||
MCPWM_RCC_ATOMIC() {
|
||||
mcpwm_ll_enable_bus_clock(group_id, false);
|
||||
}
|
||||
#if CONFIG_PM_ENABLE
|
||||
if (group->pm_lock) {
|
||||
esp_pm_lock_delete(group->pm_lock);
|
||||
}
|
||||
#endif
|
||||
#if MCPWM_USE_RETENTION_LINK
|
||||
const periph_retention_module_t module_id = mcpwm_reg_retention_info[group_id].retention_module;
|
||||
if (sleep_retention_is_module_created(module_id)) {
|
||||
|
@@ -83,7 +83,9 @@ struct mcpwm_group_t {
|
||||
portMUX_TYPE spinlock; // group level spinlock
|
||||
uint32_t prescale; // group prescale
|
||||
uint32_t resolution_hz; // MCPWM group clock resolution: clock_src_hz / clock_prescale = resolution_hz
|
||||
#if CONFIG_PM_ENABLE
|
||||
esp_pm_lock_handle_t pm_lock; // power management lock
|
||||
#endif
|
||||
soc_module_clk_t clk_src; // peripheral source clock
|
||||
mcpwm_cap_timer_t *cap_timer; // mcpwm capture timers
|
||||
mcpwm_timer_t *timers[SOC_MCPWM_TIMERS_PER_GROUP]; // mcpwm timer array
|
||||
@@ -254,7 +256,9 @@ struct mcpwm_cap_timer_t {
|
||||
portMUX_TYPE spinlock; // spin lock, to prevent concurrently accessing capture timer level resources, including registers
|
||||
uint32_t resolution_hz; // resolution of capture timer
|
||||
mcpwm_cap_timer_fsm_t fsm; // driver FSM
|
||||
#if CONFIG_PM_ENABLE
|
||||
esp_pm_lock_handle_t pm_lock; // power management lock
|
||||
#endif
|
||||
mcpwm_cap_channel_t *cap_channels[SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER]; // capture channel array
|
||||
};
|
||||
|
||||
|
@@ -247,13 +247,15 @@ esp_err_t mcpwm_timer_enable(mcpwm_timer_handle_t timer)
|
||||
{
|
||||
ESP_RETURN_ON_FALSE(timer, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
|
||||
ESP_RETURN_ON_FALSE(timer->fsm == MCPWM_TIMER_FSM_INIT, ESP_ERR_INVALID_STATE, TAG, "timer not in init state");
|
||||
mcpwm_group_t *group = timer->group;
|
||||
[[maybe_unused]] mcpwm_group_t *group = timer->group;
|
||||
if (timer->intr) {
|
||||
ESP_RETURN_ON_ERROR(esp_intr_enable(timer->intr), TAG, "enable interrupt failed");
|
||||
}
|
||||
#if CONFIG_PM_ENABLE
|
||||
if (group->pm_lock) {
|
||||
ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(group->pm_lock), TAG, "acquire pm lock failed");
|
||||
}
|
||||
#endif
|
||||
timer->fsm = MCPWM_TIMER_FSM_ENABLE;
|
||||
return ESP_OK;
|
||||
}
|
||||
@@ -262,13 +264,15 @@ esp_err_t mcpwm_timer_disable(mcpwm_timer_handle_t timer)
|
||||
{
|
||||
ESP_RETURN_ON_FALSE(timer, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
|
||||
ESP_RETURN_ON_FALSE(timer->fsm == MCPWM_TIMER_FSM_ENABLE, ESP_ERR_INVALID_STATE, TAG, "timer not in enable state");
|
||||
mcpwm_group_t *group = timer->group;
|
||||
[[maybe_unused]] mcpwm_group_t *group = timer->group;
|
||||
if (timer->intr) {
|
||||
ESP_RETURN_ON_ERROR(esp_intr_disable(timer->intr), TAG, "disable interrupt failed");
|
||||
}
|
||||
#if CONFIG_PM_ENABLE
|
||||
if (group->pm_lock) {
|
||||
ESP_RETURN_ON_ERROR(esp_pm_lock_release(group->pm_lock), TAG, "acquire pm lock failed");
|
||||
}
|
||||
#endif
|
||||
timer->fsm = MCPWM_TIMER_FSM_INIT;
|
||||
return ESP_OK;
|
||||
}
|
||||
|
Reference in New Issue
Block a user