Zephyr Project API 4.4.99
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
27
28#include <errno.h>
29#include <zephyr/drivers/i2s.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
50
60
73
84
118
124#define AUDIO_DAI_DIR_TX BIT(0)
126#define AUDIO_DAI_DIR_RX BIT(1)
128#define AUDIO_DAI_DIR_TXRX (AUDIO_DAI_DIR_TX | AUDIO_DAI_DIR_RX)
129
147
153typedef union {
156 /* Other DAI types go here */
158
172
182
190
194typedef union {
195 int vol;
196 bool mute;
199
219
227typedef void (*audio_codec_error_callback_t)(const struct device *dev, uint32_t errors);
228
236typedef void (*audio_codec_tx_done_callback_t)(const struct device *dev, void *user_data);
237
247typedef void (*audio_codec_rx_done_callback_t)(const struct device *dev, uint8_t *buf, uint32_t len,
248 void *user_data);
249
254
259typedef int (*audio_codec_configure_t)(const struct device *dev, struct audio_codec_cfg *cfg);
260
265typedef void (*audio_codec_start_output_t)(const struct device *dev);
266
271typedef void (*audio_codec_stop_output_t)(const struct device *dev);
272
277typedef int (*audio_codec_set_property_t)(const struct device *dev, audio_property_t property,
279
284typedef int (*audio_codec_apply_properties_t)(const struct device *dev);
285
290typedef int (*audio_codec_clear_errors_t)(const struct device *dev);
291
296typedef int (*audio_codec_register_error_callback_t)(const struct device *dev,
298
303typedef int (*audio_codec_route_input_t)(const struct device *dev, audio_channel_t channel,
304 uint32_t input);
305
310typedef int (*audio_codec_route_output_t)(const struct device *dev, audio_channel_t channel,
311 uint32_t output);
312
317typedef int (*audio_codec_start_t)(const struct device *dev, audio_dai_dir_t dir);
318
323typedef int (*audio_codec_stop_t)(const struct device *dev, audio_dai_dir_t dir);
324
329typedef int (*audio_codec_write_t)(const struct device *dev, uint8_t *data, size_t data_size);
330
336 const struct device *dev, audio_codec_tx_done_callback_t tx_cb, void *tx_cb_user_data,
337 audio_codec_rx_done_callback_t rx_cb, void *rx_cb_user_data);
338
345#define audio_codec_api audio_codec_driver_api __DEPRECATED_MACRO
346
404
408
420static inline int audio_codec_configure(const struct device *dev, struct audio_codec_cfg *cfg)
421{
422 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
423
424 return api->configure(dev, cfg);
425}
426
434static inline void audio_codec_start_output(const struct device *dev)
435{
436 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
437
438 api->start_output(dev);
439}
440
448static inline void audio_codec_stop_output(const struct device *dev)
449{
450 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
451
452 api->stop_output(dev);
453}
454
467static inline int audio_codec_set_property(const struct device *dev, audio_property_t property,
469{
470 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
471
472 return api->set_property(dev, property, channel, val);
473}
474
486static inline int audio_codec_apply_properties(const struct device *dev)
487{
488 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
489
490 return api->apply_properties(dev);
491}
492
503static inline int audio_codec_clear_errors(const struct device *dev)
504{
505 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
506
507 if (api->clear_errors == NULL) {
508 return -ENOSYS;
509 }
510
511 return api->clear_errors(dev);
512}
513
528static inline int audio_codec_register_error_callback(const struct device *dev,
530{
531 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
532
533 if (api->register_error_callback == NULL) {
534 return -ENOSYS;
535 }
536
537 return api->register_error_callback(dev, cb);
538}
539
553static inline int audio_codec_route_input(const struct device *dev, audio_channel_t channel,
554 uint32_t input)
555{
556 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
557
558 if (api->route_input == NULL) {
559 return -ENOSYS;
560 }
561
562 return api->route_input(dev, channel, input);
563}
564
578static inline int audio_codec_route_output(const struct device *dev, audio_channel_t channel,
579 uint32_t output)
580{
581 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
582
583 if (api->route_output == NULL) {
584 return -ENOSYS;
585 }
586
587 return api->route_output(dev, channel, output);
588}
589
600static inline int audio_codec_start(const struct device *dev, audio_dai_dir_t dir)
601{
602 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
603
604 if (api->start == NULL) {
605 return -ENOSYS;
606 }
607
608 return api->start(dev, dir);
609}
610
621static inline int audio_codec_stop(const struct device *dev, audio_dai_dir_t dir)
622{
623 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
624
625 if (api->stop == NULL) {
626 return -ENOSYS;
627 }
628
629 return api->stop(dev, dir);
630}
631
646static inline int audio_codec_write(const struct device *dev, uint8_t *data, size_t data_size)
647{
648 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
649
650 if (api->write == NULL) {
651 return -ENOSYS;
652 }
653
654 return api->write(dev, data, data_size);
655}
656
677static inline int audio_codec_register_done_callback(const struct device *dev,
679 void *tx_cb_user_data,
681 void *rx_cb_user_data)
682{
683 const struct audio_codec_driver_api *api = DEVICE_API_GET(audio_codec, dev);
684
685 if (api->register_done_callback == NULL) {
686 return -ENOSYS;
687 }
688
689 return api->register_done_callback(dev, tx_cb, tx_cb_user_data, rx_cb, rx_cb_user_data);
690}
691
692#ifdef __cplusplus
693}
694#endif
695
699
700#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:1449
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:303
void(* audio_codec_start_output_t)(const struct device *dev)
Callback API to start output audio playback.
Definition codec.h:265
static int audio_codec_configure(const struct device *dev, struct audio_codec_cfg *cfg)
Configure the audio codec.
Definition codec.h:420
void(* audio_codec_error_callback_t)(const struct device *dev, uint32_t errors)
Callback for error interrupt.
Definition codec.h:227
audio_dai_type_t
Digital Audio Interface (DAI) type.
Definition codec.h:64
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:310
static void audio_codec_start_output(const struct device *dev)
Set codec to start output audio playback.
Definition codec.h:434
audio_pcm_width_t
PCM audio sample bit widths.
Definition codec.h:54
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:277
audio_codec_error_type
Codec error type.
Definition codec.h:203
int(* audio_codec_clear_errors_t)(const struct device *dev)
Callback API to clear audio codec errors.
Definition codec.h:290
audio_route_t
DAI Route types.
Definition codec.h:162
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:621
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:600
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:323
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:236
audio_property_t
Codec properties that can be set by audio_codec_set_property().
Definition codec.h:77
static int audio_codec_clear_errors(const struct device *dev)
Clear any codec errors.
Definition codec.h:503
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:247
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:677
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:467
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:296
static void audio_codec_stop_output(const struct device *dev)
Set codec to stop output audio playback.
Definition codec.h:448
int(* audio_codec_configure_t)(const struct device *dev, struct audio_codec_cfg *cfg)
@def_driverbackendgroup{Audio Codec,audio_codec_interface}
Definition codec.h:259
audio_pcm_rate_t
PCM audio sample rates.
Definition codec.h:38
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:528
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:553
audio_channel_t
Audio channel identifiers to use in audio_codec_set_property().
Definition codec.h:88
void(* audio_codec_stop_output_t)(const struct device *dev)
Callback API to stop output audio playback.
Definition codec.h:271
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:646
int(* audio_codec_apply_properties_t)(const struct device *dev)
Callback API to apply cached audio codec properties.
Definition codec.h:284
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:329
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:335
uint8_t audio_dai_dir_t
DAI Direction Bitmap.
Definition codec.h:122
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:578
static int audio_codec_apply_properties(const struct device *dev)
Atomically apply any cached properties.
Definition codec.h:486
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:317
@ AUDIO_DAI_TYPE_PCMA
PCM Interface, variant A.
Definition codec.h:68
@ AUDIO_DAI_TYPE_I2S
I2S Interface.
Definition codec.h:65
@ AUDIO_DAI_TYPE_LEFT_JUSTIFIED
I2S Interface, left justified.
Definition codec.h:66
@ AUDIO_DAI_TYPE_INVALID
Other interfaces can be added here.
Definition codec.h:71
@ AUDIO_DAI_TYPE_RIGHT_JUSTIFIED
I2S Interface, right justified.
Definition codec.h:67
@ AUDIO_DAI_TYPE_PCMB
PCM Interface, variant B.
Definition codec.h:69
@ AUDIO_DAI_TYPE_PCM
PCM Interface.
Definition codec.h:70
@ AUDIO_PCM_WIDTH_16_BITS
16-bit sample width
Definition codec.h:55
@ AUDIO_PCM_WIDTH_32_BITS
32-bit sample width
Definition codec.h:58
@ AUDIO_PCM_WIDTH_20_BITS
20-bit sample width
Definition codec.h:56
@ AUDIO_PCM_WIDTH_24_BITS
24-bit sample width
Definition codec.h:57
@ AUDIO_CODEC_ERROR_UNDERVOLTAGE
Power low voltage.
Definition codec.h:211
@ AUDIO_CODEC_ERROR_OVERVOLTAGE
Power high voltage.
Definition codec.h:214
@ AUDIO_CODEC_ERROR_OVERTEMPERATURE
Codec over-temperature.
Definition codec.h:208
@ AUDIO_CODEC_ERROR_DC
Output direct-current.
Definition codec.h:217
@ AUDIO_CODEC_ERROR_OVERCURRENT
Output over-current.
Definition codec.h:205
@ AUDIO_ROUTE_CAPTURE
Capture path only.
Definition codec.h:170
@ AUDIO_ROUTE_BYPASS
Bypass, neither the playback nor the capture path is configured.
Definition codec.h:164
@ AUDIO_ROUTE_PLAYBACK
Playback path only.
Definition codec.h:166
@ AUDIO_ROUTE_PLAYBACK_CAPTURE
Both the playback and the capture paths.
Definition codec.h:168
@ AUDIO_PROPERTY_INPUT_VOLUME
Input volume.
Definition codec.h:80
@ AUDIO_PROPERTY_EQ_GAIN
Output equalizer gain.
Definition codec.h:82
@ AUDIO_PROPERTY_OUTPUT_VOLUME
Output volume.
Definition codec.h:78
@ AUDIO_PROPERTY_INPUT_MUTE
Input mute/unmute.
Definition codec.h:81
@ AUDIO_PROPERTY_OUTPUT_MUTE
Output mute/unmute.
Definition codec.h:79
@ AUDIO_PCM_RATE_32K
32 kHz sample rate
Definition codec.h:44
@ AUDIO_PCM_RATE_192K
192 kHz sample rate
Definition codec.h:48
@ AUDIO_PCM_RATE_11P025K
11.025 kHz sample rate
Definition codec.h:40
@ AUDIO_PCM_RATE_22P05K
22.05 kHz sample rate
Definition codec.h:42
@ AUDIO_PCM_RATE_8K
8 kHz sample rate
Definition codec.h:39
@ AUDIO_PCM_RATE_48K
48 kHz sample rate
Definition codec.h:46
@ AUDIO_PCM_RATE_44P1K
44.1 kHz sample rate
Definition codec.h:45
@ AUDIO_PCM_RATE_96K
96 kHz sample rate
Definition codec.h:47
@ AUDIO_PCM_RATE_16K
16 kHz sample rate
Definition codec.h:41
@ AUDIO_PCM_RATE_24K
24 kHz sample rate
Definition codec.h:43
@ AUDIO_CHANNEL_FRONT_LEFT
Front left channel.
Definition codec.h:89
@ AUDIO_CHANNEL_FRONT_RIGHT
Front right channel.
Definition codec.h:90
@ AUDIO_CHANNEL_ALL
All channels.
Definition codec.h:100
@ AUDIO_CHANNEL_COMMON_COUNT
Number of all common channel identifiers.
Definition codec.h:105
@ AUDIO_CHANNEL_REAR_RIGHT
Rear right channel.
Definition codec.h:94
@ AUDIO_CHANNEL_PRIV_START
This and higher values are codec specific.
Definition codec.h:111
@ AUDIO_CHANNEL_REAR_LEFT
Rear left channel.
Definition codec.h:93
@ AUDIO_CHANNEL_MAX
Maximum value describing an audio codec channel identifier.
Definition codec.h:116
@ AUDIO_CHANNEL_LFE
Low frequency effect channel.
Definition codec.h:91
@ AUDIO_CHANNEL_HEADPHONE_RIGHT
Headphone right.
Definition codec.h:99
@ AUDIO_CHANNEL_SIDE_RIGHT
Side right channel.
Definition codec.h:97
@ AUDIO_CHANNEL_FRONT_CENTER
Front center channel.
Definition codec.h:92
@ AUDIO_CHANNEL_SIDE_LEFT
Side left channel.
Definition codec.h:96
@ AUDIO_CHANNEL_REAR_CENTER
Rear center channel.
Definition codec.h:95
@ AUDIO_CHANNEL_HEADPHONE_LEFT
Headphone left.
Definition codec.h:98
#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.
#define NULL
Definition iar_missing_defs.h:20
__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:176
audio_dai_type_t dai_type
Digital interface type.
Definition codec.h:178
uint32_t mclk_freq
MCLK input frequency in Hz.
Definition codec.h:177
audio_dai_cfg_t dai_cfg
DAI configuration info.
Definition codec.h:179
audio_route_t dai_route
Codec route type.
Definition codec.h:180
@driver_ops{Audio Codec}
Definition codec.h:350
audio_codec_start_output_t start_output
@driver_ops_mandatory Set codec to start output audio playback.
Definition codec.h:358
audio_codec_configure_t configure
@driver_ops_mandatory Configure the audio codec.
Definition codec.h:354
audio_codec_set_property_t set_property
@driver_ops_mandatory Set a codec property defined by audio_property_t.
Definition codec.h:366
audio_codec_stop_t stop
@driver_ops_optional Set codec to stop audio playback or capture.
Definition codec.h:394
audio_codec_register_error_callback_t register_error_callback
@driver_ops_optional Register a callback function for codec error.
Definition codec.h:378
audio_codec_write_t write
@driver_ops_optional write one block size data for audio playback.
Definition codec.h:398
audio_codec_apply_properties_t apply_properties
@driver_ops_mandatory Atomically apply any cached properties.
Definition codec.h:370
audio_codec_clear_errors_t clear_errors
@driver_ops_optional Clear any codec errors.
Definition codec.h:374
audio_codec_route_input_t route_input
@driver_ops_optional Sets up signal routing for a given input channel.
Definition codec.h:382
audio_codec_stop_output_t stop_output
@driver_ops_mandatory Set codec to stop output audio playback.
Definition codec.h:362
audio_codec_start_t start
@driver_ops_optional Set codec to start audio playback or capture.
Definition codec.h:390
audio_codec_route_output_t route_output
@driver_ops_optional Sets up signal routing for a given output channel.
Definition codec.h:386
audio_codec_register_done_callback_t register_done_callback
@driver_ops_optional Register a callback function for codec one frame data tx/rx done.
Definition codec.h:402
Codec EQ property values.
Definition codec.h:186
uint32_t band
EQ band center frequency in Hz, must match a supported codec EQ band.
Definition codec.h:187
int32_t gain
EQ band gain in dB, codec-specific range.
Definition codec.h:188
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
Interface configuration options.
Definition i2s.h:305
PCM configuration options.
Definition codec.h:133
audio_dai_dir_t dir
pcm direction
Definition codec.h:135
audio_pcm_width_t pcm_width
Number of bits representing one data word.
Definition codec.h:137
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:143
audio_pcm_rate_t samplerate
pcm samplerate
Definition codec.h:145
uint8_t channels
Number of channels per frame.
Definition codec.h:139
Digital Audio Interface Configuration.
Definition codec.h:153
struct i2s_config i2s
I2S configuration.
Definition codec.h:154
struct pcm_config pcm
PCM configuration.
Definition codec.h:155
Codec property values.
Definition codec.h:194
bool mute
Mute if true, unmute if false.
Definition codec.h:196
struct audio_codec_eq_cfg eq
Codec Equalizer settings.
Definition codec.h:197
int vol
Volume level (codec-specific).
Definition codec.h:195