From fc26efc7eb0869b72821ea552a8ae2b1af0fa448 Mon Sep 17 00:00:00 2001 From: Pavlo Hamov Date: Tue, 3 Jun 2025 05:45:29 +0200 Subject: [PATCH] drivers: display: stm32_ltdc: mask irq if necessary LTDC interrupt routine is used to reload frame buffer pointer once full frame is finished flushing. As long as there is no need to change buffer - there is no need to disturb CPU. Thus: Enable LTDC interrupt only when new buffer is pending Signed-off-by: Pavlo Hamov --- drivers/display/display_stm32_ltdc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/display/display_stm32_ltdc.c b/drivers/display/display_stm32_ltdc.c index e1e6ab82604b..de40b25defab 100644 --- a/drivers/display/display_stm32_ltdc.c +++ b/drivers/display/display_stm32_ltdc.c @@ -223,8 +223,13 @@ static int stm32_ltdc_write(const struct device *dev, const uint16_t x, data->pend_buf = pend_buf; + __HAL_LTDC_CLEAR_FLAG(&data->hltdc, LTDC_FLAG_LI); + __HAL_LTDC_ENABLE_IT(&data->hltdc, LTDC_IT_LI); + k_sem_take(&data->sem, K_FOREVER); + __HAL_LTDC_DISABLE_IT(&data->hltdc, LTDC_IT_LI); + return 0; } @@ -479,7 +484,6 @@ static int stm32_ltdc_init(const struct device *dev) LTDC->LIPCR = 0U; __HAL_LTDC_CLEAR_FLAG(&data->hltdc, LTDC_FLAG_LI); - __HAL_LTDC_ENABLE_IT(&data->hltdc, LTDC_IT_LI); return 0; }