Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
dai.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_DRIVERS_DAI_H_
13#define ZEPHYR_INCLUDE_DRIVERS_DAI_H_
14
27#include <errno.h>
28
29#include <zephyr/types.h>
30#include <zephyr/device.h>
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
61};
62
66enum dai_dir {
73};
74
96};
97
170};
171
189};
190
214};
215
223 int type;
227 int index;
234};
235
246};
247
253__subsystem struct dai_driver_api {
254 int (*probe)(const struct device *dev);
255 int (*remove)(const struct device *dev);
256 int (*config_set)(const struct device *dev, const struct dai_config *cfg,
257 const void *bespoke_cfg);
258 int (*config_get)(const struct device *dev, struct dai_config *cfg,
259 enum dai_dir dir);
260
261 const struct dai_properties *(*get_properties)(const struct device *dev,
262 enum dai_dir dir,
263 int stream_id);
264
265 int (*trigger)(const struct device *dev, enum dai_dir dir,
266 enum dai_trigger_cmd cmd);
267
268 /* optional methods */
269 int (*ts_config)(const struct device *dev, struct dai_ts_cfg *cfg);
270 int (*ts_start)(const struct device *dev, struct dai_ts_cfg *cfg);
271 int (*ts_stop)(const struct device *dev, struct dai_ts_cfg *cfg);
272 int (*ts_get)(const struct device *dev, struct dai_ts_cfg *cfg,
273 struct dai_ts_data *tsd);
274};
275
291static inline int dai_probe(const struct device *dev)
292{
293 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
294
295 return api->probe(dev);
296}
297
308static inline int dai_remove(const struct device *dev)
309{
310 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
311
312 return api->remove(dev);
313}
314
335static inline int dai_config_set(const struct device *dev,
336 const struct dai_config *cfg,
337 const void *bespoke_cfg)
338{
339 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
340
341 return api->config_set(dev, cfg, bespoke_cfg);
342}
343
352static inline int dai_config_get(const struct device *dev,
353 struct dai_config *cfg,
354 enum dai_dir dir)
355{
356 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
357
358 return api->config_get(dev, cfg, dir);
359}
360
371static inline const struct dai_properties *dai_get_properties(const struct device *dev,
372 enum dai_dir dir,
373 int stream_id)
374{
375 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
376
377 return api->get_properties(dev, dir, stream_id);
378}
379
397static inline int dai_trigger(const struct device *dev,
398 enum dai_dir dir,
399 enum dai_trigger_cmd cmd)
400{
401 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
402
403 return api->trigger(dev, dir, cmd);
404}
405
415static inline int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
416{
417 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
418
419 if (!api->ts_config)
420 return -EINVAL;
421
422 return api->ts_config(dev, cfg);
423}
424
434static inline int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
435{
436 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
437
438 if (!api->ts_start)
439 return -EINVAL;
440
441 return api->ts_start(dev, cfg);
442}
443
453static inline int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
454{
455 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
456
457 if (!api->ts_stop)
458 return -EINVAL;
459
460 return api->ts_stop(dev, cfg);
461}
462
473static inline int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg,
474 struct dai_ts_data *tsd)
475{
476 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
477
478 if (!api->ts_get)
479 return -EINVAL;
480
481 return api->ts_get(dev, cfg, tsd);
482}
483
488#ifdef __cplusplus
489}
490#endif
491
492#endif /* ZEPHYR_INCLUDE_DRIVERS_DAI_H_ */
System error numbers.
static int dai_config_set(const struct device *dev, const struct dai_config *cfg, const void *bespoke_cfg)
Configure operation of a DAI driver.
Definition: dai.h:335
dai_state
Interface state.
Definition: dai.h:76
static int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
Starts timestamping.
Definition: dai.h:434
static int dai_probe(const struct device *dev)
Probe operation of DAI driver.
Definition: dai.h:291
static int dai_remove(const struct device *dev)
Remove operation of DAI driver.
Definition: dai.h:308
static int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
Stops timestamping.
Definition: dai.h:453
static int dai_config_get(const struct device *dev, struct dai_config *cfg, enum dai_dir dir)
Fetch configuration information of a DAI driver.
Definition: dai.h:352
static int dai_trigger(const struct device *dev, enum dai_dir dir, enum dai_trigger_cmd cmd)
Send a trigger command.
Definition: dai.h:397
static int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
Configures timestamping in attached DAI.
Definition: dai.h:415
static const struct dai_properties * dai_get_properties(const struct device *dev, enum dai_dir dir, int stream_id)
Fetch properties of a DAI driver.
Definition: dai.h:371
dai_type
Types of DAI.
Definition: dai.h:45
dai_trigger_cmd
Trigger command.
Definition: dai.h:99
static int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg, struct dai_ts_data *tsd)
Gets timestamp.
Definition: dai.h:473
dai_dir
DAI Direction.
Definition: dai.h:66
@ DAI_STATE_READY
The interface is ready to receive / transmit data.
Definition: dai.h:85
@ DAI_STATE_PRE_RUNNING
The interface is clocking but not receiving / transmitting data.
Definition: dai.h:89
@ DAI_STATE_ERROR
TX buffer underrun or RX buffer overrun has occurred.
Definition: dai.h:95
@ DAI_STATE_NOT_READY
The interface is not ready.
Definition: dai.h:83
@ DAI_STATE_RUNNING
The interface is receiving / transmitting data.
Definition: dai.h:87
@ DAI_STATE_STOPPING
The interface is draining its transmit queue.
Definition: dai.h:93
@ DAI_STATE_PAUSED
The interface paused.
Definition: dai.h:91
@ DAI_INTEL_ALH
Intel ALH.
Definition: dai.h:50
@ DAI_INTEL_HDA
Intel HD/A.
Definition: dai.h:49
@ DAI_LEGACY_I2S
Legacy I2S compatible with i2s.h.
Definition: dai.h:46
@ DAI_INTEL_ALH_NHLT
nhlt Intel ALH
Definition: dai.h:60
@ DAI_INTEL_DMIC
Intel DMIC.
Definition: dai.h:48
@ DAI_AMD_DMIC
Amd DMIC.
Definition: dai.h:55
@ DAI_INTEL_DMIC_NHLT
nhlt ssp
Definition: dai.h:58
@ DAI_AMD_BT
Amd BT.
Definition: dai.h:53
@ DAI_IMX_ESAI
i.MX ESAI
Definition: dai.h:52
@ DAI_INTEL_SSP_NHLT
nhlt ssp
Definition: dai.h:57
@ DAI_INTEL_SSP
Intel SSP.
Definition: dai.h:47
@ DAI_IMX_SAI
i.MX SAI
Definition: dai.h:51
@ DAI_AMD_SP
Amd SP.
Definition: dai.h:54
@ DAI_MEDIATEK_AFE
Mtk AFE.
Definition: dai.h:56
@ DAI_INTEL_HDA_NHLT
nhlt Intel HD/A
Definition: dai.h:59
@ DAI_TRIGGER_DRAIN
Empty the transmit queue.
Definition: dai.h:145
@ DAI_TRIGGER_DROP
Discard the transmit / receive queue.
Definition: dai.h:152
@ DAI_TRIGGER_STOP
Stop the transmission / reception of data.
Definition: dai.h:122
@ DAI_TRIGGER_COPY
Copy.
Definition: dai.h:169
@ DAI_TRIGGER_START
Start the transmission / reception of data.
Definition: dai.h:106
@ DAI_TRIGGER_PRE_START
Optional - Pre Start the transmission / reception of data.
Definition: dai.h:112
@ DAI_TRIGGER_POST_STOP
Optional - Post Stop the transmission / reception of data.
Definition: dai.h:136
@ DAI_TRIGGER_PREPARE
Prepare the queues after underrun/overrun error has occurred.
Definition: dai.h:158
@ DAI_TRIGGER_PAUSE
Pause the transmission / reception of data.
Definition: dai.h:130
@ DAI_TRIGGER_RESET
Reset.
Definition: dai.h:164
@ DAI_DIR_RX
Receive data.
Definition: dai.h:68
@ DAI_DIR_BOTH
Both receive and transmit data.
Definition: dai.h:72
@ DAI_DIR_TX
Transmit data.
Definition: dai.h:70
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition: ft8xx_reference_api.h:153
#define EINVAL
Invalid argument.
Definition: errno.h:61
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT64_TYPE__ uint64_t
Definition: stdint.h:91
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Main DAI config structure.
Definition: dai.h:195
uint32_t rate
Frame clock (WS) frequency, sampling rate.
Definition: dai.h:203
uint16_t format
DAI specific data stream format.
Definition: dai.h:205
uint8_t channels
Number of audio channels, words in frame.
Definition: dai.h:201
uint8_t options
DAI specific configuration options.
Definition: dai.h:207
enum dai_type type
Type of the DAI.
Definition: dai.h:197
uint32_t dai_index
Index of the DAI.
Definition: dai.h:199
size_t block_size
Size of one RX/TX memory block (buffer) in bytes.
Definition: dai.h:211
uint16_t link_config
DAI specific link configuration.
Definition: dai.h:213
uint8_t word_size
Number of bits representing one data word.
Definition: dai.h:209
DAI properties.
Definition: dai.h:178
uint32_t dma_hs_id
DMA handshake id.
Definition: dai.h:184
uint32_t reg_init_delay
Delay for initializing registers.
Definition: dai.h:186
uint32_t fifo_address
Fifo hw address for e.g.
Definition: dai.h:180
uint32_t fifo_depth
Fifo depth.
Definition: dai.h:182
int stream_id
Stream ID.
Definition: dai.h:188
DAI timestamp configuration.
Definition: dai.h:219
int type
Type of the DAI (SSP, DMIC, HDA, etc.).
Definition: dai.h:223
int dma_chan_count
Number of channels in single DMA.
Definition: dai.h:233
int dma_chan_index
Used DMA channel index.
Definition: dai.h:231
int dma_id
DMA instance id.
Definition: dai.h:229
uint32_t walclk_rate
Rate in Hz, e.g.
Definition: dai.h:221
int direction
Direction (playback/capture)
Definition: dai.h:225
int index
Index for SSPx to select correct timestamp register.
Definition: dai.h:227
DAI timestamp data.
Definition: dai.h:239
uint64_t walclk
Wall clock.
Definition: dai.h:241
uint64_t sample
Sample count.
Definition: dai.h:243
uint32_t walclk_rate
Rate in Hz, e.g.
Definition: dai.h:245
Runtime device structure (in ROM) per driver instance.
Definition: device.h:381
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:387