mirror of
https://github.com/apache/nuttx.git
synced 2026-08-01 20:28:58 +00:00
Add ES7210 audio ADC driver for NuttX implementing the audio lower-half interface. Supports 4-channel recording via I2S with configurable sample rate, bit depth, and mic gain. - drivers/audio/es7210.c: Codec driver using LPWORK for async buffer management, I2C register access, and NuttX audio buffer management - drivers/audio/es7210.h: Internal register definitions and macros - include/nuttx/audio/es7210.h: Public header with platform config structure and es7210_initialize() API - drivers/audio/Kconfig, Make.defs, CMakeLists.txt: Build system integration for CONFIG_AUDIO_ES7210 Key implementation details: - ES7210_SDP_NORMAL (normal I2S) instead of TDM, matching NuttX I2S standard Philips mode - ES7210_ADC_PGA_POWER_ON bit in gain registers REG43-46, required for analog front-end amplifier power-on - 50ms startup delay in es7210_start for codec clock stabilization - I2S_IOCTL(AUDIOIOC_STOP) in es7210_stop to notify I2S layer, preventing DMA from running without buffers after stop Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
596 lines
14 KiB
Text
596 lines
14 KiB
Text
#
|
|
# For a description of the syntax of this configuration file,
|
|
# see the file kconfig-language.txt in the NuttX tools repository.
|
|
#
|
|
|
|
menuconfig DRIVERS_AUDIO
|
|
bool "Audio Device Support"
|
|
default n
|
|
---help---
|
|
Enable support for audio device drivers. This includes drivers for
|
|
MP3, WMA and Ogg Vorbis encoding, decoding, as well as drivers for
|
|
interfacing with external DSP chips to perform custom audio functions.
|
|
|
|
NOTE: All of these drivers depend on support from the audio subsystem
|
|
enabled with the AUDIO selection.
|
|
|
|
if DRIVERS_AUDIO
|
|
|
|
config AUDIO_TONE
|
|
bool "Audio Tone Generator using PWM"
|
|
default n
|
|
depends on PWM && DRIVERS_AUDIO
|
|
---help---
|
|
This driver enables the Audio Tone Generator for NuttX.
|
|
|
|
if AUDIO_TONE
|
|
|
|
endif # AUDIO_TONE
|
|
|
|
config AUDIO_VS1053
|
|
bool "VS1053 codec chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the VS1053 Audio codec by VLSI Solutions.
|
|
This chip provides encoding and decoding of MP3, WMA, AAC and Ogg
|
|
Vorbis format audio. It also has a general DSP which is user
|
|
programmable to perform special audio (or any DSP) functions.
|
|
|
|
if AUDIO_VS1053
|
|
|
|
config VS1053_DEVICE_COUNT
|
|
int "Number of VS1053 devices attached"
|
|
default 1
|
|
---help---
|
|
Sets the number of VS1053 type devices available to the system.
|
|
This is required to reserve global, static lower-half driver
|
|
context pointers for the DREQ ISR to use for lookup when it needs
|
|
to signal that additional data is being requested.
|
|
|
|
config VS1053_WORKER_STACKSIZE
|
|
int "VS1053 worker thread stack size"
|
|
default 768
|
|
---help---
|
|
Stack size to use with the VS1053 worker thread.
|
|
|
|
if AUDIO_DRIVER_SPECIFIC_BUFFERS
|
|
|
|
config VS1053_NUM_BUFFERS
|
|
int "Number of Audio Pipeline Buffers to use"
|
|
default 2
|
|
---help---
|
|
Sets the number of the Audio Pipeline Buffers used to deliver audio
|
|
data to the VS1053 driver. The minimum you should set this is
|
|
2 buffers, which should be adequate for most media types.
|
|
|
|
config VS1053_BUFFER_SIZE
|
|
int "Size of Audio Pipeline Buffers to use"
|
|
default 8192
|
|
---help---
|
|
Sets the size of the Audio Pipeline Buffers used to deliver audio
|
|
data to the VS1053 driver. The minimum you should set this is
|
|
2048 bytes. The larger the buffer, the better CPU performance.
|
|
|
|
endif # AUDIO_DRIVER_SPECIFIC_BUFFERS
|
|
endif # AUDIO_VS1053
|
|
|
|
config AUDIO_CS43L22
|
|
bool "CS43L22 audio chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the CS43L22 Audio codec by Cirrus Logic.
|
|
This chip is a lower level audio chip.. basically
|
|
an exotic D-to-A. It includes no built-in support for audio CODECS
|
|
The CS43L22 provides:
|
|
|
|
- Low power consumption
|
|
- High SNR
|
|
- Stereo digital microphone input
|
|
- Digital Dynamic Range Controller (compressor / limiter)
|
|
- Digital sidetone mixing
|
|
- Ground-referenced headphone driver
|
|
- Ground-referenced line outputs
|
|
|
|
NOTE: This driver also depends on both I2C and I2S support although
|
|
that dependency is not explicit here.
|
|
|
|
if AUDIO_CS43L22
|
|
|
|
config CS43L22_INITVOLUME
|
|
int "CS43L22 initial volume setting"
|
|
default 250
|
|
|
|
config CS43L22_INFLIGHT
|
|
int "CS43L22 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config CS43L22_MSG_PRIO
|
|
int "CS43L22 message priority"
|
|
default 1
|
|
|
|
config CS43L22_BUFFER_SIZE
|
|
int "CS43L22 preferred buffer size"
|
|
default 8192
|
|
|
|
config CS43L22_NUM_BUFFERS
|
|
int "CS43L22 preferred number of buffers"
|
|
default 4
|
|
|
|
config CS43L22_WORKER_STACKSIZE
|
|
int "CS43L22 worker thread stack size"
|
|
default 768
|
|
|
|
config CS43L22_REGDUMP
|
|
bool "CS43L22 register dump"
|
|
default n
|
|
---help---
|
|
Enable logic to dump the contents of all CS43L22 registers.
|
|
|
|
config CS43L22_CLKDEBUG
|
|
bool "CS43L22 clock analysis"
|
|
default n
|
|
---help---
|
|
Enable logic to analyze CS43L22 clock configuration.
|
|
|
|
endif # AUDIO_CS43L22
|
|
|
|
config AUDIO_CS4344
|
|
bool "CS4344 audio chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the CS4344 Audio codec by Cirrus Logic.
|
|
This chip is a lower level audio chip.. basically
|
|
an exotic D-to-A. It includes no built-in support for audio CODECS.
|
|
|
|
if AUDIO_CS4344
|
|
|
|
config CS4344_INFLIGHT
|
|
int "CS4344 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config CS4344_MSG_PRIO
|
|
int "CS4344 message priority"
|
|
default 1
|
|
|
|
config CS4344_BUFFER_SIZE
|
|
int "CS4344 preferred buffer size"
|
|
default 8192
|
|
|
|
config CS4344_NUM_BUFFERS
|
|
int "CS4344 preferred number of buffers"
|
|
default 4
|
|
|
|
config CS4344_WORKER_STACKSIZE
|
|
int "CS4344 worker thread stack size"
|
|
default 768
|
|
|
|
endif # AUDIO_CS4344
|
|
|
|
config AUDIO_ES7210
|
|
bool "ES7210 ADC codec chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the ES7210 4-channel ADC codec by
|
|
Everest Semiconductor.
|
|
|
|
NOTE: This driver also depends on both I2C and I2S support although
|
|
that dependency is not explicit here.
|
|
|
|
if AUDIO_ES7210
|
|
|
|
config ES7210_INFLIGHT
|
|
int "ES7210 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config ES7210_BUFFER_SIZE
|
|
int "ES7210 preferred buffer size"
|
|
default 8192
|
|
|
|
config ES7210_NUM_BUFFERS
|
|
int "ES7210 preferred number of buffers"
|
|
default 4
|
|
|
|
endif # AUDIO_ES7210
|
|
|
|
config AUDIO_ES8311
|
|
bool "ES8311 codec chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the ES8311 Audio codec by Everest
|
|
Semiconductor.
|
|
|
|
NOTE: This driver also depends on both I2C and I2S support although
|
|
that dependency is not explicit here.
|
|
|
|
if AUDIO_ES8311
|
|
|
|
config ES8311_INPUT_INITVOLUME
|
|
int "ES8311 initial input volume setting"
|
|
default 1000
|
|
|
|
config ES8311_OUTPUT_INITVOLUME
|
|
int "ES8311 initial output volume setting"
|
|
default 400
|
|
|
|
choice
|
|
prompt "MCLK source"
|
|
default ES8311_SRC_MCLK
|
|
---help---
|
|
Select the source of the MCLK signal.
|
|
|
|
config ES8311_SRC_MCLK
|
|
bool "From MCLK Pin"
|
|
|
|
config ES8311_SRC_BCLK
|
|
bool "From BCLK Pin"
|
|
|
|
endchoice
|
|
|
|
config ES8311_INFLIGHT
|
|
int "ES8311 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config ES8311_MSG_PRIO
|
|
int "ES8311 message priority"
|
|
default 1
|
|
|
|
config ES8311_BUFFER_SIZE
|
|
int "ES8311 preferred buffer size"
|
|
default 8192
|
|
|
|
config ES8311_NUM_BUFFERS
|
|
int "ES8311 preferred number of buffers"
|
|
default 4
|
|
|
|
config ES8311_WORKER_STACKSIZE
|
|
int "ES8311 worker thread stack size"
|
|
default 2048
|
|
|
|
endif # AUDIO_ES8388
|
|
|
|
config AUDIO_ES8388
|
|
bool "ES8388 codec chip"
|
|
default n
|
|
depends on AUDIO
|
|
select AUDIO_DRIVER_SPECIFIC_BUFFERS
|
|
---help---
|
|
Select to enable support for the ES8388 Audio codec by Everest
|
|
Semiconductor.
|
|
|
|
NOTE: This driver also depends on both I2C and I2S support although
|
|
that dependency is not explicit here.
|
|
|
|
if AUDIO_ES8388
|
|
|
|
config ES8388_INPUT_INITVOLUME
|
|
int "ES8388 initial input volume setting"
|
|
default 1000
|
|
|
|
config ES8388_OUTPUT_CHANNEL
|
|
int
|
|
default 0 if ES8388_OUTPUT_CHANNEL_LINE1
|
|
default 1 if ES8388_OUTPUT_CHANNEL_LINE2
|
|
default 2 if ES8388_OUTPUT_CHANNEL_ALL
|
|
|
|
choice
|
|
prompt "ES8388 output channel"
|
|
default ES8388_OUTPUT_CHANNEL_ALL
|
|
---help---
|
|
Select the codec channel that will output audio.
|
|
The actual device that will reproduce the audio signal depends
|
|
on the board implementation.
|
|
|
|
config ES8388_OUTPUT_CHANNEL_LINE1
|
|
bool "Line 1"
|
|
|
|
config ES8388_OUTPUT_CHANNEL_LINE2
|
|
bool "Line 2"
|
|
|
|
config ES8388_OUTPUT_CHANNEL_ALL
|
|
bool "Both"
|
|
|
|
endchoice
|
|
|
|
config ES8388_OUTPUT_INITVOLUME
|
|
int "ES8388 initial output volume setting"
|
|
default 400
|
|
|
|
config ES8388_INPUT_CHANNEL
|
|
int
|
|
default 0 if ES8388_INPUT_CHANNEL_LINE1
|
|
default 1 if ES8388_INPUT_CHANNEL_LINE2
|
|
default 3 if ES8388_INPUT_CHANNEL_DIFFERENTIAL
|
|
|
|
choice
|
|
prompt "ES8388 input channel"
|
|
default ES8388_INPUT_CHANNEL_LINE1
|
|
---help---
|
|
Select the codec channel that will input audio.
|
|
The actual device that will reproduce the audio signal depends
|
|
on the board implementation.
|
|
The "Differential" option will take the difference between the Line 1
|
|
left and right channels.
|
|
|
|
config ES8388_INPUT_CHANNEL_LINE1
|
|
bool "Line 1"
|
|
|
|
config ES8388_INPUT_CHANNEL_LINE2
|
|
bool "Line 2"
|
|
|
|
config ES8388_INPUT_CHANNEL_DIFFERENTIAL
|
|
bool "Differential"
|
|
|
|
endchoice
|
|
|
|
config ES8388_INFLIGHT
|
|
int "ES8388 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config ES8388_MSG_PRIO
|
|
int "ES8388 message priority"
|
|
default 1
|
|
|
|
config ES8388_BUFFER_SIZE
|
|
int "ES8388 preferred buffer size"
|
|
default 8192
|
|
|
|
config ES8388_NUM_BUFFERS
|
|
int "ES8388 preferred number of buffers"
|
|
default 4
|
|
|
|
config ES8388_WORKER_STACKSIZE
|
|
int "ES8388 worker thread stack size"
|
|
default 2048
|
|
|
|
config ES8388_REGDUMP
|
|
bool "ES8388 register dump"
|
|
default n
|
|
depends on DEBUG_FEATURES
|
|
---help---
|
|
Enable logic to dump the contents of all ES8388 registers.
|
|
|
|
endif # AUDIO_ES8388
|
|
|
|
config AUDIO_WM8776
|
|
bool "WM8776 audio chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the WM8776 Audio codec by Wolfson
|
|
Microelectonics.
|
|
|
|
if AUDIO_WM8776
|
|
|
|
config WM8776_INFLIGHT
|
|
int "WM8776 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config WM8776_MSG_PRIO
|
|
int "WM8776 message priority"
|
|
default 1
|
|
|
|
config WM8776_WORKER_STACKSIZE
|
|
int "WM8776 worker thread stack size"
|
|
default 768
|
|
|
|
config WM8776_SWAP_HPOUT
|
|
bool "Swap WM8776 HP out signals"
|
|
default n
|
|
|
|
endif # AUDIO_WM8776
|
|
|
|
config AUDIO_WM8994
|
|
bool "WM8994 audio chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the WM8994 Audio codec by Wolfson
|
|
Microelectonics. This chip is a lower level audio chip.. basically
|
|
an exotic D-to-A. It includes no built-in support for audio CODECS
|
|
The WM8994 provides:
|
|
|
|
- Low power consumption
|
|
- High SNR
|
|
- Stereo digital microphone input
|
|
- Digital Dynamic Range Controller (compressor / limiter)
|
|
- Digital sidetone mixing
|
|
- Ground-referenced headphone driver
|
|
- Ground-referenced line outputs
|
|
|
|
NOTE: This driver also depends on both I2C and I2S support although
|
|
that dependency is not explicit here.
|
|
|
|
if AUDIO_WM8994
|
|
|
|
config WM8994_INITVOLUME
|
|
int "WM8994 initial volume setting"
|
|
default 250
|
|
|
|
config WM8994_INFLIGHT
|
|
int "WM8994 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config WM8994_MSG_PRIO
|
|
int "WM8994 message priority"
|
|
default 1
|
|
|
|
config WM8994_BUFFER_SIZE
|
|
int "WM8994 preferred buffer size"
|
|
default 8192
|
|
|
|
config WM8994_NUM_BUFFERS
|
|
int "WM8994 preferred number of buffers"
|
|
default 4
|
|
|
|
config WM8994_WORKER_STACKSIZE
|
|
int "WM8994 worker thread stack size"
|
|
default 768
|
|
|
|
config WM8994_REGDUMP
|
|
bool "WM8994 register dump"
|
|
default n
|
|
---help---
|
|
Enable logic to dump the contents of all WM8994 registers.
|
|
|
|
config WM8994_CLKDEBUG
|
|
bool "WM8994 clock analysis"
|
|
default n
|
|
---help---
|
|
Enable logic to analyze WM8994 clock configuration.
|
|
|
|
endif # AUDIO_WM8994
|
|
|
|
config AUDIO_WM8904
|
|
bool "WM8904 audio chip"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
Select to enable support for the WM8904 Audio codec by Wolfson
|
|
Microelectonics. This chip is a lower level audio chip.. basically
|
|
an exotic D-to-A. It includes no built-in support for audio CODECS
|
|
The WM8904 provides:
|
|
|
|
- Low power consumption
|
|
- High SNR
|
|
- Stereo digital microphone input
|
|
- Digital Dynamic Range Controller (compressor / limiter)
|
|
- Digital sidetone mixing
|
|
- Ground-referenced headphone driver
|
|
- Ground-referenced line outputs
|
|
|
|
NOTE: This driver also depends on both I2C and I2S support although
|
|
that dependency is not explicit here.
|
|
|
|
if AUDIO_WM8904
|
|
|
|
config WM8904_INITVOLUME
|
|
int "WM8904 initial volume setting"
|
|
default 250
|
|
|
|
config WM8904_INFLIGHT
|
|
int "WM8904 maximum in-flight audio buffers"
|
|
default 2
|
|
|
|
config WM8904_MSG_PRIO
|
|
int "WM8904 message priority"
|
|
default 1
|
|
|
|
config WM8904_BUFFER_SIZE
|
|
int "WM8904 preferred buffer size"
|
|
default 8192
|
|
|
|
config WM8904_NUM_BUFFERS
|
|
int "WM8904 preferred number of buffers"
|
|
default 4
|
|
|
|
config WM8904_WORKER_STACKSIZE
|
|
int "WM8904 worker thread stack size"
|
|
default 768
|
|
|
|
config WM8904_REGDUMP
|
|
bool "WM8904 register dump"
|
|
default n
|
|
---help---
|
|
Enable logic to dump the contents of all WM8904 registers.
|
|
|
|
config WM8904_CLKDEBUG
|
|
bool "WM8904 clock analysis"
|
|
default n
|
|
---help---
|
|
Enable logic to analyze WM8904 clock configuration.
|
|
|
|
endif # AUDIO_WM8904
|
|
|
|
config AUDIO_NULL
|
|
bool "NULL audio device"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
A do-nothing audio device driver to simplify testing of audio
|
|
decoders.
|
|
|
|
if AUDIO_NULL
|
|
|
|
config AUDIO_NULL_MSG_PRIO
|
|
int "Null audio device message priority"
|
|
default 1
|
|
|
|
config AUDIO_NULL_BUFFER_SIZE
|
|
int "Null audio device preferred buffer size"
|
|
default 8192
|
|
|
|
config AUDIO_NULL_NUM_BUFFERS
|
|
int "Null audio device preferred number of buffers"
|
|
default 4
|
|
|
|
config AUDIO_NULL_WORKER_STACKSIZE
|
|
int "Null audio device worker thread stack size"
|
|
default 768
|
|
|
|
endif # AUDIO_NULL
|
|
|
|
config AUDIO_I2S
|
|
bool "Audio I2S"
|
|
depends on AUDIO
|
|
depends on I2S
|
|
|
|
config AUDIO_DMA
|
|
bool "Audio DMA"
|
|
select AUDIO_DRIVER_SPECIFIC_BUFFERS
|
|
depends on AUDIO
|
|
depends on DMA
|
|
|
|
config AUDIO_FAKE
|
|
bool "Fake audio device"
|
|
default n
|
|
depends on AUDIO
|
|
---help---
|
|
A fake audio device driver to simplify testing of audio
|
|
capture and playback.
|
|
|
|
if AUDIO_FAKE
|
|
|
|
config FAKE_AUDIO_DEVICE_PARAMS
|
|
string "fake audio device params"
|
|
default ""
|
|
---help---
|
|
This is a params for fake audio device. The format like:
|
|
{dev_name, playback, sample_rates[4], channels, format[4], period_time, periods}.
|
|
|
|
- dev_name (string): pcm2c or pcm2p or others.
|
|
- playback (bool): true or false.
|
|
- sample_rates(uint32 array): {16000, 32000}.
|
|
- channels (uint8, {min_chan, max_chan}): {1, 2}.
|
|
- format(uint8 array): {8,16,32}.
|
|
- period_time(uint32): 100, unit ms.
|
|
- periods (uint32): 4, buffer cnt.
|
|
e.g:
|
|
{"pcm2c", false, {8000, 16000, 44100}, {1, 2}, {16}, 100, 4},
|
|
{"pcm2p", true, {8000, 16000, 44100}, {1, 2}, {16}, 100, 4},
|
|
|
|
config FAKE_AUDIO_DATA_PATH
|
|
string "fake audio device data path"
|
|
default "/data/"
|
|
---help---
|
|
This dir is used to store the audio file for virtual capture or playback device.
|
|
The filename for capture device should comply with the format "devname_samplerate_channels_format.pcm".
|
|
e.g: pcm2c_16000_2_16.pcm.
|
|
The filename format of playback device is the same as capture device.
|
|
e.g: pcm2p_16000_2_16.pcm.
|
|
|
|
config AUDIO_FAKE_MSG_PRIO
|
|
int "Fake audio device message priority"
|
|
default 1
|
|
|
|
config AUDIO_FAKE_WORKER_STACKSIZE
|
|
int "Fake audio device worker thread stack size"
|
|
default 768
|
|
|
|
endif # AUDIO_FAKE
|
|
|
|
endif # DRIVERS_AUDIO
|