Zephyr API Documentation 4.0.0
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#ifndef ZEPHYR_INCLUDE_DRIVERS_DAI_H_
13#define ZEPHYR_INCLUDE_DRIVERS_DAI_H_
14
29#include <errno.h>
30
31#include <zephyr/types.h>
32#include <zephyr/device.h>
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
39#define DAI_FORMAT_CLOCK_PROVIDER_MASK 0xf000
41#define DAI_FORMAT_PROTOCOL_MASK 0x000f
43#define DAI_FORMAT_CLOCK_INVERSION_MASK 0x0f00
44
53 DAI_CBP_CFP = (0 << 12),
55 DAI_CBC_CFP = (2 << 12),
57 DAI_CBP_CFC = (3 << 12),
59 DAI_CBC_CFC = (4 << 12),
60};
61
75
92
119
131
154
228
247
274
294
306
312__subsystem struct dai_driver_api {
313 int (*probe)(const struct device *dev);
314 int (*remove)(const struct device *dev);
315 int (*config_set)(const struct device *dev, const struct dai_config *cfg,
316 const void *bespoke_cfg);
317 int (*config_get)(const struct device *dev, struct dai_config *cfg,
318 enum dai_dir dir);
319
320 const struct dai_properties *(*get_properties)(const struct device *dev,
321 enum dai_dir dir,
322 int stream_id);
323
324 int (*trigger)(const struct device *dev, enum dai_dir dir,
325 enum dai_trigger_cmd cmd);
326
327 /* optional methods */
328 int (*ts_config)(const struct device *dev, struct dai_ts_cfg *cfg);
329 int (*ts_start)(const struct device *dev, struct dai_ts_cfg *cfg);
330 int (*ts_stop)(const struct device *dev, struct dai_ts_cfg *cfg);
331 int (*ts_get)(const struct device *dev, struct dai_ts_cfg *cfg,
332 struct dai_ts_data *tsd);
333 int (*config_update)(const struct device *dev, const void *bespoke_cfg,
334 size_t size);
335};
336
352static inline int dai_probe(const struct device *dev)
353{
354 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
355
356 return api->probe(dev);
357}
358
369static inline int dai_remove(const struct device *dev)
370{
371 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
372
373 return api->remove(dev);
374}
375
396static inline int dai_config_set(const struct device *dev,
397 const struct dai_config *cfg,
398 const void *bespoke_cfg)
399{
400 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
401
402 return api->config_set(dev, cfg, bespoke_cfg);
403}
404
413static inline int dai_config_get(const struct device *dev,
414 struct dai_config *cfg,
415 enum dai_dir dir)
416{
417 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
418
419 return api->config_get(dev, cfg, dir);
420}
421
432static inline const struct dai_properties *dai_get_properties(const struct device *dev,
433 enum dai_dir dir,
434 int stream_id)
435{
436 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
437
438 return api->get_properties(dev, dir, stream_id);
439}
440
458static inline int dai_trigger(const struct device *dev,
459 enum dai_dir dir,
460 enum dai_trigger_cmd cmd)
461{
462 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
463
464 return api->trigger(dev, dir, cmd);
465}
466
476static inline int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
477{
478 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
479
480 if (!api->ts_config) {
481 return -EINVAL;
482 }
483
484 return api->ts_config(dev, cfg);
485}
486
496static inline int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
497{
498 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
499
500 if (!api->ts_start) {
501 return -EINVAL;
502 }
503
504 return api->ts_start(dev, cfg);
505}
506
516static inline int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
517{
518 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
519
520 if (!api->ts_stop) {
521 return -EINVAL;
522 }
523
524 return api->ts_stop(dev, cfg);
525}
526
537static inline int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg,
538 struct dai_ts_data *tsd)
539{
540 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
541
542 if (!api->ts_get) {
543 return -EINVAL;
544 }
545
546 return api->ts_get(dev, cfg, tsd);
547}
548
568static inline int dai_config_update(const struct device *dev,
569 const void *bespoke_cfg,
570 size_t size)
571{
572 const struct dai_driver_api *api = (const struct dai_driver_api *)dev->api;
573
574 if (!api->config_update) {
575 return -ENOSYS;
576 }
577
578 return api->config_update(dev, bespoke_cfg, size);
579}
580
585#ifdef __cplusplus
586}
587#endif
588
589#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:396
dai_state
Interface state.
Definition dai.h:133
static int dai_ts_start(const struct device *dev, struct dai_ts_cfg *cfg)
Starts timestamping.
Definition dai.h:496
dai_protocol
DAI protocol.
Definition dai.h:67
static int dai_probe(const struct device *dev)
Probe operation of DAI driver.
Definition dai.h:352
static int dai_config_update(const struct device *dev, const void *bespoke_cfg, size_t size)
Update DAI configuration at runtime.
Definition dai.h:568
dai_clock_provider
DAI clock configurations.
Definition dai.h:51
static int dai_remove(const struct device *dev)
Remove operation of DAI driver.
Definition dai.h:369
static int dai_ts_stop(const struct device *dev, struct dai_ts_cfg *cfg)
Stops timestamping.
Definition dai.h:516
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:413
static int dai_trigger(const struct device *dev, enum dai_dir dir, enum dai_trigger_cmd cmd)
Send a trigger command.
Definition dai.h:458
static int dai_ts_config(const struct device *dev, struct dai_ts_cfg *cfg)
Configures timestamping in attached DAI.
Definition dai.h:476
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:432
dai_type
Types of DAI.
Definition dai.h:102
dai_trigger_cmd
Trigger command.
Definition dai.h:156
dai_clock_inversion
DAI clock inversion.
Definition dai.h:82
static int dai_ts_get(const struct device *dev, struct dai_ts_cfg *cfg, struct dai_ts_data *tsd)
Gets timestamp.
Definition dai.h:537
dai_dir
DAI Direction.
Definition dai.h:123
@ DAI_STATE_READY
The interface is ready to receive / transmit data.
Definition dai.h:142
@ DAI_STATE_PRE_RUNNING
The interface is clocking but not receiving / transmitting data.
Definition dai.h:146
@ DAI_STATE_ERROR
TX buffer underrun or RX buffer overrun has occurred.
Definition dai.h:152
@ DAI_STATE_NOT_READY
The interface is not ready.
Definition dai.h:140
@ DAI_STATE_RUNNING
The interface is receiving / transmitting data.
Definition dai.h:144
@ DAI_STATE_STOPPING
The interface is draining its transmit queue.
Definition dai.h:150
@ DAI_STATE_PAUSED
The interface paused.
Definition dai.h:148
@ DAI_PROTO_LEFT_J
Left Justified.
Definition dai.h:70
@ DAI_PROTO_PDM
Pulse Density Modulation.
Definition dai.h:73
@ DAI_PROTO_DSP_A
TDM, FSYNC asserted 1 BCLK early.
Definition dai.h:71
@ DAI_PROTO_RIGHT_J
Right Justified.
Definition dai.h:69
@ DAI_PROTO_I2S
I2S.
Definition dai.h:68
@ DAI_PROTO_DSP_B
TDM, FSYNC asserted at the same time as MSB.
Definition dai.h:72
@ DAI_CBP_CFP
codec BLCK provider, codec FSYNC provider
Definition dai.h:53
@ DAI_CBP_CFC
codec BCLK consumer, codec FSYNC consumer
Definition dai.h:57
@ DAI_CBC_CFC
Definition dai.h:59
@ DAI_CBC_CFP
codec BCLK provider, codec FSYNC consumer
Definition dai.h:55
@ DAI_INTEL_ALH
Intel ALH.
Definition dai.h:107
@ DAI_INTEL_HDA
Intel HD/A.
Definition dai.h:106
@ DAI_LEGACY_I2S
Legacy I2S compatible with i2s.h.
Definition dai.h:103
@ DAI_INTEL_ALH_NHLT
nhlt Intel ALH
Definition dai.h:117
@ DAI_INTEL_DMIC
Intel DMIC.
Definition dai.h:105
@ DAI_AMD_DMIC
Amd DMIC.
Definition dai.h:112
@ DAI_INTEL_DMIC_NHLT
nhlt ssp
Definition dai.h:115
@ DAI_AMD_BT
Amd BT.
Definition dai.h:110
@ DAI_IMX_ESAI
i.MX ESAI
Definition dai.h:109
@ DAI_INTEL_SSP_NHLT
nhlt ssp
Definition dai.h:114
@ DAI_INTEL_SSP
Intel SSP.
Definition dai.h:104
@ DAI_IMX_SAI
i.MX SAI
Definition dai.h:108
@ DAI_AMD_SP
Amd SP.
Definition dai.h:111
@ DAI_MEDIATEK_AFE
Mtk AFE.
Definition dai.h:113
@ DAI_INTEL_HDA_NHLT
nhlt Intel HD/A
Definition dai.h:116
@ DAI_TRIGGER_DRAIN
Empty the transmit queue.
Definition dai.h:202
@ DAI_TRIGGER_DROP
Discard the transmit / receive queue.
Definition dai.h:209
@ DAI_TRIGGER_STOP
Stop the transmission / reception of data.
Definition dai.h:179
@ DAI_TRIGGER_COPY
Copy.
Definition dai.h:226
@ DAI_TRIGGER_START
Start the transmission / reception of data.
Definition dai.h:163
@ DAI_TRIGGER_PRE_START
Optional - Pre Start the transmission / reception of data.
Definition dai.h:169
@ DAI_TRIGGER_POST_STOP
Optional - Post Stop the transmission / reception of data.
Definition dai.h:193
@ DAI_TRIGGER_PREPARE
Prepare the queues after underrun/overrun error has occurred.
Definition dai.h:215
@ DAI_TRIGGER_PAUSE
Pause the transmission / reception of data.
Definition dai.h:187
@ DAI_TRIGGER_RESET
Reset.
Definition dai.h:221
@ DAI_INVERSION_NB_NF
no BCLK inversion, no FSYNC inversion
Definition dai.h:84
@ DAI_INVERSION_IB_IF
Definition dai.h:90
@ DAI_INVERSION_NB_IF
BCLK inversion, no FSYNC inversion.
Definition dai.h:86
@ DAI_INVERSION_IB_NF
BCLK inversion, FSYNC inversion.
Definition dai.h:88
@ DAI_DIR_RX
Receive data.
Definition dai.h:127
@ DAI_DIR_BOTH
Both receive and transmit data.
Definition dai.h:129
@ DAI_DIR_TX
Transmit data.
Definition dai.h:125
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
int remove(const char *path)
Main DAI config structure.
Definition dai.h:252
uint32_t rate
Frame clock (WS) frequency, sampling rate.
Definition dai.h:260
uint32_t tdm_slot_group
Definition dai.h:272
uint16_t format
DAI specific data stream format.
Definition dai.h:262
uint8_t channels
Number of audio channels, words in frame.
Definition dai.h:258
uint8_t options
DAI specific configuration options.
Definition dai.h:264
enum dai_type type
Type of the DAI.
Definition dai.h:254
uint32_t dai_index
Index of the DAI.
Definition dai.h:256
size_t block_size
Size of one RX/TX memory block (buffer) in bytes.
Definition dai.h:268
uint16_t link_config
DAI specific link configuration.
Definition dai.h:270
uint8_t word_size
Number of bits representing one data word.
Definition dai.h:266
DAI properties.
Definition dai.h:235
uint32_t dma_hs_id
DMA handshake id.
Definition dai.h:241
uint32_t reg_init_delay
Delay for initializing registers.
Definition dai.h:243
uint32_t fifo_address
Fifo hw address for e.g.
Definition dai.h:237
uint32_t fifo_depth
Fifo depth.
Definition dai.h:239
int stream_id
Stream ID.
Definition dai.h:245
DAI timestamp configuration.
Definition dai.h:278
int type
Type of the DAI (SSP, DMIC, HDA, etc.).
Definition dai.h:282
int dma_chan_count
Number of channels in single DMA.
Definition dai.h:292
int dma_chan_index
Used DMA channel index.
Definition dai.h:290
int dma_id
DMA instance id.
Definition dai.h:288
uint32_t walclk_rate
Rate in Hz, e.g.
Definition dai.h:280
int direction
Direction (playback/capture)
Definition dai.h:284
int index
Index for SSPx to select correct timestamp register.
Definition dai.h:286
DAI timestamp data.
Definition dai.h:298
uint64_t walclk
Wall clock.
Definition dai.h:300
uint64_t sample
Sample count.
Definition dai.h:302
uint32_t walclk_rate
Rate in Hz, e.g.
Definition dai.h:304
Runtime device structure (in ROM) per driver instance.
Definition device.h:412
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:418