Zephyr Project API  3.4.0
A Scalable Open Source RTOS
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
185 uint32_t fifo_address; /* fifo address */
186 uint32_t fifo_depth; /* fifo depth */
187 uint32_t dma_hs_id; /* dma handshake id */
188 uint32_t reg_init_delay; /* delay for register init */
189 int stream_id; /* stream id */
190};
191
215};
216
218 uint32_t walclk_rate; /* Rate in Hz, e.g. 19200000 */
219 int type; /* SSP, DMIC, HDA, etc. */
220 int direction; /* Playback, capture */
221 int index; /* For SSPx to select correct timestamp register */
222 int dma_id; /* DMA instance id */
223 int dma_chan_index; /* Used DMA channel */
224 int dma_chan_count; /* Channels in single DMA */
225};
226
228 uint64_t walclk; /* Wall clock */
229 uint64_t sample; /* Sample count */
230 uint32_t walclk_rate; /* Rate in Hz, e.g. 19200000 */
231};
232
238__subsystem struct dai_driver_api {
239 int (*probe)(const struct device *dev);
240 int (*remove)(const struct device *dev);
241 int (*config_set)(const struct device *dev, const struct dai_config *cfg,
242 const void *bespoke_cfg);
243 int (*config_get)(const struct device *dev, struct dai_config *cfg,
244 enum dai_dir dir);
245
246 const struct dai_properties *(*get_properties)(const struct device *dev,
247 enum dai_dir dir,
248 int stream_id);
249
250 int (*trigger)(const struct device *dev, enum dai_dir dir,
251 enum dai_trigger_cmd cmd);
252
253 /* optional methods */
254 int (*ts_config)(const struct device *dev, struct dai_ts_cfg *cfg);
255 int (*ts_start)(const struct device *dev, struct dai_ts_cfg *cfg);
256 int (*ts_stop)(const struct device *dev, struct dai_ts_cfg *cfg);
257 int (*ts_get)(const struct device *dev, struct dai_ts_cfg *cfg,
258 struct dai_ts_data *tsd);
259};
260
276static inline int dai_probe(const struct device *dev)
277{
278 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
279
280 return api->probe(dev);
281}
282
293static inline int dai_remove(const struct device *dev)
294{
295 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
296
297 return api->remove(dev);
298}
299
320static inline int dai_config_set(const struct device *dev,
321 const struct dai_config *cfg,
322 const void *bespoke_cfg)
323{
324 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
325
326 return api->config_set(dev, cfg, bespoke_cfg);
327}
328
337static inline int dai_config_get(const struct device *dev,
338 struct dai_config *cfg,
339 enum dai_dir dir)
340{
341 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
342
343 return api->config_get(dev, cfg, dir);
344}
345
356static inline const struct dai_properties *dai_get_properties(const struct device *dev,
357 enum dai_dir dir,
358 int stream_id)
359{
360 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
361
362 return api->get_properties(dev, dir, stream_id);
363}
364
382static inline int dai_trigger(const struct device *dev,
383 enum dai_dir dir,
384 enum dai_trigger_cmd cmd)
385{
386 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
387
388 return api->trigger(dev, dir, cmd);
389}
390
400static inline int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
401{
402 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
403
404 if (!api->ts_config)
405 return -EINVAL;
406
407 return api->ts_config(dev, cfg);
408}
409
419static inline int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
420{
421 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
422
423 if (!api->ts_start)
424 return -EINVAL;
425
426 return api->ts_start(dev, cfg);
427}
428
438static inline int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
439{
440 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
441
442 if (!api->ts_stop)
443 return -EINVAL;
444
445 return api->ts_stop(dev, cfg);
446}
447
458static inline int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg,
459 struct dai_ts_data *tsd)
460{
461 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
462
463 if (!api->ts_get)
464 return -EINVAL;
465
466 return api->ts_get(dev, cfg, tsd);
467}
468
473#ifdef __cplusplus
474}
475#endif
476
477#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:320
dai_state
Definition: dai.h:76
static int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
Definition: dai.h:419
static int dai_probe(const struct device *dev)
Probe operation of DAI driver.
Definition: dai.h:276
static int dai_remove(const struct device *dev)
Remove operation of DAI driver.
Definition: dai.h:293
static int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
Definition: dai.h:438
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:337
static int dai_trigger(const struct device *dev, enum dai_dir dir, enum dai_trigger_cmd cmd)
Send a trigger command.
Definition: dai.h:382
static int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
Definition: dai.h:400
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:356
dai_type
Types of DAI.
Definition: dai.h:45
dai_trigger_cmd
Definition: dai.h:99
static int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg, struct dai_ts_data *tsd)
Definition: dai.h:458
dai_dir
Dai Direction.
Definition: dai.h:66
@ DAI_STATE_READY
Definition: dai.h:85
@ DAI_STATE_PRE_RUNNING
Definition: dai.h:89
@ DAI_STATE_ERROR
Definition: dai.h:95
@ DAI_STATE_NOT_READY
The interface is not ready.
Definition: dai.h:83
@ DAI_STATE_RUNNING
Definition: dai.h:87
@ DAI_STATE_STOPPING
Definition: dai.h:93
@ DAI_STATE_PAUSED
Definition: dai.h:91
@ DAI_INTEL_ALH
Definition: dai.h:50
@ DAI_INTEL_HDA
Definition: dai.h:49
@ DAI_LEGACY_I2S
Definition: dai.h:46
@ DAI_INTEL_ALH_NHLT
Definition: dai.h:60
@ DAI_INTEL_DMIC
Definition: dai.h:48
@ DAI_AMD_DMIC
Definition: dai.h:55
@ DAI_INTEL_DMIC_NHLT
Definition: dai.h:58
@ DAI_AMD_BT
Definition: dai.h:53
@ DAI_IMX_ESAI
Definition: dai.h:52
@ DAI_INTEL_SSP_NHLT
Definition: dai.h:57
@ DAI_INTEL_SSP
Definition: dai.h:47
@ DAI_IMX_SAI
Definition: dai.h:51
@ DAI_AMD_SP
Definition: dai.h:54
@ DAI_MEDIATEK_AFE
Definition: dai.h:56
@ DAI_INTEL_HDA_NHLT
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
Definition: dai.h:68
@ DAI_DIR_BOTH
Definition: dai.h:72
@ DAI_DIR_TX
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
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
Generic Dai interface configuration options.
Definition: dai.h:205
uint32_t rate
Definition: dai.h:209
uint16_t format
Definition: dai.h:210
uint8_t channels
Definition: dai.h:208
uint8_t options
Definition: dai.h:211
enum dai_type type
Definition: dai.h:206
uint32_t dai_index
Definition: dai.h:207
size_t block_size
Definition: dai.h:213
uint16_t link_config
Definition: dai.h:214
uint8_t word_size
Definition: dai.h:212
Properties of DAI.
Definition: dai.h:184
uint32_t dma_hs_id
Definition: dai.h:187
uint32_t reg_init_delay
Definition: dai.h:188
uint32_t fifo_address
Definition: dai.h:185
uint32_t fifo_depth
Definition: dai.h:186
int stream_id
Definition: dai.h:189
Definition: dai.h:217
int type
Definition: dai.h:219
int dma_chan_count
Definition: dai.h:224
int dma_chan_index
Definition: dai.h:223
int dma_id
Definition: dai.h:222
uint32_t walclk_rate
Definition: dai.h:218
int direction
Definition: dai.h:220
int index
Definition: dai.h:221
Definition: dai.h:227
uint64_t walclk
Definition: dai.h:228
uint64_t sample
Definition: dai.h:229
uint32_t walclk_rate
Definition: dai.h:230
Runtime device structure (in ROM) per driver instance.
Definition: device.h:380
const void * api
Definition: device.h:386