drivers: i2s: change the stm32 DMA in the driver to use dts
This commit moves DMA parameters previously hard coded in the driver to the dts. Signed-off-by: Song Qiang <songqiang1304521@gmail.com> Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
This commit is contained in:
parent
9561785ea7
commit
f0d3ee52fb
8 changed files with 149 additions and 45 deletions
|
@ -7,6 +7,7 @@
|
|||
#include <string.h>
|
||||
#include <drivers/dma.h>
|
||||
#include <drivers/i2s.h>
|
||||
#include <dt-bindings/dma/stm32_dma.h>
|
||||
#include <soc.h>
|
||||
#include <clock_control/stm32_clock_control.h>
|
||||
#include <drivers/clock_control.h>
|
||||
|
@ -838,23 +839,29 @@ static struct device *get_dev_from_tx_dma_channel(u32_t dma_channel)
|
|||
return active_dma_tx_channel[dma_channel];
|
||||
}
|
||||
|
||||
#define I2S_DMA_CHANNEL_INIT(index, dir, dir_cap) \
|
||||
/* src_dev and dest_dev should be 'MEM' or 'PERIPH'. */
|
||||
#define I2S_DMA_CHANNEL_INIT(index, dir, dir_cap, src_dev, dest_dev) \
|
||||
.dir = { \
|
||||
.dma_channel = I2S##index##_DMA_CHAN_##dir_cap, \
|
||||
.dma_name = DT_I2S_##index##_DMA_CONTROLLER_##dir_cap, \
|
||||
.dma_channel = DT_I2S_##index##_DMA_CHANNEL_##dir_cap, \
|
||||
.dma_cfg = { \
|
||||
.block_count = 1, \
|
||||
.dma_slot = I2S##index##_DMA_SLOT_##dir_cap, \
|
||||
.dma_slot = DT_I2S_##index##_DMA_SLOT_##dir_cap, \
|
||||
.channel_direction = PERIPHERAL_TO_MEMORY, \
|
||||
.source_data_size = 1, /* 16bit default */ \
|
||||
.dest_data_size = 1, /* 16bit default */ \
|
||||
.source_burst_length = 0, /* SINGLE transfer */ \
|
||||
.dest_burst_length = 1, \
|
||||
.channel_priority = I2S_DMA_CHAN_PRIORITY, \
|
||||
.channel_priority = STM32_DMA_CONFIG_PRIORITY( \
|
||||
DT_I2S_##index##_DMA_CHANNEL_CONFIG_##dir_cap), \
|
||||
.dma_callback = dma_##dir##_callback, \
|
||||
}, \
|
||||
.src_addr_increment = I2S_DMA_SRC_ADDR_INC_##dir_cap, \
|
||||
.dst_addr_increment = I2S_DMA_DST_ADDR_INC_##dir_cap, \
|
||||
.fifo_threshold = I2S_DMA_FIFO_THRESHOLD, \
|
||||
.src_addr_increment = STM32_DMA_CONFIG_##src_dev##_ADDR_INC( \
|
||||
DT_I2S_##index##_DMA_CHANNEL_CONFIG_##dir_cap), \
|
||||
.dst_addr_increment = STM32_DMA_CONFIG_##dest_dev##_ADDR_INC( \
|
||||
DT_I2S_##index##_DMA_CHANNEL_CONFIG_##dir_cap), \
|
||||
.fifo_threshold = STM32_DMA_FEATURES_FIFO_THRESHOLD( \
|
||||
DT_I2S_##index##_DMA_FEATURES_##dir_cap), \
|
||||
.stream_start = dir##_stream_start, \
|
||||
.stream_disable = dir##_stream_disable, \
|
||||
.queue_drop = dir##_queue_drop, \
|
||||
|
@ -881,9 +888,8 @@ struct queue_item rx_##index##_ring_buf[CONFIG_I2S_STM32_RX_BLOCK_COUNT + 1];\
|
|||
struct queue_item tx_##index##_ring_buf[CONFIG_I2S_STM32_TX_BLOCK_COUNT + 1];\
|
||||
\
|
||||
static struct i2s_stm32_data i2s_stm32_data_##index = { \
|
||||
.dma_name = I2S##index##_DMA_CHAN_RX, \
|
||||
I2S_DMA_CHANNEL_INIT(index, rx, RX), \
|
||||
I2S_DMA_CHANNEL_INIT(index, tx, TX), \
|
||||
I2S_DMA_CHANNEL_INIT(index, rx, RX, PERIPH, MEM), \
|
||||
I2S_DMA_CHANNEL_INIT(index, tx, TX, MEM, PERIPH), \
|
||||
}; \
|
||||
DEVICE_AND_API_INIT(i2s_stm32_##index, DT_I2S_##index##_NAME, \
|
||||
&i2s_stm32_initialize, &i2s_stm32_data_##index, \
|
||||
|
|
|
@ -49,40 +49,6 @@
|
|||
|
||||
#endif /* CONFIG_I2S_STM32_USE_PLLI2S_ENABLE */
|
||||
|
||||
#ifdef CONFIG_SOC_SERIES_STM32F4X
|
||||
#define I2S1_DMA_NAME CONFIG_DMA_2_NAME
|
||||
#define I2S1_DMA_CHAN_RX 2
|
||||
#define I2S1_DMA_SLOT_RX 3
|
||||
#define I2S1_DMA_CHAN_TX 3
|
||||
#define I2S1_DMA_SLOT_TX 3
|
||||
#define I2S2_DMA_NAME CONFIG_DMA_1_NAME
|
||||
#define I2S2_DMA_CHAN_RX 3
|
||||
#define I2S2_DMA_SLOT_RX 0
|
||||
#define I2S2_DMA_CHAN_TX 4
|
||||
#define I2S2_DMA_SLOT_TX 0
|
||||
#define I2S3_DMA_NAME CONFIG_DMA_1_NAME
|
||||
#define I2S3_DMA_CHAN_RX 0
|
||||
#define I2S3_DMA_SLOT_RX 0
|
||||
#define I2S3_DMA_CHAN_TX 5
|
||||
#define I2S3_DMA_SLOT_TX 0
|
||||
#define I2S4_DMA_NAME CONFIG_DMA_2_NAME
|
||||
#define I2S4_DMA_CHAN_RX 0
|
||||
#define I2S4_DMA_SLOT_RX 4
|
||||
#define I2S4_DMA_CHAN_TX 1
|
||||
#define I2S4_DMA_SLOT_TX 4
|
||||
#define I2S5_DMA_NAME CONFIG_DMA_2_NAME
|
||||
#define I2S5_DMA_CHAN_RX 5
|
||||
#define I2S5_DMA_SLOT_RX 7
|
||||
#define I2S5_DMA_CHAN_TX 6
|
||||
#define I2S5_DMA_SLOT_TX 7
|
||||
#define I2S_DMA_SRC_ADDR_INC_RX 0
|
||||
#define I2S_DMA_DST_ADDR_INC_RX 1
|
||||
#define I2S_DMA_SRC_ADDR_INC_TX 1
|
||||
#define I2S_DMA_DST_ADDR_INC_TX 0
|
||||
#define I2S_DMA_FIFO_THRESHOLD 3 /* Full FIFO */
|
||||
#define I2S_DMA_CHAN_PRIORITY 0
|
||||
#endif
|
||||
|
||||
#define DEV_CFG(dev) \
|
||||
(const struct i2s_stm32_cfg * const)((dev)->config->config_info)
|
||||
#define DEV_DATA(dev) \
|
||||
|
@ -112,6 +78,8 @@ struct i2s_stm32_cfg {
|
|||
struct stream {
|
||||
s32_t state;
|
||||
struct k_sem sem;
|
||||
|
||||
const char *dma_name;
|
||||
u32_t dma_channel;
|
||||
struct dma_config dma_cfg;
|
||||
u8_t priority;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue