Zephyr API Documentation 4.5.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
codec.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Intel Corporation.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
14
15#ifndef ZEPHYR_INCLUDE_AUDIO_CODEC_H_
16#define ZEPHYR_INCLUDE_AUDIO_CODEC_H_
17
32
33#include <errno.h>
34#include <zephyr/drivers/i2s.h>
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
55
65
78
89
123
129#define AUDIO_DAI_DIR_TX BIT(0)
131#define AUDIO_DAI_DIR_RX BIT(1)
133#define AUDIO_DAI_DIR_TXRX (AUDIO_DAI_DIR_TX | AUDIO_DAI_DIR_RX)
134
152
158typedef union {
161 /* Other DAI types go here */
163
177
187
195
199typedef union {
200 int vol;
201 bool mute;
204
224
232typedef void (*audio_codec_error_callback_t)(const struct device *dev, uint32_t errors);
233
241typedef void (*audio_codec_tx_done_callback_t)(const struct device *dev, void *user_data);
242
252typedef void (*audio_codec_rx_done_callback_t)(const struct device *dev, uint8_t *buf, uint32_t len,
253 void *user_data);
254
259
264typedef int (*audio_codec_configure_t)(const struct device *dev, struct audio_codec_cfg *cfg);
265
270typedef void (*audio_codec_start_output_t)(const struct device *dev);
271
276typedef void (*audio_codec_stop_output_t)(const struct device *dev);
277
282typedef int (*audio_codec_set_property_t)(const struct device *dev, audio_property_t property,
284
289typedef int (*audio_codec_apply_properties_t)(const struct device *dev);
290
295typedef int (*audio_codec_clear_errors_t)(const struct device *dev);
296
301typedef int (*audio_codec_register_error_callback_t)(const struct device *dev,
303
308typedef int (*audio_codec_route_input_t)(const struct device *dev, audio_channel_t channel,
309 uint32_t input);
310
315typedef int (*audio_codec_route_output_t)(const struct device *dev, audio_channel_t channel,
316 uint32_t output);
317
322typedef int (*audio_codec_start_t)(const struct device *dev, audio_dai_dir_t dir);
323
328typedef int (*audio_codec_stop_t)(const struct device *dev, audio_dai_dir_t dir);
329
334typedef int (*audio_codec_write_t)(const struct device *dev, uint8_t *data, size_t data_size);
335
341 const struct device *dev, audio_codec_tx_done_callback_t tx_cb, void *tx_cb_user_data,
342 audio_codec_rx_done_callback_t rx_cb, void *rx_cb_user_data);
343
350#define audio_codec_api audio_codec_driver_api __DEPRECATED_MACRO
351
409
413
425static inline int audio_codec_configure(const struct device *dev, struct audio_codec_cfg *cfg)
426{
427 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
428
429 return api->configure(dev, cfg);
430}
431
439static inline void audio_codec_start_output(const struct device *dev)
440{
441 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
442
443 api->start_output(dev);
444}
445
453static inline void audio_codec_stop_output(const struct device *dev)
454{
455 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
456
457 api->stop_output(dev);
458}
459
472static inline int audio_codec_set_property(const struct device *dev, audio_property_t property,
474{
475 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
476
477 return api->set_property(dev, property, channel, val);
478}
479
491static inline int audio_codec_apply_properties(const struct device *dev)
492{
493 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
494
495 return api->apply_properties(dev);
496}
497
508static inline int audio_codec_clear_errors(const struct device *dev)
509{
510 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
511
512 if (api->clear_errors == NULL) {
513 return -ENOSYS;
514 }
515
516 return api->clear_errors(dev);
517}
518
533static inline int audio_codec_register_error_callback(const struct device *dev,
535{
536 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
537
538 if (api->register_error_callback == NULL) {
539 return -ENOSYS;
540 }
541
542 return api->register_error_callback(dev, cb);
543}
544
558static inline int audio_codec_route_input(const struct device *dev, audio_channel_t channel,
559 uint32_t input)
560{
561 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
562
563 if (api->route_input == NULL) {
564 return -ENOSYS;
565 }
566
567 return api->route_input(dev, channel, input);
568}
569
583static inline int audio_codec_route_output(const struct device *dev, audio_channel_t channel,
584 uint32_t output)
585{
586 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
587
588 if (api->route_output == NULL) {
589 return -ENOSYS;
590 }
591
592 return api->route_output(dev, channel, output);
593}
594
605static inline int audio_codec_start(const struct device *dev, audio_dai_dir_t dir)
606{
607 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
608
609 if (api->start == NULL) {
610 return -ENOSYS;
611 }
612
613 return api->start(dev, dir);
614}
615
626static inline int audio_codec_stop(const struct device *dev, audio_dai_dir_t dir)
627{
628 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
629
630 if (api->stop == NULL) {
631 return -ENOSYS;
632 }
633
634 return api->stop(dev, dir);
635}
636
651static inline int audio_codec_write(const struct device *dev, uint8_t *data, size_t data_size)
652{
653 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
654
655 if (api->write == NULL) {
656 return -ENOSYS;
657 }
658
659 return api->write(dev, data, data_size);
660}
661
682static inline int audio_codec_register_done_callback(const struct device *dev,
684 void *tx_cb_user_data,
686 void *rx_cb_user_data)
687{
688 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
689
690 if (api->register_done_callback == NULL) {
691 return -ENOSYS;
692 }
693
694 return api->register_done_callback(dev, tx_cb, tx_cb_user_data, rx_cb, rx_cb_user_data);
695}
696
697#ifdef __cplusplus
698}
699#endif
700
704
705#endif /* ZEPHYR_INCLUDE_AUDIO_CODEC_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1486
System error numbers.
int(* audio_codec_route_input_t)(const struct device *dev, audio_channel_t channel, uint32_t input)
Callback API to route an audio codec input.
Definition codec.h:308
void(* audio_codec_start_output_t)(const struct device *dev)
Callback API to start output audio playback.
Definition codec.h:270
int(* audio_codec_route_output_t)(const struct device *dev, audio_channel_t channel, uint32_t output)
Callback API to route an audio codec output.
Definition codec.h:315
int(* audio_codec_set_property_t)(const struct device *dev, audio_property_t property, audio_channel_t channel, audio_property_value_t val)
Callback API to set an audio codec property.
Definition codec.h:282
int(* audio_codec_clear_errors_t)(const struct device *dev)
Callback API to clear audio codec errors.
Definition codec.h:295
int(* audio_codec_stop_t)(const struct device *dev, audio_dai_dir_t dir)
Callback API to stop audio codec playback or capture.
Definition codec.h:328
int(* audio_codec_register_error_callback_t)(const struct device *dev, audio_codec_error_callback_t cb)
Callback API to register an audio codec error callback.
Definition codec.h:301
int(* audio_codec_configure_t)(const struct device *dev, struct audio_codec_cfg *cfg)
Callback API to configure an audio codec device.
Definition codec.h:264
void(* audio_codec_stop_output_t)(const struct device *dev)
Callback API to stop output audio playback.
Definition codec.h:276
int(* audio_codec_apply_properties_t)(const struct device *dev)
Callback API to apply cached audio codec properties.
Definition codec.h:289
int(* audio_codec_write_t)(const struct device *dev, uint8_t *data, size_t data_size)
Callback API to submit data for audio codec playback.
Definition codec.h:334
int(* audio_codec_register_done_callback_t)(const struct device *dev, audio_codec_tx_done_callback_t tx_cb, void *tx_cb_user_data, audio_codec_rx_done_callback_t rx_cb, void *rx_cb_user_data)
Callback API to register audio codec DMA completion callbacks.
Definition codec.h:340
int(* audio_codec_start_t)(const struct device *dev, audio_dai_dir_t dir)
Callback API to start audio codec playback or capture.
Definition codec.h:322
static int audio_codec_configure(const struct device *dev, struct audio_codec_cfg *cfg)
Configure the audio codec.
Definition codec.h:425
void(* audio_codec_error_callback_t)(const struct device *dev, uint32_t errors)
Callback for error interrupt.
Definition codec.h:232
audio_dai_type_t
Digital Audio Interface (DAI) type.
Definition codec.h:69
static void audio_codec_start_output(const struct device *dev)
Set codec to start output audio playback.
Definition codec.h:439
audio_pcm_width_t
PCM audio sample bit widths.
Definition codec.h:59
audio_codec_error_type
Codec error type.
Definition codec.h:208
audio_route_t
DAI Route types.
Definition codec.h:167
static int audio_codec_stop(const struct device *dev, audio_dai_dir_t dir)
Set codec to stop audio playback or capture.
Definition codec.h:626
static int audio_codec_start(const struct device *dev, audio_dai_dir_t dir)
Set codec to start audio playback or capture.
Definition codec.h:605
void(* audio_codec_tx_done_callback_t)(const struct device *dev, void *user_data)
Callback for one frame(block memory) size data transmitted.
Definition codec.h:241
audio_property_t
Codec properties that can be set by audio_codec_set_property().
Definition codec.h:82
static int audio_codec_clear_errors(const struct device *dev)
Clear any codec errors.
Definition codec.h:508
void(* audio_codec_rx_done_callback_t)(const struct device *dev, uint8_t *buf, uint32_t len, void *user_data)
Callback for coming one frame size data.
Definition codec.h:252
static int audio_codec_register_done_callback(const struct device *dev, audio_codec_tx_done_callback_t tx_cb, void *tx_cb_user_data, audio_codec_rx_done_callback_t rx_cb, void *rx_cb_user_data)
Register a callback function for codec one frame data tx/rx done.
Definition codec.h:682
static int audio_codec_set_property(const struct device *dev, audio_property_t property, audio_channel_t channel, audio_property_value_t val)
Set a codec property defined by audio_property_t.
Definition codec.h:472
static void audio_codec_stop_output(const struct device *dev)
Set codec to stop output audio playback.
Definition codec.h:453
audio_pcm_rate_t
PCM audio sample rates.
Definition codec.h:43
static int audio_codec_register_error_callback(const struct device *dev, audio_codec_error_callback_t cb)
Register a callback function for codec error.
Definition codec.h:533
static int audio_codec_route_input(const struct device *dev, audio_channel_t channel, uint32_t input)
Sets up signal routing for a given input channel.
Definition codec.h:558
audio_channel_t
Audio channel identifiers to use in audio_codec_set_property().
Definition codec.h:93
static int audio_codec_write(const struct device *dev, uint8_t *data, size_t data_size)
write one block size data for audio playback.
Definition codec.h:651
uint8_t audio_dai_dir_t
DAI Direction Bitmap.
Definition codec.h:127
static int audio_codec_route_output(const struct device *dev, audio_channel_t channel, uint32_t output)
Sets up signal routing for a given output channel.
Definition codec.h:583
static int audio_codec_apply_properties(const struct device *dev)
Atomically apply any cached properties.
Definition codec.h:491
@ AUDIO_DAI_TYPE_PCMA
PCM Interface, variant A.
Definition codec.h:73
@ AUDIO_DAI_TYPE_I2S
I2S Interface.
Definition codec.h:70
@ AUDIO_DAI_TYPE_LEFT_JUSTIFIED
I2S Interface, left justified.
Definition codec.h:71
@ AUDIO_DAI_TYPE_INVALID
Other interfaces can be added here.
Definition codec.h:76
@ AUDIO_DAI_TYPE_RIGHT_JUSTIFIED
I2S Interface, right justified.
Definition codec.h:72
@ AUDIO_DAI_TYPE_PCMB
PCM Interface, variant B.
Definition codec.h:74
@ AUDIO_DAI_TYPE_PCM
PCM Interface.
Definition codec.h:75
@ AUDIO_PCM_WIDTH_16_BITS
16-bit sample width
Definition codec.h:60
@ AUDIO_PCM_WIDTH_32_BITS
32-bit sample width
Definition codec.h:63
@ AUDIO_PCM_WIDTH_20_BITS
20-bit sample width
Definition codec.h:61
@ AUDIO_PCM_WIDTH_24_BITS
24-bit sample width
Definition codec.h:62
@ AUDIO_CODEC_ERROR_UNDERVOLTAGE
Power low voltage.
Definition codec.h:216
@ AUDIO_CODEC_ERROR_OVERVOLTAGE
Power high voltage.
Definition codec.h:219
@ AUDIO_CODEC_ERROR_OVERTEMPERATURE
Codec over-temperature.
Definition codec.h:213
@ AUDIO_CODEC_ERROR_DC
Output direct-current.
Definition codec.h:222
@ AUDIO_CODEC_ERROR_OVERCURRENT
Output over-current.
Definition codec.h:210
@ AUDIO_ROUTE_CAPTURE
Capture path only.
Definition codec.h:175
@ AUDIO_ROUTE_BYPASS
Bypass, neither the playback nor the capture path is configured.
Definition codec.h:169
@ AUDIO_ROUTE_PLAYBACK
Playback path only.
Definition codec.h:171
@ AUDIO_ROUTE_PLAYBACK_CAPTURE
Both the playback and the capture paths.
Definition codec.h:173
@ AUDIO_PROPERTY_INPUT_VOLUME
Input volume.
Definition codec.h:85
@ AUDIO_PROPERTY_EQ_GAIN
Output equalizer gain.
Definition codec.h:87
@ AUDIO_PROPERTY_OUTPUT_VOLUME
Output volume.
Definition codec.h:83
@ AUDIO_PROPERTY_INPUT_MUTE
Input mute/unmute.
Definition codec.h:86
@ AUDIO_PROPERTY_OUTPUT_MUTE
Output mute/unmute.
Definition codec.h:84
@ AUDIO_PCM_RATE_32K
32 kHz sample rate
Definition codec.h:49
@ AUDIO_PCM_RATE_192K
192 kHz sample rate
Definition codec.h:53
@ AUDIO_PCM_RATE_11P025K
11.025 kHz sample rate
Definition codec.h:45
@ AUDIO_PCM_RATE_22P05K
22.05 kHz sample rate
Definition codec.h:47
@ AUDIO_PCM_RATE_8K
8 kHz sample rate
Definition codec.h:44
@ AUDIO_PCM_RATE_48K
48 kHz sample rate
Definition codec.h:51
@ AUDIO_PCM_RATE_44P1K
44.1 kHz sample rate
Definition codec.h:50
@ AUDIO_PCM_RATE_96K
96 kHz sample rate
Definition codec.h:52
@ AUDIO_PCM_RATE_16K
16 kHz sample rate
Definition codec.h:46
@ AUDIO_PCM_RATE_24K
24 kHz sample rate
Definition codec.h:48
@ AUDIO_CHANNEL_FRONT_LEFT
Front left channel.
Definition codec.h:94
@ AUDIO_CHANNEL_FRONT_RIGHT
Front right channel.
Definition codec.h:95
@ AUDIO_CHANNEL_ALL
All channels.
Definition codec.h:105
@ AUDIO_CHANNEL_COMMON_COUNT
Number of all common channel identifiers.
Definition codec.h:110
@ AUDIO_CHANNEL_REAR_RIGHT
Rear right channel.
Definition codec.h:99
@ AUDIO_CHANNEL_PRIV_START
This and higher values are codec specific.
Definition codec.h:116
@ AUDIO_CHANNEL_REAR_LEFT
Rear left channel.
Definition codec.h:98
@ AUDIO_CHANNEL_MAX
Maximum value describing an audio codec channel identifier.
Definition codec.h:121
@ AUDIO_CHANNEL_LFE
Low frequency effect channel.
Definition codec.h:96
@ AUDIO_CHANNEL_HEADPHONE_RIGHT
Headphone right.
Definition codec.h:104
@ AUDIO_CHANNEL_SIDE_RIGHT
Side right channel.
Definition codec.h:102
@ AUDIO_CHANNEL_FRONT_CENTER
Front center channel.
Definition codec.h:97
@ AUDIO_CHANNEL_SIDE_LEFT
Side left channel.
Definition codec.h:101
@ AUDIO_CHANNEL_REAR_CENTER
Rear center channel.
Definition codec.h:100
@ AUDIO_CHANNEL_HEADPHONE_LEFT
Headphone left.
Definition codec.h:103
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
#define ENOSYS
Function not implemented.
Definition errno.h:83
Main header file for I2S (Inter-IC Sound) driver API.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__INT32_TYPE__ int32_t
Definition stdint.h:74
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
#define INT16_MAX
Definition stdint.h:17
Codec configuration parameters.
Definition codec.h:181
audio_dai_type_t dai_type
Digital interface type.
Definition codec.h:183
uint32_t mclk_freq
MCLK input frequency in Hz.
Definition codec.h:182
audio_dai_cfg_t dai_cfg
DAI configuration info.
Definition codec.h:184
audio_route_t dai_route
Codec route type.
Definition codec.h:185
<span class="mlabel">Driver Operations</span> Audio Codec driver operations
Definition codec.h:355
audio_codec_start_output_t start_output
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition codec.h:363
audio_codec_configure_t configure
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition codec.h:359
audio_codec_set_property_t set_property
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition codec.h:371
audio_codec_stop_t stop
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:399
audio_codec_register_error_callback_t register_error_callback
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:383
audio_codec_write_t write
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:403
audio_codec_apply_properties_t apply_properties
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition codec.h:375
audio_codec_clear_errors_t clear_errors
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:379
audio_codec_route_input_t route_input
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:387
audio_codec_stop_output_t stop_output
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition codec.h:367
audio_codec_start_t start
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:395
audio_codec_route_output_t route_output
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:391
audio_codec_register_done_callback_t register_done_callback
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition codec.h:407
Codec EQ property values.
Definition codec.h:191
uint32_t band
EQ band center frequency in Hz, must match a supported codec EQ band.
Definition codec.h:192
int32_t gain
EQ band gain in dB, codec-specific range.
Definition codec.h:193
Runtime device structure (in ROM) per driver instance.
Definition device.h:543
void * data
Address of the device instance private data.
Definition device.h:553
Interface configuration options.
Definition i2s.h:305
PCM configuration options.
Definition codec.h:138
audio_dai_dir_t dir
pcm direction
Definition codec.h:140
audio_pcm_width_t pcm_width
Number of bits representing one data word.
Definition codec.h:142
size_t block_size
Size of one RX/TX memory block (buffer) in bytes, it should be a multiple of 4 for some DMA limits.
Definition codec.h:148
audio_pcm_rate_t samplerate
pcm samplerate
Definition codec.h:150
uint8_t channels
Number of channels per frame.
Definition codec.h:144
Digital Audio Interface Configuration.
Definition codec.h:158
struct i2s_config i2s
I2S configuration.
Definition codec.h:159
struct pcm_config pcm
PCM configuration.
Definition codec.h:160
Codec property values.
Definition codec.h:199
bool mute
Mute if true, unmute if false.
Definition codec.h:201
struct audio_codec_eq_cfg eq
Codec Equalizer settings.
Definition codec.h:202
int vol
Volume level (codec-specific).
Definition codec.h:200