From 90050df64153aae79ae214500580ee3139245010 Mon Sep 17 00:00:00 2001 From: Chen Jichang Date: Fri, 16 May 2025 19:17:37 +0800 Subject: [PATCH] fix(jpeg): only call esp_pm APIs when CONFIG_PM_ENABLE is enabled --- components/esp_driver_jpeg/jpeg_common.c | 2 ++ components/esp_driver_jpeg/jpeg_decode.c | 6 ++++++ components/esp_driver_jpeg/jpeg_encode.c | 6 ++++++ components/esp_driver_jpeg/jpeg_private.h | 2 ++ 4 files changed, 16 insertions(+) diff --git a/components/esp_driver_jpeg/jpeg_common.c b/components/esp_driver_jpeg/jpeg_common.c index 28f9b54a2b..b194862299 100644 --- a/components/esp_driver_jpeg/jpeg_common.c +++ b/components/esp_driver_jpeg/jpeg_common.c @@ -95,9 +95,11 @@ esp_err_t jpeg_release_codec_handle(jpeg_codec_handle_t jpeg_codec) vSemaphoreDeleteWithCaps(jpeg_codec->codec_mutex); jpeg_codec->codec_mutex = NULL; } +#if CONFIG_PM_ENABLE if (jpeg_codec->pm_lock) { esp_pm_lock_delete(jpeg_codec->pm_lock); } +#endif PERIPH_RCC_ATOMIC() { jpeg_ll_enable_bus_clock(false); } diff --git a/components/esp_driver_jpeg/jpeg_decode.c b/components/esp_driver_jpeg/jpeg_decode.c index d940acc339..76c6680168 100644 --- a/components/esp_driver_jpeg/jpeg_decode.c +++ b/components/esp_driver_jpeg/jpeg_decode.c @@ -212,9 +212,11 @@ esp_err_t jpeg_decoder_process(jpeg_decoder_handle_t decoder_engine, const jpeg_ esp_err_t ret = ESP_OK; +#if CONFIG_PM_ENABLE if (decoder_engine->codec_base->pm_lock) { ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(decoder_engine->codec_base->pm_lock), TAG, "acquire pm_lock failed"); } +#endif xSemaphoreTake(decoder_engine->codec_base->codec_mutex, portMAX_DELAY); /* Reset queue */ @@ -269,18 +271,22 @@ esp_err_t jpeg_decoder_process(jpeg_decoder_handle_t decoder_engine, const jpeg_ } xSemaphoreGive(decoder_engine->codec_base->codec_mutex); +#if CONFIG_PM_ENABLE if (decoder_engine->codec_base->pm_lock) { ESP_RETURN_ON_ERROR(esp_pm_lock_release(decoder_engine->codec_base->pm_lock), TAG, "release pm_lock failed"); } +#endif return ESP_OK; err1: dma2d_force_end(decoder_engine->trans_desc, &need_yield); err2: xSemaphoreGive(decoder_engine->codec_base->codec_mutex); +#if CONFIG_PM_ENABLE if (decoder_engine->codec_base->pm_lock) { esp_pm_lock_release(decoder_engine->codec_base->pm_lock); } +#endif return ret; } diff --git a/components/esp_driver_jpeg/jpeg_encode.c b/components/esp_driver_jpeg/jpeg_encode.c index e57d62d25a..356592b4ec 100644 --- a/components/esp_driver_jpeg/jpeg_encode.c +++ b/components/esp_driver_jpeg/jpeg_encode.c @@ -148,9 +148,11 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_ esp_err_t ret = ESP_OK; +#if CONFIG_PM_ENABLE if (encoder_engine->codec_base->pm_lock) { ESP_RETURN_ON_ERROR(esp_pm_lock_acquire(encoder_engine->codec_base->pm_lock), TAG, "acquire pm_lock failed"); } +#endif jpeg_hal_context_t *hal = &encoder_engine->codec_base->hal; uint8_t *raw_buffer = (uint8_t*)encode_inbuf; uint32_t compressed_size; @@ -280,18 +282,22 @@ esp_err_t jpeg_encoder_process(jpeg_encoder_handle_t encoder_engine, const jpeg_ *out_size = compressed_size; xSemaphoreGive(encoder_engine->codec_base->codec_mutex); +#if CONFIG_PM_ENABLE if (encoder_engine->codec_base->pm_lock) { ESP_RETURN_ON_ERROR(esp_pm_lock_release(encoder_engine->codec_base->pm_lock), TAG, "release pm_lock failed"); } +#endif return ESP_OK; err1: dma2d_force_end(encoder_engine->trans_desc, &need_yield); err2: xSemaphoreGive(encoder_engine->codec_base->codec_mutex); +#if CONFIG_PM_ENABLE if (encoder_engine->codec_base->pm_lock) { esp_pm_lock_release(encoder_engine->codec_base->pm_lock); } +#endif return ret; } diff --git a/components/esp_driver_jpeg/jpeg_private.h b/components/esp_driver_jpeg/jpeg_private.h index aa409ff837..03136f3d8f 100644 --- a/components/esp_driver_jpeg/jpeg_private.h +++ b/components/esp_driver_jpeg/jpeg_private.h @@ -52,7 +52,9 @@ struct jpeg_codec_t { intr_handle_t intr_handle; // jpeg codec interrupt handler int intr_priority; // jpeg codec interrupt priority SLIST_HEAD(jpeg_isr_handler_list_, jpeg_isr_handler_) jpeg_isr_handler_list; // List for jpeg interrupt. +#if CONFIG_PM_ENABLE esp_pm_lock_handle_t pm_lock; // power manage lock +#endif }; typedef enum {