9#ifndef SDRV_I2S_DRIVER_H_
10#define SDRV_I2S_DRIVER_H_
20#define SDRV_I2S_DAIFMT_FORMAT_MASK 0x0f
23#define SDRV_I2S_DAIFMT_STANDARD_PHILLIPS 1
25#define SDRV_I2S_DAIFMT_LEFT_JUSTIFIED 2
27#define SDRV_I2S_DAIFMT_RIGHT_JUSTIFIED 3
29#define SDRV_I2S_DAIFMT_DSP_A 4
31#define SDRV_I2S_DAIFMT_DSP_B 5
34#define SDRV_I2S_DAIFMT_MASTER_MASK (0x0f0)
35#define SDRV_I2S_DAIFMT_CODEC_SLAVE (1 << 4)
36#define SDRV_I2S_DAIFMT_CODEC_MASTER (2 << 4)
38#define SDRV_I2S_DAIFMT_INV_MASK 0x0f00
39#define SDRV_I2S_DAIFMT_INV_OFFSET 8
41#define SDRV_I2S_DAIFMT_NB_NF (0 << SDRV_I2S_DAIFMT_INV_OFFSET)
43#define SDRV_I2S_DAIFMT_NB_IF (SDRV_I2S_DAIFMT_INV_OFFSET)
46#define SDRV_I2S_DAIFMT_IB_NF (3 << SDRV_I2S_DAIFMT_INV_OFFSET)
49#define SDRV_I2S_DAIFMT_IB_IF (4 << SDRV_I2S_DAIFMT_INV_OFFSET)
51#define SDRV_I2S_XFER_NUM_BUFFERS (4U)
52#define SDRV_I2S_CHNNELS_COUNT 2
53#define SDRV_I2S_CHNNELS_BYTES (SDRV_I2S_SAMPLE_WIDTH_16BITS / 8)
54#define SDRV_I2S_DMA_PERIOD_FRAME_SIZE 1024 * 4
55#define SDRV_I2S_DMA_PERIOD_BYTES \
56 SDRV_I2S_DMA_PERIOD_FRAME_SIZE *SDRV_I2S_CHNNELS_COUNT \
57 *SDRV_I2S_CHNNELS_BYTES
58#define SDRV_I2S_DMA_PERIOD_COUNT 2
59#define SDRV_I2S_DMA_BUF_TOTAL_SIZE \
60 SDRV_I2S_DMA_PERIOD_SIZE *SDRV_I2S_DMA_PERIOD_COUNT
62#define SDRV_I2S_SEL_CHNULL 0x00
63#define SDRV_I2S_SEL_DATALINE0 (0x01 << 0)
64#define SDRV_I2S_SEL_DATALINE1 (0x01 << 1)
65#define SDRV_I2S_SEL_DATALINE2 (0x01 << 2)
66#define SDRV_I2S_SEL_DATALINE3 (0x01 << 3)
67#define SDRV_I2S_SEL_DATALINE4 (0x01 << 4)
68#define SDRV_I2S_SEL_DATALINE5 (0x01 << 5)
69#define SDRV_I2S_SEL_DATALINE6 (0x01 << 6)
70#define SDRV_I2S_SEL_DATALINE7 (0x01 << 7)
SemiDrive clock generator driver header file.
SemiDrive driver common header file.
@ SDRV_STATUS_GROUP_I2S
Definition: sdrv_common.h:39
@ SDRV_STATUS_GROUP_COMMON
Definition: sdrv_common.h:22
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
SemiDrive DMA driver header file.
sdrv_dma_bus_width_e
DMA channel data width for each transaction.
Definition: sdrv_dma.h:127
sdrv_dma_channel_id_e
DMA Channel ID.
Definition: sdrv_dma.h:47
sdrv_i2s_status
Definition: sdrv_i2s.h:179
@ SDRV_I2S_STATUS_OVERRUN
Definition: sdrv_i2s.h:188
@ SDRV_I2S_STATUS_UNDERRUN
Definition: sdrv_i2s.h:190
@ SDRV_I2S_STATUS_INVALID_PARAMS
Definition: sdrv_i2s.h:185
@ SDRV_I2S_STATUS_SUCCESS
Definition: sdrv_i2s.h:181
@ SDRV_I2S_STATUS_FAIL
Definition: sdrv_i2s.h:183
sdrv_i2s_slot_width
slot width
Definition: sdrv_i2s.h:132
@ SDRV_I2S_SLOT_WIDTH_24BITS
Definition: sdrv_i2s.h:135
@ SDRV_I2S_SLOT_WIDTH_32BITS
Definition: sdrv_i2s.h:136
@ SDRV_I2S_SLOT_WIDTH_8BITS
Definition: sdrv_i2s.h:133
@ SDRV_I2S_SLOT_WIDTH_16BITS
Definition: sdrv_i2s.h:134
sdrv_i2s_mclk_sel
i2s mclk selection mclk0 or mclk1
Definition: sdrv_i2s.h:241
@ SDRV_I2S_MCLK_NULL
Definition: sdrv_i2s.h:242
@ SDRV_I2S_MCLK_0
Definition: sdrv_i2s.h:243
@ SDRV_I2S_MCLK_1
Definition: sdrv_i2s.h:244
struct sdrv_i2s_dma_data sdrv_i2s_dma_data_t
i2s dma fifo descriptions
enum i2s_channel sdrv_i2s_channel_t
i2s channel num
i2s_channel
i2s channel num
Definition: sdrv_i2s.h:77
@ SDRV_I2S_CHANNEL_NUM_11CHANS
Definition: sdrv_i2s.h:88
@ SDRV_I2S_CHANNEL_NUM_16CHANS
Definition: sdrv_i2s.h:93
@ SDRV_I2S_CHANNEL_NUM_6CHANS
Definition: sdrv_i2s.h:83
@ SDRV_I2S_CHANNEL_NUM_9CHANS
Definition: sdrv_i2s.h:86
@ SDRV_I2S_CHANNEL_NUM_12CHANS
Definition: sdrv_i2s.h:89
@ SDRV_I2S_CHANNEL_NUM_7CHANS
Definition: sdrv_i2s.h:84
@ SDRV_I2S_CHANNEL_NUM_13CHANS
Definition: sdrv_i2s.h:90
@ SDRV_I2S_CHANNEL_NUM_3CHANS
Definition: sdrv_i2s.h:80
@ SDRV_I2S_CHANNEL_NUM_10CHANS
Definition: sdrv_i2s.h:87
@ SDRV_I2S_CHANNEL_NUM_5CHANS
Definition: sdrv_i2s.h:82
@ SDRV_I2S_CHANNEL_NUM_4CHANS
Definition: sdrv_i2s.h:81
@ SDRV_I2S_CHANNEL_NUM_8CHANS
Definition: sdrv_i2s.h:85
@ SDRV_I2S_CHANNEL_NUM_15CHANS
Definition: sdrv_i2s.h:92
@ SDRV_I2S_CHANNEL_NUM_MONO
Definition: sdrv_i2s.h:78
@ SDRV_I2S_CHANNEL_NUM_STEREO
Definition: sdrv_i2s.h:79
@ SDRV_I2S_CHANNEL_NUM_14CHANS
Definition: sdrv_i2s.h:91
struct sdrv_i2s sdrv_i2s_t
i2s controller descriptions
enum sdrv_i2s_mclk_sel sdrv_i2s_mclk_sel_t
i2s mclk selection mclk0 or mclk1
void(* sdrv_i2s_callback)(sdrv_i2s_transfer_t *transfer, void *context, sdrv_i2s_status_t state)
Definition: sdrv_i2s.h:204
enum sdrv_i2s_sample_rate sdrv_i2s_sample_rate_t
i2s sample rate
enum sdrv_i2s_mclk_dir sdrv_i2s_mclk_dir_t
i2s mclk direction selection in or out
struct sdrv_i2s_params sdrv_i2s_params_t
sdrv i2s configurations params,
struct sdrv_i2s_transfer sdrv_i2s_transfer_t
sdrv i2s transfer descriptions
sdrv_i2s_clk_sync_type
sdrv i2s sync mode ,select sck and ws source
Definition: sdrv_i2s.h:153
@ SDRV_I2S_CLK_TX_RX_ASYNC
Definition: sdrv_i2s.h:159
@ SDRV_I2S_CLK_TX_SYNC
Definition: sdrv_i2s.h:155
@ SDRV_I2S_CLK_RX_SYNC
Definition: sdrv_i2s.h:157
sdrv_i2s_sample_rate
i2s sample rate
Definition: sdrv_i2s.h:100
@ SDRV_I2S_SR_22050
Definition: sdrv_i2s.h:106
@ SDRV_I2S_SR_96000
Definition: sdrv_i2s.h:112
@ SDRV_I2S_SR_NO_INIT
Definition: sdrv_i2s.h:101
@ SDRV_I2S_SR_176400
Definition: sdrv_i2s.h:113
@ SDRV_I2S_SR_16000
Definition: sdrv_i2s.h:105
@ SDRV_I2S_SR_32000
Definition: sdrv_i2s.h:107
@ SDRV_I2S_SR_192000
Definition: sdrv_i2s.h:114
@ SDRV_I2S_SR_88200
Definition: sdrv_i2s.h:111
@ SDRV_I2S_SR_48000
Definition: sdrv_i2s.h:109
@ SDRV_I2S_SR_8000
Definition: sdrv_i2s.h:103
@ SDRV_I2S_SR_11025
Definition: sdrv_i2s.h:104
@ SDRV_I2S_SR_64000
Definition: sdrv_i2s.h:110
@ SDRV_I2S_SR_5512
Definition: sdrv_i2s.h:102
@ SDRV_I2S_SR_44100
Definition: sdrv_i2s.h:108
sdrv_i2s_status_t sdrv_i2s_stop(sdrv_i2s_t *i2s, sdrv_i2s_stream_type_t type)
stop i2s transfer
sdrv_i2s_status_t sdrv_i2s_get_default_params(sdrv_i2s_t *i2s, sdrv_i2s_params_t *params, sdrv_i2s_stream_type_t type)
get i2s module default params
sdrv_i2s_status_t sdrv_i2s_create_transfer(sdrv_i2s_t *i2s, sdrv_i2s_callback callback, void *context, sdrv_i2s_stream_type_t type)
create i2s transfer and attach callback
sdrv_i2s_stream_type_t
playback capture type
Definition: sdrv_i2s.h:143
@ SDRV_I2S_STREAM_PLAYBACK
Definition: sdrv_i2s.h:144
@ SDRV_I2S_STREAM_CAPTURE
Definition: sdrv_i2s.h:145
@ SDRV_I2S_STREAM_MAX
Definition: sdrv_i2s.h:146
sdrv_i2s_status_t sdrv_i2s_set_params(sdrv_i2s_t *i2s, sdrv_i2s_params_t *params, sdrv_i2s_stream_type_t type)
set i2s params
struct sdrv_i2s_config sdrv_i2s_config_t
i2s controller configurations
sdrv_i2s_status_t sdrv_i2s_init(sdrv_i2s_t *i2s, sdrv_i2s_config_t *cfg)
initializes i2s module controller
struct sdrv_i2s_stream sdrv_i2s_stream_t
playback capture descriptions
enum sdrv_i2s_status sdrv_i2s_status_t
sdrv_i2s_sample_width
sample width
Definition: sdrv_i2s.h:121
@ SDRV_I2S_SAMPLE_WIDTH_24BITS
Definition: sdrv_i2s.h:124
@ SDRV_I2S_SAMPLE_WIDTH_32BITS
Definition: sdrv_i2s.h:125
@ SDRV_I2S_SAMPLE_WIDTH_16BITS
Definition: sdrv_i2s.h:123
@ SDRV_I2S_SAMPLE_WIDTH_8BITS
Definition: sdrv_i2s.h:122
sdrv_i2s_mclk_dir
i2s mclk direction selection in or out
Definition: sdrv_i2s.h:232
@ SDRV_I2S_MCLK_OUT
Definition: sdrv_i2s.h:234
@ SDRV_I2S_MCLK_IN
Definition: sdrv_i2s.h:233
enum sdrv_i2s_clk_sync_type sdrv_i2s_clk_sync_type_t
sdrv i2s sync mode ,select sck and ws source
struct sdrv_i2s_dma_buf sdrv_i2s_dma_buf_t
i2s dma buff descriptions,which is used to transfer data in dma mod
enum sdrv_i2s_slot_width sdrv_i2s_slot_width_t
slot width
sdrv_i2s_status_t sdrv_i2s_start(sdrv_i2s_t *i2s, sdrv_i2s_stream_type_t type)
start i2s transfer
enum sdrv_i2s_sample_width sdrv_i2s_sample_width_t
sample width
#define SDRV_I2S_XFER_NUM_BUFFERS
Definition: sdrv_i2s.h:51
sdrv_i2s_status_t sdrv_i2s_submit_transfer(sdrv_i2s_t *i2s, sdrv_i2s_transfer_t *transfer, sdrv_i2s_stream_type_t type)
submit i2s transfer in queue
Abstract clock common node for driver operate.
Definition: sdrv_ckgen.h:175
DMA channel structure.
Definition: sdrv_dma.h:554
DMA controller structure.
Definition: sdrv_dma.h:472
i2s controller configurations
Definition: sdrv_i2s.h:251
sdrv_dma_channel_id_e tx_channel_id
Definition: sdrv_i2s.h:258
paddr_t dma_base
Definition: sdrv_i2s.h:256
uint32_t irq
Definition: sdrv_i2s.h:254
sdrv_dma_channel_id_e rx_channel_id
Definition: sdrv_i2s.h:260
uint8_t rx_chsel
Definition: sdrv_i2s.h:263
sdrv_i2s_mclk_sel_t mclk_sel
Definition: sdrv_i2s.h:265
int id
Definition: sdrv_i2s.h:253
sdrv_i2s_mclk_dir_t mclk_dir
Definition: sdrv_i2s.h:264
sdrv_ckgen_node_t * clk
Definition: sdrv_i2s.h:255
paddr_t base
Definition: sdrv_i2s.h:252
uint8_t tx_chsel
Definition: sdrv_i2s.h:262
sdrv_i2s_clk_sync_type_t sync_mode
Definition: sdrv_i2s.h:261
i2s dma buff descriptions,which is used to transfer data in dma mod
Definition: sdrv_i2s.h:167
uint32_t boundary
Definition: sdrv_i2s.h:176
uint32_t period_bytes
Definition: sdrv_i2s.h:170
uint32_t appl_ptr
Definition: sdrv_i2s.h:172
uint8_t * addr
Definition: sdrv_i2s.h:168
uint32_t buffer_bytes
Definition: sdrv_i2s.h:169
uint32_t periods
Definition: sdrv_i2s.h:171
uint32_t hw_ptr
Definition: sdrv_i2s.h:174
i2s dma fifo descriptions
Definition: sdrv_i2s.h:272
paddr_t addr
Definition: sdrv_i2s.h:273
sdrv_dma_bus_width_e addr_width
Definition: sdrv_i2s.h:274
unsigned int maxburst
Definition: sdrv_i2s.h:275
unsigned int fifo_size
Definition: sdrv_i2s.h:276
sdrv i2s configurations params,
Definition: sdrv_i2s.h:211
sdrv_i2s_sample_rate_t sample_rate
Definition: sdrv_i2s.h:215
sdrv_i2s_channel_t slots
Definition: sdrv_i2s.h:219
bool usedma
Definition: sdrv_i2s.h:223
sdrv_i2s_channel_t channels
Definition: sdrv_i2s.h:213
sdrv_i2s_slot_width_t slot_width
Definition: sdrv_i2s.h:220
unsigned int rx_slot_mask
Definition: sdrv_i2s.h:222
uint8_t * dma_buff
Definition: sdrv_i2s.h:224
unsigned int period_bytes
Definition: sdrv_i2s.h:216
unsigned int periods
Definition: sdrv_i2s.h:218
uint32_t fmt
Definition: sdrv_i2s.h:212
unsigned int tx_slot_mask
Definition: sdrv_i2s.h:221
sdrv_i2s_sample_width_t sample_width
Definition: sdrv_i2s.h:214
playback capture descriptions
Definition: sdrv_i2s.h:283
bool active
Definition: sdrv_i2s.h:287
bool pack_mode
Definition: sdrv_i2s.h:291
uint8_t queue_hw
Definition: sdrv_i2s.h:300
sdrv_i2s_dma_data_t dma_data
Definition: sdrv_i2s.h:310
sdrv_dma_channel_t dma_channel
Definition: sdrv_i2s.h:308
sdrv_i2s_callback callback
Definition: sdrv_i2s.h:302
unsigned threshold
Definition: sdrv_i2s.h:295
sdrv_i2s_dma_buf_t dma_buf
Definition: sdrv_i2s.h:312
bool clk_enable
Definition: sdrv_i2s.h:289
sdrv_i2s_params_t params
Definition: sdrv_i2s.h:285
uint8_t queue_appl
Definition: sdrv_i2s.h:299
sdrv_dma_t dma_instance
Definition: sdrv_i2s.h:306
void * context
Definition: sdrv_i2s.h:304
sdrv_i2s_transfer_t queue[SDRV_I2S_XFER_NUM_BUFFERS]
Definition: sdrv_i2s.h:298
sdrv i2s transfer descriptions
Definition: sdrv_i2s.h:197
uint8_t id
Definition: sdrv_i2s.h:200
uint8_t * data
Definition: sdrv_i2s.h:198
uint32_t length
Definition: sdrv_i2s.h:199
i2s controller descriptions
Definition: sdrv_i2s.h:319
uint32_t clk_rate
Definition: sdrv_i2s.h:321
sdrv_i2s_config_t * cfg
Definition: sdrv_i2s.h:320
sdrv_i2s_stream_t stream[2]
Definition: sdrv_i2s.h:322