Skip to content

Commit 22bc468

Browse files
committed
drivers: display: stm32_ltdc: disable unnecessary irq
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 Signed-off-by: Pavlo Hamov <[email protected]>
1 parent 6e7756a commit 22bc468

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

drivers/display/display_stm32_ltdc.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ struct display_stm32_ltdc_config {
8282
const struct pinctrl_dev_config *pctrl;
8383
void (*irq_config_func)(const struct device *dev);
8484
const struct device *display_controller;
85+
const int irqn;
8586
};
8687

8788
static void stm32_ltdc_global_isr(const struct device *dev)
@@ -223,7 +224,10 @@ static int stm32_ltdc_write(const struct device *dev, const uint16_t x,
223224

224225
data->pend_buf = pend_buf;
225226

227+
__HAL_LTDC_CLEAR_FLAG(&data->hltdc, LTDC_FLAG_LI);
228+
irq_enable(config->irqn);
226229
k_sem_take(&data->sem, K_FOREVER);
230+
irq_disable(config->irqn);
227231

228232
return 0;
229233
}
@@ -602,7 +606,6 @@ static DEVICE_API(display, stm32_ltdc_display_api) = {
602606
stm32_ltdc_global_isr, \
603607
DEVICE_DT_INST_GET(inst), \
604608
0); \
605-
irq_enable(DT_INST_IRQN(inst)); \
606609
} \
607610
static struct display_stm32_ltdc_data stm32_ltdc_data_##inst = { \
608611
.frame_buffer = STM32_LTDC_FRAME_BUFFER_ADDR(inst), \
@@ -708,6 +711,7 @@ static DEVICE_API(display, stm32_ltdc_display_api) = {
708711
.irq_config_func = stm32_ltdc_irq_config_func_##inst, \
709712
.display_controller = DEVICE_DT_GET_OR_NULL( \
710713
DT_INST_PHANDLE(inst, display_controller)), \
714+
.irqn = DT_INST_IRQN(inst), \
711715
}; \
712716
DEVICE_DT_INST_DEFINE(inst, \
713717
&stm32_ltdc_init, \

0 commit comments

Comments
 (0)