boards/esp32[s2|s3]: Add common I2S board layer support

Add common I2S board layer support for Xtensa based Espressif devices

Signed-off-by: Eren Terzioglu <eren.terzioglu@espressif.com>
This commit is contained in:
Eren Terzioglu
2025-03-04 15:52:37 +01:00
committed by Xiang Xiao
parent 873a6319bb
commit 22601e2074
14 changed files with 160 additions and 46 deletions
+4
View File
@@ -38,6 +38,10 @@ ifeq ($(CONFIG_ESP32_I2S),y)
CSRCS += esp32_board_i2sdev.c
endif
ifeq ($(CONFIG_ESPRESSIF_I2S),y)
CSRCS += esp32_board_i2sdev.c
endif
ifeq ($(CONFIG_ESP_PCNT),y)
CSRCS += esp32_board_pcnt.c
endif
@@ -37,10 +37,16 @@
#include <arch/board/board.h>
#include "esp32_i2s.h"
#ifdef CONFIG_ESP32_I2S
# include "esp32_i2s.h"
#endif
#ifdef CONFIG_ESPRESSIF_I2S
# include "espressif/esp_i2s.h"
#endif
#if defined(CONFIG_ESP32_I2S0) && !defined(CONFIG_AUDIO_CS4344) || \
defined(CONFIG_ESP32_I2S1)
defined(CONFIG_ESP32_I2S1) || defined(CONFIG_ESPRESSIF_I2S)
/****************************************************************************
* Public Functions
@@ -75,7 +81,11 @@ int board_i2sdev_initialize(int port, bool enable_tx, bool enable_rx)
ainfo("Initializing I2S\n");
#ifdef CONFIG_ESP32_I2S
i2s = esp32_i2sbus_initialize(port);
#else
i2s = esp_i2sbus_initialize(port);
#endif
#ifdef CONFIG_AUDIO_I2SCHAR
ret = i2schar_register(i2s, port);
@@ -191,7 +191,7 @@ int esp32_twai_setup(void);
****************************************************************************/
#if defined(CONFIG_ESP32_I2S0) && !defined(CONFIG_AUDIO_CS4344) || \
defined(CONFIG_ESP32_I2S1)
defined(CONFIG_ESP32_I2S1) || defined(CONFIG_ESPRESSIF_I2S)
int board_i2sdev_initialize(int port, bool enable_tx, bool enable_rx);
#endif
@@ -90,6 +90,10 @@
# include "esp32_i2s.h"
#endif
#ifdef CONFIG_ESPRESSIF_I2S
# include "espressif/esp_i2s.h"
#endif
#ifdef CONFIG_ESP_PCNT
# include "espressif/esp_pcnt.h"
# include "esp32_board_pcnt.h"
@@ -550,15 +554,15 @@ int esp32_bringup(void)
}
#endif
#ifdef CONFIG_ESP32_I2S
#if defined(CONFIG_ESP32_I2S) || defined(CONFIG_ESPRESSIF_I2S)
#if defined(CONFIG_ESP32_I2S0) && !defined(CONFIG_AUDIO_CS4344) || \
defined(CONFIG_ESP32_I2S1)
defined(CONFIG_ESP32_I2S1) || defined(CONFIG_ESPRESSIF_I2S)
bool i2s_enable_tx;
bool i2s_enable_rx;
#endif
#ifdef CONFIG_ESP32_I2S0
#if defined(CONFIG_ESP32_I2S0) || defined(CONFIG_ESPRESSIF_I2S0)
/* Configure I2S0 */
@@ -573,17 +577,17 @@ int esp32_bringup(void)
}
#else
#ifdef CONFIG_ESP32_I2S0_TX
#if defined(CONFIG_ESP32_I2S0_TX) || defined (CONFIG_ESPRESSIF_I2S0_TX)
i2s_enable_tx = true;
#else
i2s_enable_tx = false;
#endif /* CONFIG_ESP32_I2S0_TX */
#endif /* CONFIG_ESP32_I2S0_TX || CONFIG_ESPRESSIF_I2S0_TX */
#ifdef CONFIG_ESP32_I2S0_RX
#if defined(CONFIG_ESP32_I2S0_RX) || defined (CONFIG_ESPRESSIF_I2S0_RX)
i2s_enable_rx = true;
#else
i2s_enable_rx = false;
#endif /* CONFIG_ESP32_I2S0_RX */
#endif /* CONFIG_ESP32_I2S0_RX || CONFIG_ESPRESSIF_I2S0_RX */
/* Configure I2S generic audio on I2S0 */
@@ -591,26 +595,26 @@ int esp32_bringup(void)
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize I2S%d driver: %d\n",
CONFIG_ESP32_I2S0, ret);
ESP32_I2S0, ret);
}
#endif /* CONFIG_AUDIO_CS4344 */
#endif /* CONFIG_ESP32_I2S0 */
#endif /* CONFIG_ESP32_I2S0 || CONFIG_ESPRESSIF_I2S0 */
#ifdef CONFIG_ESP32_I2S1
#if defined(CONFIG_ESP32_I2S1) || defined(CONFIG_ESPRESSIF_I2S1)
#ifdef CONFIG_ESP32_I2S1_TX
#if defined(CONFIG_ESP32_I2S1_TX) || defined (CONFIG_ESPRESSIF_I2S1_TX)
i2s_enable_tx = true;
#else
i2s_enable_tx = false;
#endif /* CONFIG_ESP32_I2S1_TX */
#endif /* CONFIG_ESP32_I2S1_TX || CONFIG_ESPRESSIF_I2S1_TX */
#ifdef CONFIG_ESP32_I2S1_RX
#if defined(CONFIG_ESP32_I2S1_RX) || defined (CONFIG_ESPRESSIF_I2S1_RX)
i2s_enable_rx = true;
#else
i2s_enable_rx = false;
#endif /* CONFIG_ESP32_I2S1_RX */
#endif /* CONFIG_ESP32_I2S1_RX || CONFIG_ESPRESSIF_I2S1_RX */
/* Configure I2S generic audio on I2S1 */
@@ -618,12 +622,12 @@ int esp32_bringup(void)
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize I2S%d driver: %d\n",
CONFIG_ESP32_I2S1, ret);
ESP32_I2S1, ret);
}
#endif /* CONFIG_ESP32_I2S1 */
#endif /* CONFIG_ESP32_I2S1 || CONFIG_ESPRESSIF_I2S1 */
#endif /* CONFIG_ESP32_I2S */
#endif /* CONFIG_ESP32_I2S || CONFIG_ESPRESSIF_I2S */
#ifdef CONFIG_SENSORS_SHT3X
/* Try to register SHT3x device in I2C0 */
@@ -54,6 +54,10 @@ ifeq ($(CONFIG_ESP32S2_I2S),y)
CSRCS += esp32s2_board_i2sdev.c
endif
ifeq ($(CONFIG_ESPRESSIF_I2S),y)
CSRCS += esp32s2_board_i2sdev.c
endif
ifeq ($(CONFIG_ESP32S2_TWAI),y)
CSRCS += esp32s2_board_twai.c
endif
@@ -37,10 +37,16 @@
#include <arch/board/board.h>
#include "esp32s2_i2s.h"
#ifdef CONFIG_ESP32S2_I2S
# include "esp32s2_i2s.h"
#endif
#if defined(CONFIG_ESP32S2_I2S) && !defined(CONFIG_AUDIO_CS4344) && \
!defined(CONFIG_AUDIO_ES8311)
#ifdef CONFIG_ESPRESSIF_I2S
# include "espressif/esp_i2s.h"
#endif
#if (defined(CONFIG_ESP32S2_I2S) && !defined(CONFIG_AUDIO_CS4344) && \
!defined(CONFIG_AUDIO_ES8311)) || defined(CONFIG_ESPRESSIF_I2S)
/****************************************************************************
* Public Functions
@@ -74,7 +80,11 @@ int board_i2sdev_initialize(bool enable_tx, bool enable_rx)
ainfo("Initializing I2S\n");
#ifdef CONFIG_ESP32S2_I2S
i2s = esp32s2_i2sbus_initialize();
#else
i2s = esp_i2sbus_initialize(0);
#endif
#ifdef CONFIG_AUDIO_I2SCHAR
ret = i2schar_register(i2s, 0);
@@ -164,7 +164,8 @@ int board_i2c_init(void);
*
****************************************************************************/
#if defined(CONFIG_ESP32S2_I2S) && !defined(CONFIG_AUDIO_ES8311)
#if (defined(CONFIG_ESP32S2_I2S) && !defined(CONFIG_AUDIO_ES8311)) || \
defined(CONFIG_ESPRESSIF_I2S)
int board_i2sdev_initialize(void);
#endif
@@ -198,7 +198,8 @@ int board_bmp180_initialize(int devno, int busno);
*
****************************************************************************/
#if defined(CONFIG_ESP32S2_I2S) && !defined(CONFIG_AUDIO_CS4344)
#if (defined(CONFIG_ESP32S2_I2S) && !defined(CONFIG_AUDIO_ES8311)) || \
defined(CONFIG_ESPRESSIF_I2S)
int board_i2sdev_initialize(bool enable_tx, bool enable_rx);
#endif
@@ -357,7 +357,7 @@ int esp32s2_bringup(void)
}
#endif
#ifdef CONFIG_ESP32S2_I2S
#if defined(CONFIG_ESP32S2_I2S) || defined(CONFIG_ESPRESSIF_I2S)
#ifdef CONFIG_AUDIO_CS4344
@@ -373,17 +373,17 @@ int esp32s2_bringup(void)
bool i2s_enable_tx;
bool i2s_enable_rx;
#ifdef CONFIG_ESP32S2_I2S_TX
#if defined(CONFIG_ESP32S2_I2S_TX) || defined(CONFIG_ESPRESSIF_I2S0_TX)
i2s_enable_tx = true;
#else
i2s_enable_tx = false;
#endif /* CONFIG_ESP32S2_I2S_TX */
#endif /* CONFIG_ESP32S2_I2S_TX || CONFIG_ESPRESSIF_I2S0_TX */
#ifdef CONFIG_ESP32S2_I2S_RX
#if defined(CONFIG_ESP32S2_I2S_RX) || defined(CONFIG_ESPRESSIF_I2S0_RX)
i2s_enable_rx = true;
#else
i2s_enable_rx = false;
#endif /* CONFIG_ESP32S2_I2S_RX */
#endif /* CONFIG_ESP32S2_I2S_RX || CONFIG_ESPRESSIF_I2S0_RX */
/* Configure I2S generic audio on I2S0 */
@@ -394,7 +394,7 @@ int esp32s2_bringup(void)
}
#endif /* CONFIG_AUDIO_CS4344 */
#endif /* CONFIG_ESP32S2_I2S */
#endif /* CONFIG_ESP32S2_I2S || CONFIG_ESPRESSIF_I2S */
#ifdef CONFIG_ESP_RMT
ret = board_rmt_txinitialize(RMT_TXCHANNEL, RMT_OUTPUT_PIN);
@@ -50,6 +50,10 @@ ifeq ($(CONFIG_ESP32S3_I2S),y)
CSRCS += esp32s3_board_i2s.c
endif
ifeq ($(CONFIG_ESPRESSIF_I2S),y)
CSRCS += esp32s3_board_i2s.c
endif
ifeq ($(CONFIG_AUDIO_CS4344),y)
CSRCS += esp32s3_cs4344.c
endif
@@ -37,10 +37,14 @@
#include <arch/board/board.h>
#ifdef CONFIG_ESP32S3_I2S
#include "esp32s3_i2s.h"
#else
#include "espressif/esp_i2s.h"
#endif
#if (defined(CONFIG_ESP32S3_I2S0) && !defined(CONFIG_AUDIO_CS4344)) || \
defined(CONFIG_ESP32S3_I2S1)
defined(CONFIG_ESP32S3_I2S1) || defined(CONFIG_ESPRESSIF_I2S)
/****************************************************************************
* Public Functions
@@ -75,7 +79,11 @@ int board_i2sdev_initialize(int port, bool enable_tx, bool enable_rx)
ainfo("Initializing I2S\n");
#ifdef CONFIG_ESP32S3_I2S
i2s = esp32s3_i2sbus_initialize(port);
#else
i2s = esp_i2sbus_initialize(port);
#endif
#ifdef CONFIG_AUDIO_I2SCHAR
ret = i2schar_register(i2s, port);
@@ -0,0 +1,64 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
# CONFIG_ARCH_LEDS is not set
# CONFIG_NDEBUG is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
CONFIG_ARCH="xtensa"
CONFIG_ARCH_BOARD="esp32s3-devkit"
CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_ESP32S3_DEVKIT=y
CONFIG_ARCH_CHIP="esp32s3"
CONFIG_ARCH_CHIP_ESP32S3=y
CONFIG_ARCH_CHIP_ESP32S3WROOM1N4=y
CONFIG_ARCH_INTERRUPTSTACK=2048
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_XTENSA=y
CONFIG_AUDIO=y
CONFIG_AUDIO_I2S=y
CONFIG_AUDIO_I2SCHAR=y
CONFIG_BOARD_LOOPSPERMSEC=16717
CONFIG_BUILTIN=y
CONFIG_DEBUG_FULLOPT=y
CONFIG_DEBUG_SYMBOLS=y
CONFIG_DRIVERS_AUDIO=y
CONFIG_ESP32S3_UART0=y
CONFIG_ESPRESSIF_I2S0=y
CONFIG_ESPRESSIF_I2S0_MCLK=y
CONFIG_EXAMPLES_I2SCHAR=y
CONFIG_EXAMPLES_I2SCHAR_BUFSIZE=1024
CONFIG_EXAMPLES_I2SCHAR_RX=y
CONFIG_EXAMPLES_I2SCHAR_RXBUFFERS=2
CONFIG_EXAMPLES_I2SCHAR_RXSTACKSIZE=4096
CONFIG_EXAMPLES_I2SCHAR_TX=y
CONFIG_EXAMPLES_I2SCHAR_TXBUFFERS=2
CONFIG_EXAMPLES_I2SCHAR_TXSTACKSIZE=4096
CONFIG_FS_PROCFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_IDLETHREAD_STACKSIZE=3072
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_INIT_STACKSIZE=4096
CONFIG_INTELHEX_BINARY=y
CONFIG_LINE_MAX=64
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_READLINE=y
CONFIG_PREALLOC_TIMERS=4
CONFIG_RAM_SIZE=114688
CONFIG_RAM_START=0x20000000
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=6
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2011
CONFIG_SYSLOG_BUFFER=y
CONFIG_SYSTEM_NSH=y
CONFIG_UART0_SERIAL_CONSOLE=y
@@ -179,7 +179,7 @@ int board_bmp180_initialize(int devno, int busno);
*
****************************************************************************/
#ifdef CONFIG_ESP32S3_I2S
#if defined(CONFIG_ESP32S3_I2S) || defined(CONFIG_ESPRESSIF_I2S)
int board_i2sdev_initialize(int port, bool enable_tx, bool enable_rx);
#endif
@@ -68,6 +68,10 @@
# include "esp32s3_i2s.h"
#endif
#ifdef CONFIG_ESPRESSIF_I2S
# include "espressif/esp_i2s.h"
#endif
#ifdef CONFIG_WATCHDOG
# include "esp32s3_board_wdt.h"
#endif
@@ -161,7 +165,7 @@ int esp32s3_bringup(void)
{
int ret;
#if (defined(CONFIG_ESP32S3_I2S0) && !defined(CONFIG_AUDIO_CS4344)) || \
defined(CONFIG_ESP32S3_I2S1)
defined(CONFIG_ESP32S3_I2S1) || defined(CONFIG_ESPRESSIF_I2S)
bool i2s_enable_tx;
bool i2s_enable_rx;
#endif
@@ -350,7 +354,7 @@ int esp32s3_bringup(void)
}
#endif
#ifdef CONFIG_ESP32S3_I2S
#if defined(CONFIG_ESP32S3_I2S) || defined(CONFIG_ESPRESSIF_I2S)
#ifdef CONFIG_AUDIO_CS4344
@@ -363,17 +367,17 @@ int esp32s3_bringup(void)
}
#else
#ifdef CONFIG_ESP32S3_I2S0_TX
#if defined(CONFIG_ESP32S3_I2S0_TX) || defined(CONFIG_ESPRESSIF_I2S0_TX)
i2s_enable_tx = true;
#else
i2s_enable_tx = false;
#endif /* CONFIG_ESP32S3_I2S0_TX */
#endif /* CONFIG_ESP32S3_I2S0_TX || CONFIG_ESPRESSIF_I2S0_TX */
#ifdef CONFIG_ESP32S3_I2S0_RX
#if defined(CONFIG_ESP32S3_I2S0_RX) || defined(CONFIG_ESPRESSIF_I2S0_RX)
i2s_enable_rx = true;
#else
i2s_enable_rx = false;
#endif /* CONFIG_ESP32S3_I2S0_RX */
#endif /* CONFIG_ESP32S3_I2S0_RX || CONFIG_ESPRESSIF_I2S0_RX */
/* Configure I2S generic audio on I2S0 */
@@ -384,19 +388,19 @@ int esp32s3_bringup(void)
}
#endif /* CONFIG_AUDIO_CS4344 */
#ifdef CONFIG_ESP32S3_I2S1
#if defined(CONFIG_ESP32S3_I2S1) || defined(CONFIG_ESPRESSIF_I2S1)
#ifdef CONFIG_ESP32S3_I2S1_TX
#if defined(CONFIG_ESP32S3_I2S1_TX) || defined(CONFIG_ESPRESSIF_I2S1_TX)
i2s_enable_tx = true;
#else
i2s_enable_tx = false;
#endif /* CONFIG_ESP32S3_I2S1_TX */
#ifdef CONFIG_ESP32S3_I2S1_RX
#if defined(CONFIG_ESP32S3_I2S1_RX) || defined(CONFIG_ESPRESSIF_I2S1_RX)
i2s_enable_rx = true;
#else
i2s_enable_rx = false;
#endif /* CONFIG_ESP32S3_I2S1_RX */
#endif /* CONFIG_ESP32S3_I2S1_RX || CONFIG_ESPRESSIF_I2S1_RX */
/* Configure I2S generic audio on I2S1 */
@@ -404,12 +408,12 @@ int esp32s3_bringup(void)
if (ret < 0)
{
syslog(LOG_ERR, "Failed to initialize I2S%d driver: %d\n",
CONFIG_ESP32S3_I2S1, ret);
ESP32S3_I2S1, ret);
}
#endif /* CONFIG_ESP32S3_I2S1 */
#endif /* CONFIG_ESP32S3_I2S1 || CONFIG_ESPRESSIF_I2S1 */
#endif /* CONFIG_ESP32S3_I2S */
#endif /* CONFIG_ESP32S3_I2S || CONFIG_ESPRESSIF_I2S */
#ifdef CONFIG_INPUT_BUTTONS
/* Register the BUTTON driver */