13#ifndef ZEPHYR_INCLUDE_DRIVERS_I2S_H_
14#define ZEPHYR_INCLUDE_DRIVERS_I2S_H_
44#define I2S_FMT_DATA_FORMAT_SHIFT 0
46#define I2S_FMT_DATA_FORMAT_MASK (0x7 << I2S_FMT_DATA_FORMAT_SHIFT)
65#define I2S_FMT_DATA_FORMAT_I2S (0 << I2S_FMT_DATA_FORMAT_SHIFT)
84#define I2S_FMT_DATA_FORMAT_PCM_SHORT (1 << I2S_FMT_DATA_FORMAT_SHIFT)
104#define I2S_FMT_DATA_FORMAT_PCM_LONG (2 << I2S_FMT_DATA_FORMAT_SHIFT)
125#define I2S_FMT_DATA_FORMAT_LEFT_JUSTIFIED (3 << I2S_FMT_DATA_FORMAT_SHIFT)
146#define I2S_FMT_DATA_FORMAT_RIGHT_JUSTIFIED (4 << I2S_FMT_DATA_FORMAT_SHIFT)
149#define I2S_FMT_DATA_ORDER_MSB (0 << 3)
151#define I2S_FMT_DATA_ORDER_LSB BIT(3)
153#define I2S_FMT_DATA_ORDER_INV I2S_FMT_DATA_ORDER_LSB
156#define I2S_FMT_CLK_FORMAT_SHIFT 4
158#define I2S_FMT_CLK_FORMAT_MASK (0x3 << I2S_FMT_CLK_FORMAT_SHIFT)
161#define I2S_FMT_BIT_CLK_INV BIT(4)
163#define I2S_FMT_FRAME_CLK_INV BIT(5)
166#define I2S_FMT_CLK_NF_NB (0 << I2S_FMT_CLK_FORMAT_SHIFT)
168#define I2S_FMT_CLK_NF_IB (1 << I2S_FMT_CLK_FORMAT_SHIFT)
170#define I2S_FMT_CLK_IF_NB (2 << I2S_FMT_CLK_FORMAT_SHIFT)
172#define I2S_FMT_CLK_IF_IB (3 << I2S_FMT_CLK_FORMAT_SHIFT)
178#define I2S_OPT_BIT_CLK_CONT (0 << 0)
180#define I2S_OPT_BIT_CLK_GATED BIT(0)
182#define I2S_OPT_BIT_CLK_CONTROLLER (0 << 1)
184#define I2S_OPT_BIT_CLK_TARGET BIT(1)
186#define I2S_OPT_FRAME_CLK_CONTROLLER (0 << 2)
188#define I2S_OPT_FRAME_CLK_TARGET BIT(2)
191#define I2S_OPT_BIT_CLK_MASTER I2S_OPT_BIT_CLK_CONTROLLER __DEPRECATED_MACRO
193#define I2S_OPT_BIT_CLK_SLAVE I2S_OPT_BIT_CLK_TARGET __DEPRECATED_MACRO
195#define I2S_OPT_FRAME_CLK_MASTER I2S_OPT_FRAME_CLK_CONTROLLER __DEPRECATED_MACRO
197#define I2S_OPT_FRAME_CLK_SLAVE I2S_OPT_FRAME_CLK_TARGET __DEPRECATED_MACRO
204#define I2S_OPT_LOOPBACK BIT(7)
214#define I2S_OPT_PINGPONG BIT(6)
331__subsystem
struct i2s_driver_api {
336 int (*read)(
const struct device *dev,
void **mem_block,
size_t *size);
337 int (*write)(
const struct device *dev,
void *mem_block,
size_t size);
370static inline int z_impl_i2s_configure(
const struct device *dev,
374 const struct i2s_driver_api *api =
375 (
const struct i2s_driver_api *)dev->
api;
377 return api->configure(dev, dir, cfg);
391 const struct i2s_driver_api *api =
392 (
const struct i2s_driver_api *)dev->
api;
394 return api->config_get(dev, dir);
431 const struct i2s_driver_api *api =
432 (
const struct i2s_driver_api *)dev->
api;
434 return api->read(dev, mem_block, size);
492 const struct i2s_driver_api *api =
493 (
const struct i2s_driver_api *)dev->
api;
495 return api->write(dev, mem_block, size);
539static inline int z_impl_i2s_trigger(
const struct device *dev,
543 const struct i2s_driver_api *api =
544 (
const struct i2s_driver_api *)dev->
api;
546 return api->trigger(dev, dir,
cmd);
557#include <zephyr/syscalls/i2s.h>
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
static int i2s_write(const struct device *dev, void *mem_block, size_t size)
Write data to the TX queue.
Definition i2s.h:489
uint8_t i2s_fmt_t
I2S data stream format options.
Definition i2s.h:41
int i2s_configure(const struct device *dev, enum i2s_dir dir, const struct i2s_config *cfg)
Configure operation of a host I2S controller.
int i2s_buf_read(const struct device *dev, void *buf, size_t *size)
Read data from the RX queue into a provided buffer.
static int i2s_read(const struct device *dev, void **mem_block, size_t *size)
Read data from the RX queue.
Definition i2s.h:428
i2s_dir
I2C Direction.
Definition i2s.h:219
i2s_state
Interface state.
Definition i2s.h:229
int i2s_buf_write(const struct device *dev, void *buf, size_t size)
Write data to the TX queue from a provided buffer.
int i2s_trigger(const struct device *dev, enum i2s_dir dir, enum i2s_trigger_cmd cmd)
Send a trigger command.
i2s_trigger_cmd
Trigger command.
Definition i2s.h:248
static const struct i2s_config * i2s_config_get(const struct device *dev, enum i2s_dir dir)
Fetch configuration information of a host I2S controller.
Definition i2s.h:388
uint8_t i2s_opt_t
I2S configuration options.
Definition i2s.h:175
@ I2S_DIR_BOTH
Both receive and transmit data.
Definition i2s.h:225
@ I2S_DIR_TX
Transmit data.
Definition i2s.h:223
@ I2S_DIR_RX
Receive data.
Definition i2s.h:221
@ I2S_STATE_ERROR
TX buffer underrun or RX buffer overrun has occurred.
Definition i2s.h:244
@ I2S_STATE_NOT_READY
The interface is not ready.
Definition i2s.h:236
@ I2S_STATE_STOPPING
The interface is draining its transmit queue.
Definition i2s.h:242
@ I2S_STATE_RUNNING
The interface is receiving / transmitting data.
Definition i2s.h:240
@ I2S_STATE_READY
The interface is ready to receive / transmit data.
Definition i2s.h:238
@ I2S_TRIGGER_STOP
Stop the transmission / reception of data.
Definition i2s.h:265
@ I2S_TRIGGER_PREPARE
Prepare the queues after underrun/overrun error has occurred.
Definition i2s.h:287
@ I2S_TRIGGER_START
Start the transmission / reception of data.
Definition i2s.h:255
@ I2S_TRIGGER_DRAIN
Empty the transmit queue.
Definition i2s.h:274
@ I2S_TRIGGER_DROP
Discard the transmit / receive queue.
Definition i2s.h:281
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__INT32_TYPE__ int32_t
Definition stdint.h:74
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Interface configuration options.
Definition i2s.h:305
struct k_mem_slab * mem_slab
Memory slab to store RX/TX data.
Definition i2s.h:317
i2s_opt_t options
Configuration options as defined by I2S_OPT_* constants.
Definition i2s.h:313
uint8_t word_size
Number of bits representing one data word.
Definition i2s.h:307
size_t block_size
Size of one RX/TX memory block (buffer) in bytes.
Definition i2s.h:319
i2s_fmt_t format
Data stream format as defined by I2S_FMT_* constants.
Definition i2s.h:311
int32_t timeout
Read/Write timeout.
Definition i2s.h:323
uint32_t frame_clk_freq
Frame clock (WS) frequency, this is sampling rate.
Definition i2s.h:315
uint8_t channels
Number of words per frame.
Definition i2s.h:309