@@ -283,11 +283,17 @@ static int i2s_stm32_sai_dma_init(const struct device *dev)
283283 }
284284
285285 hdma -> Instance = STM32_DMA_GET_INSTANCE (stream -> reg , stream -> dma_channel );
286+ #if defined(CONFIG_SOC_SERIES_STM32F4X )
287+ hdma -> Init .Channel = dma_cfg .dma_slot * DMA_CHANNEL_1 ;
288+ #else
286289 hdma -> Init .Request = dma_cfg .dma_slot ;
290+ #endif
287291 hdma -> Init .Mode = DMA_NORMAL ;
288292
289293#if defined(CONFIG_SOC_SERIES_STM32H7X ) || defined(CONFIG_SOC_SERIES_STM32L4X ) || \
290- defined(CONFIG_SOC_SERIES_STM32G4X ) || defined(CONFIG_SOC_SERIES_STM32L5X )
294+ defined(CONFIG_SOC_SERIES_STM32G4X ) || defined(CONFIG_SOC_SERIES_STM32L5X ) || \
295+ defined(CONFIG_SOC_SERIES_STM32F4X )
296+
291297 hdma -> Init .PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD ;
292298 hdma -> Init .MemDataAlignment = DMA_MDATAALIGN_HALFWORD ;
293299 hdma -> Init .Priority = DMA_PRIORITY_HIGH ;
@@ -304,15 +310,16 @@ static int i2s_stm32_sai_dma_init(const struct device *dev)
304310 hdma -> Init .TransferEventMode = DMA_TCEM_BLOCK_TRANSFER ;
305311#endif
306312
307- #if defined(CONFIG_SOC_SERIES_STM32H7X )
313+ #if defined(CONFIG_SOC_SERIES_STM32H7X ) || defined( CONFIG_SOC_SERIES_STM32F4X )
308314 hdma -> Init .FIFOMode = DMA_FIFOMODE_DISABLE ;
309315#endif
310316
311317 if (stream -> dma_cfg .channel_direction == (enum dma_channel_direction )MEMORY_TO_PERIPHERAL ) {
312318 hdma -> Init .Direction = DMA_MEMORY_TO_PERIPH ;
313319
314320#if !defined(CONFIG_SOC_SERIES_STM32H7X ) && !defined(CONFIG_SOC_SERIES_STM32L4X ) && \
315- !defined(CONFIG_SOC_SERIES_STM32G4X ) && !defined(CONFIG_SOC_SERIES_STM32L5X )
321+ !defined(CONFIG_SOC_SERIES_STM32G4X ) && !defined(CONFIG_SOC_SERIES_STM32L5X ) && \
322+ !defined(CONFIG_SOC_SERIES_STM32F4X )
316323 hdma -> Init .SrcInc = DMA_SINC_INCREMENTED ;
317324 hdma -> Init .DestInc = DMA_DINC_FIXED ;
318325#endif
@@ -322,7 +329,8 @@ static int i2s_stm32_sai_dma_init(const struct device *dev)
322329 hdma -> Init .Direction = DMA_PERIPH_TO_MEMORY ;
323330
324331#if !defined(CONFIG_SOC_SERIES_STM32H7X ) && !defined(CONFIG_SOC_SERIES_STM32L4X ) && \
325- !defined(CONFIG_SOC_SERIES_STM32G4X ) && !defined(CONFIG_SOC_SERIES_STM32L5X )
332+ !defined(CONFIG_SOC_SERIES_STM32G4X ) && !defined(CONFIG_SOC_SERIES_STM32L5X ) && \
333+ !defined(CONFIG_SOC_SERIES_STM32F4X )
326334 hdma -> Init .SrcInc = DMA_SINC_FIXED ;
327335 hdma -> Init .DestInc = DMA_DINC_INCREMENTED ;
328336#endif
@@ -342,7 +350,8 @@ static int i2s_stm32_sai_dma_init(const struct device *dev)
342350 return - EIO ;
343351 }
344352#elif !defined(CONFIG_SOC_SERIES_STM32H7X ) && !defined(CONFIG_SOC_SERIES_STM32L4X ) && \
345- !defined(CONFIG_SOC_SERIES_STM32G4X ) && !defined(CONFIG_SOC_SERIES_STM32L5X )
353+ !defined(CONFIG_SOC_SERIES_STM32G4X ) && !defined(CONFIG_SOC_SERIES_STM32L5X ) && \
354+ !defined(CONFIG_SOC_SERIES_STM32F4X )
346355 if (HAL_DMA_ConfigChannelAttributes (& dev_data -> hdma , DMA_CHANNEL_NPRIV ) != HAL_OK ) {
347356 LOG_ERR ("HAL_DMA_ConfigChannelAttributes: <Failed>" );
348357 return - EIO ;
@@ -458,7 +467,7 @@ static int i2s_stm32_sai_configure(const struct device *dev, enum i2s_dir dir,
458467 }
459468
460469 /* Control of MCLK output from SAI configuration is not possible on STM32L4xx MCUs */
461- #if !defined(CONFIG_SOC_SERIES_STM32L4X )
470+ #if !defined(CONFIG_SOC_SERIES_STM32L4X ) && !defined( CONFIG_SOC_SERIES_STM32F4X )
462471 if (cfg -> mclk_enable && stream -> master ) {
463472 hsai -> Init .MckOutput = SAI_MCK_OUTPUT_ENABLE ;
464473 } else {
@@ -472,7 +481,7 @@ static int i2s_stm32_sai_configure(const struct device *dev, enum i2s_dir dir,
472481 hsai -> Init .NoDivider = SAI_MASTERDIVIDER_ENABLE ;
473482
474483 /* MckOverSampling is not supported by all STM32L4xx MCUs */
475- #if !defined(CONFIG_SOC_SERIES_STM32L4X )
484+ #if !defined(CONFIG_SOC_SERIES_STM32L4X ) && !defined( CONFIG_SOC_SERIES_STM32F4X )
476485 if (cfg -> mclk_div == (enum mclk_divider )MCLK_DIV_256 ) {
477486 hsai -> Init .MckOverSampling = SAI_MCK_OVERSAMPLING_DISABLE ;
478487 } else {
0 commit comments