Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
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
13#ifndef ZEPHYR_INCLUDE_DRIVERS_DAI_H_
14#define ZEPHYR_INCLUDE_DRIVERS_DAI_H_
15
29
30#include <errno.h>
31
32#include <zephyr/types.h>
33#include <zephyr/device.h>
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
40#define DAI_FORMAT_CLOCK_PROVIDER_MASK 0xf000
42#define DAI_FORMAT_PROTOCOL_MASK 0x000f
44#define DAI_FORMAT_CLOCK_INVERSION_MASK 0x0f00
45
54 DAI_CBP_CFP = (0 << 12),
56 DAI_CBC_CFP = (2 << 12),
58 DAI_CBP_CFC = (3 << 12),
60 DAI_CBC_CFC = (4 << 12),
61};
62
76
93
124
136
159
233
252
279
299
311
317
321__subsystem struct dai_driver_api {
323 int (*probe)(const struct device *dev);
325 int (*remove)(const struct device *dev);
327 int (*config_set)(const struct device *dev, const struct dai_config *cfg,
328 const void *bespoke_cfg, size_t size);
330 int (*config_get)(const struct device *dev, struct dai_config *cfg, enum dai_dir dir);
331
333 const struct dai_properties *(*get_properties)(const struct device *dev, enum dai_dir dir,
334 int stream_id);
336 int (*get_properties_copy)(const struct device *dev, enum dai_dir dir, int stream_id,
337 struct dai_properties *dst);
338
340 int (*trigger)(const struct device *dev, enum dai_dir dir, enum dai_trigger_cmd cmd);
341
343 int (*ts_config)(const struct device *dev, struct dai_ts_cfg *cfg);
345 int (*ts_start)(const struct device *dev, struct dai_ts_cfg *cfg);
347 int (*ts_stop)(const struct device *dev, struct dai_ts_cfg *cfg);
349 int (*ts_get)(const struct device *dev, struct dai_ts_cfg *cfg, struct dai_ts_data *tsd);
351 int (*config_update)(const struct device *dev, const void *bespoke_cfg, size_t size);
352};
353
355
367__syscall int dai_probe(const struct device *dev);
368
369static inline int z_impl_dai_probe(const struct device *dev)
370{
371 return DEVICE_API_GET(dai, dev)->probe(dev);
372}
373
384__syscall int dai_remove(const struct device *dev);
385
386static inline int z_impl_dai_remove(const struct device *dev)
387{
388 return DEVICE_API_GET(dai, dev)->remove(dev);
389}
390
412
413__syscall int dai_config_set(const struct device *dev, const struct dai_config *cfg,
414 const void *bespoke_cfg, size_t size);
415
416static inline int z_impl_dai_config_set(const struct device *dev, const struct dai_config *cfg,
417 const void *bespoke_cfg, size_t size)
418{
419 return DEVICE_API_GET(dai, dev)->config_set(dev, cfg, bespoke_cfg, size);
420}
421
430__syscall int dai_config_get(const struct device *dev, struct dai_config *cfg, enum dai_dir dir);
431
432static inline int z_impl_dai_config_get(const struct device *dev, struct dai_config *cfg,
433 enum dai_dir dir)
434{
435 return DEVICE_API_GET(dai, dev)->config_get(dev, cfg, dir);
436}
437
448static inline const struct dai_properties *dai_get_properties(const struct device *dev,
449 enum dai_dir dir, int stream_id)
450{
451 return DEVICE_API_GET(dai, dev)->get_properties(dev, dir, stream_id);
452}
453
469__syscall int dai_get_properties_copy(const struct device *dev, enum dai_dir dir, int stream_id,
470 struct dai_properties *dst);
471
472static inline int z_impl_dai_get_properties_copy(const struct device *dev, enum dai_dir dir,
473 int stream_id, struct dai_properties *dst)
474{
475 const struct dai_driver_api *api = DEVICE_API_GET(dai, dev);
476
477 if (!api->get_properties_copy) {
478 return -ENOSYS;
479 }
480
481 return api->get_properties_copy(dev, dir, stream_id, dst);
482}
483
501__syscall int dai_trigger(const struct device *dev, enum dai_dir dir, enum dai_trigger_cmd cmd);
502
503static inline int z_impl_dai_trigger(const struct device *dev, enum dai_dir dir,
504 enum dai_trigger_cmd cmd)
505{
506 return DEVICE_API_GET(dai, dev)->trigger(dev, dir, cmd);
507}
508
518__syscall int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg);
519
520static inline int z_impl_dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
521{
522 const struct dai_driver_api *api = DEVICE_API_GET(dai, dev);
523
524 if (!api->ts_config) {
525 return -EINVAL;
526 }
527
528 return api->ts_config(dev, cfg);
529}
530
540__syscall int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg);
541
542static inline int z_impl_dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
543{
544 const struct dai_driver_api *api = DEVICE_API_GET(dai, dev);
545
546 if (!api->ts_start) {
547 return -EINVAL;
548 }
549
550 return api->ts_start(dev, cfg);
551}
552
562__syscall int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg);
563
564static inline int z_impl_dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
565{
566 const struct dai_driver_api *api = DEVICE_API_GET(dai, dev);
567
568 if (!api->ts_stop) {
569 return -EINVAL;
570 }
571
572 return api->ts_stop(dev, cfg);
573}
574
585__syscall int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg, struct dai_ts_data *tsd);
586
587static inline int z_impl_dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg,
588 struct dai_ts_data *tsd)
589{
590 const struct dai_driver_api *api = DEVICE_API_GET(dai, dev);
591
592 if (!api->ts_get) {
593 return -EINVAL;
594 }
595
596 return api->ts_get(dev, cfg, tsd);
597}
598
618__syscall int dai_config_update(const struct device *dev, const void *bespoke_cfg, size_t size);
619
620static inline int z_impl_dai_config_update(const struct device *dev, const void *bespoke_cfg,
621 size_t size)
622{
623 const struct dai_driver_api *api = DEVICE_API_GET(dai, dev);
624
625 if (!api->config_update) {
626 return -ENOSYS;
627 }
628
629 return api->config_update(dev, bespoke_cfg, size);
630}
631
635
636#ifdef __cplusplus
637}
638#endif
639
640#include <zephyr/syscalls/dai.h>
641
642#endif /* ZEPHYR_INCLUDE_DRIVERS_DAI_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1425
System error numbers.
int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
Stops timestamping.
int dai_config_get(const struct device *dev, struct dai_config *cfg, enum dai_dir dir)
Fetch configuration information of a DAI driver.
int dai_probe(const struct device *dev)
Probe operation of DAI driver.
dai_state
Interface state.
Definition dai.h:138
int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
Starts timestamping.
int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
Configures timestamping in attached DAI.
int dai_remove(const struct device *dev)
Remove operation of DAI driver.
dai_protocol
DAI protocol.
Definition dai.h:68
int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg, struct dai_ts_data *tsd)
Gets timestamp.
int dai_trigger(const struct device *dev, enum dai_dir dir, enum dai_trigger_cmd cmd)
Send a trigger command.
dai_clock_provider
DAI clock configurations.
Definition dai.h:52
int dai_config_set(const struct device *dev, const struct dai_config *cfg, const void *bespoke_cfg, size_t size)
Configure operation of a DAI driver.
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:448
dai_type
Types of DAI.
Definition dai.h:103
int dai_config_update(const struct device *dev, const void *bespoke_cfg, size_t size)
Update DAI configuration at runtime.
int dai_get_properties_copy(const struct device *dev, enum dai_dir dir, int stream_id, struct dai_properties *dst)
Fetch properties of a DAI driver.
dai_trigger_cmd
Trigger command.
Definition dai.h:161
dai_clock_inversion
DAI clock inversion.
Definition dai.h:83
dai_dir
DAI Direction.
Definition dai.h:128
@ DAI_STATE_READY
The interface is ready to receive / transmit data.
Definition dai.h:147
@ DAI_STATE_PRE_RUNNING
The interface is clocking but not receiving / transmitting data.
Definition dai.h:151
@ DAI_STATE_ERROR
TX buffer underrun or RX buffer overrun has occurred.
Definition dai.h:157
@ DAI_STATE_NOT_READY
The interface is not ready.
Definition dai.h:145
@ DAI_STATE_RUNNING
The interface is receiving / transmitting data.
Definition dai.h:149
@ DAI_STATE_STOPPING
The interface is draining its transmit queue.
Definition dai.h:155
@ DAI_STATE_PAUSED
The interface paused.
Definition dai.h:153
@ DAI_PROTO_LEFT_J
Left Justified.
Definition dai.h:71
@ DAI_PROTO_PDM
Pulse Density Modulation.
Definition dai.h:74
@ DAI_PROTO_DSP_A
TDM, FSYNC asserted 1 BCLK early.
Definition dai.h:72
@ DAI_PROTO_RIGHT_J
Right Justified.
Definition dai.h:70
@ DAI_PROTO_I2S
I2S.
Definition dai.h:69
@ DAI_PROTO_DSP_B
TDM, FSYNC asserted at the same time as MSB.
Definition dai.h:73
@ DAI_CBP_CFP
codec BCLK provider, codec FSYNC provider
Definition dai.h:54
@ DAI_CBP_CFC
codec BCLK provider, codec FSYNC consumer
Definition dai.h:58
@ DAI_CBC_CFC
codec BCLK consumer, codec FSYNC consumer
Definition dai.h:60
@ DAI_CBC_CFP
codec BCLK consumer, codec FSYNC provider
Definition dai.h:56
@ DAI_IMX_MICFIL
i.MX PDM MICFIL
Definition dai.h:119
@ DAI_INTEL_ALH
Intel ALH.
Definition dai.h:108
@ DAI_INTEL_HDA
Intel HD/A.
Definition dai.h:107
@ DAI_LEGACY_I2S
Legacy I2S compatible with i2s.h.
Definition dai.h:104
@ DAI_INTEL_ALH_NHLT
nhlt Intel ALH
Definition dai.h:118
@ DAI_INTEL_DMIC
Intel DMIC.
Definition dai.h:106
@ DAI_AMD_DMIC
Amd DMIC.
Definition dai.h:113
@ DAI_INTEL_DMIC_NHLT
nhlt ssp
Definition dai.h:116
@ DAI_AMD_BT
Amd BT.
Definition dai.h:111
@ DAI_INTEL_UAOL
Intel UAOL.
Definition dai.h:120
@ DAI_IMX_ESAI
i.MX ESAI
Definition dai.h:110
@ DAI_INTEL_SSP_NHLT
nhlt ssp
Definition dai.h:115
@ DAI_INTEL_SSP
Intel SSP.
Definition dai.h:105
@ DAI_IMX_SAI
i.MX SAI
Definition dai.h:109
@ DAI_AMD_TDM
AMD TDM.
Definition dai.h:122
@ DAI_AMD_SP
Amd SP.
Definition dai.h:112
@ DAI_MEDIATEK_AFE
Mtk AFE.
Definition dai.h:114
@ DAI_AMD_SDW
AMD SoundWire.
Definition dai.h:121
@ DAI_INTEL_HDA_NHLT
nhlt Intel HD/A
Definition dai.h:117
@ DAI_TRIGGER_DRAIN
Empty the transmit queue.
Definition dai.h:207
@ DAI_TRIGGER_DROP
Discard the transmit / receive queue.
Definition dai.h:214
@ DAI_TRIGGER_STOP
Stop the transmission / reception of data.
Definition dai.h:184
@ DAI_TRIGGER_COPY
Copy.
Definition dai.h:231
@ DAI_TRIGGER_START
Start the transmission / reception of data.
Definition dai.h:168
@ DAI_TRIGGER_PRE_START
Optional - Pre Start the transmission / reception of data.
Definition dai.h:174
@ DAI_TRIGGER_POST_STOP
Optional - Post Stop the transmission / reception of data.
Definition dai.h:198
@ DAI_TRIGGER_PREPARE
Prepare the queues after underrun/overrun error has occurred.
Definition dai.h:220
@ DAI_TRIGGER_PAUSE
Pause the transmission / reception of data.
Definition dai.h:192
@ DAI_TRIGGER_RESET
Reset.
Definition dai.h:226
@ DAI_INVERSION_NB_NF
no BCLK inversion, no FSYNC inversion
Definition dai.h:85
@ DAI_INVERSION_IB_IF
BCLK inversion, FSYNC inversion.
Definition dai.h:91
@ DAI_INVERSION_NB_IF
no BCLK inversion, FSYNC inversion
Definition dai.h:87
@ DAI_INVERSION_IB_NF
BCLK inversion, no FSYNC inversion.
Definition dai.h:89
@ DAI_DIR_RX
Receive data.
Definition dai.h:132
@ DAI_DIR_BOTH
Both receive and transmit data.
Definition dai.h:134
@ DAI_DIR_TX
Transmit data.
Definition dai.h:130
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:60
#define ENOSYS
Function not implemented.
Definition errno.h:82
__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:257
uint32_t rate
Frame clock (WS) frequency, sampling rate.
Definition dai.h:265
uint32_t tdm_slot_group
tdm slot group number
Definition dai.h:277
uint16_t format
DAI specific data stream format.
Definition dai.h:267
uint8_t channels
Number of audio channels, words in frame.
Definition dai.h:263
uint8_t options
DAI specific configuration options.
Definition dai.h:269
enum dai_type type
Type of the DAI.
Definition dai.h:259
uint32_t dai_index
Index of the DAI.
Definition dai.h:261
size_t block_size
Size of one RX/TX memory block (buffer) in bytes.
Definition dai.h:273
uint16_t link_config
DAI specific link configuration.
Definition dai.h:275
uint8_t word_size
Number of bits representing one data word.
Definition dai.h:271
<span class="mlabel">Driver Operations</span> DAI driver operations
Definition dai.h:321
int(* remove)(const struct device *dev)
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition dai.h:325
int(* ts_start)(const struct device *dev, struct dai_ts_cfg *cfg)
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition dai.h:345
int(* ts_config)(const struct device *dev, struct dai_ts_cfg *cfg)
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition dai.h:343
int(* trigger)(const struct device *dev, enum dai_dir dir, enum dai_trigger_cmd cmd)
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition dai.h:340
int(* probe)(const struct device *dev)
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition dai.h:323
int(* config_update)(const struct device *dev, const void *bespoke_cfg, size_t size)
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition dai.h:351
int(* ts_stop)(const struct device *dev, struct dai_ts_cfg *cfg)
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition dai.h:347
int(* config_get)(const struct device *dev, struct dai_config *cfg, enum dai_dir dir)
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition dai.h:330
int(* ts_get)(const struct device *dev, struct dai_ts_cfg *cfg, struct dai_ts_data *tsd)
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition dai.h:349
int(* get_properties_copy)(const struct device *dev, enum dai_dir dir, int stream_id, struct dai_properties *dst)
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition dai.h:336
int(* config_set)(const struct device *dev, const struct dai_config *cfg, const void *bespoke_cfg, size_t size)
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition dai.h:327
DAI properties.
Definition dai.h:240
uint32_t dma_hs_id
DMA handshake id.
Definition dai.h:246
uint32_t reg_init_delay
Delay for initializing registers.
Definition dai.h:248
uint32_t fifo_address
Fifo hw address for e.g.
Definition dai.h:242
uint32_t fifo_depth
Fifo depth.
Definition dai.h:244
int stream_id
Stream ID.
Definition dai.h:250
DAI timestamp configuration.
Definition dai.h:283
int type
Type of the DAI (SSP, DMIC, HDA, etc.).
Definition dai.h:287
int dma_chan_count
Number of channels in single DMA.
Definition dai.h:297
int dma_chan_index
Used DMA channel index.
Definition dai.h:295
int dma_id
DMA instance id.
Definition dai.h:293
uint32_t walclk_rate
Rate in Hz, e.g.
Definition dai.h:285
int direction
Direction (playback/capture).
Definition dai.h:289
int index
Index for SSPx to select correct timestamp register.
Definition dai.h:291
DAI timestamp data.
Definition dai.h:303
uint64_t walclk
Wall clock.
Definition dai.h:305
uint64_t sample
Sample count.
Definition dai.h:307
uint32_t walclk_rate
Rate in Hz, e.g.
Definition dai.h:309
Runtime device structure (in ROM) per driver instance.
Definition device.h:513