This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push: new b25c4ec963 esp32[s3]: Add ES8311 support for esp32s3-lcd-ev board b25c4ec963 is described below commit b25c4ec9633085b4f6a694b935f7a5866938ddf2 Author: Eren Terzioglu <eren.terzio...@espressif.com> AuthorDate: Fri Jan 24 12:09:06 2025 +0100 esp32[s3]: Add ES8311 support for esp32s3-lcd-ev board --- .../esp32s3/esp32s3-lcd-ev/configs/audio/defconfig | 111 +++++++++++++++++++++ .../xtensa/esp32s3/esp32s3-lcd-ev/include/board.h | 7 ++ .../esp32s3/esp32s3-lcd-ev/src/esp32s3-lcd-ev.h | 29 ++++++ .../esp32s3/esp32s3-lcd-ev/src/esp32s3_bringup.c | 81 +++++++++++++++ 4 files changed, 228 insertions(+) diff --git a/boards/xtensa/esp32s3/esp32s3-lcd-ev/configs/audio/defconfig b/boards/xtensa/esp32s3/esp32s3-lcd-ev/configs/audio/defconfig new file mode 100644 index 0000000000..1ff28a67d9 --- /dev/null +++ b/boards/xtensa/esp32s3/esp32s3-lcd-ev/configs/audio/defconfig @@ -0,0 +1,111 @@ +# +# 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_AUDIO_FORMAT_MP3 is not set +# CONFIG_AUDIO_FORMAT_SBC is not set +# CONFIG_ESP32S3_I2S0_RX is not set +# CONFIG_NSH_ARGCAT is not set +# CONFIG_NSH_CMDOPT_HEXDUMP is not set +CONFIG_ALLOW_BSD_COMPONENTS=y +CONFIG_ARCH="xtensa" +CONFIG_ARCH_BOARD="esp32s3-lcd-ev" +CONFIG_ARCH_BOARD_COMMON=y +CONFIG_ARCH_BOARD_ESP32S3_LCD_EV=y +CONFIG_ARCH_CHIP="esp32s3" +CONFIG_ARCH_CHIP_ESP32S3=y +CONFIG_ARCH_CHIP_ESP32S3WROOM2N16R8V=y +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARCH_XTENSA=y +CONFIG_AUDIO=y +CONFIG_AUDIO_ES8311=y +CONFIG_AUDIO_EXCLUDE_BALANCE=y +CONFIG_AUDIO_EXCLUDE_FFORWARD=y +CONFIG_AUDIO_EXCLUDE_TONE=y +CONFIG_AUDIO_I2S=y +CONFIG_AUDIO_I2SCHAR=y +CONFIG_AUDIO_NUM_BUFFERS=8 +CONFIG_BOARD_LOOPSPERMSEC=16717 +CONFIG_BUILTIN=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DRIVERS_AUDIO=y +CONFIG_DRIVERS_IEEE80211=y +CONFIG_DRIVERS_WIRELESS=y +CONFIG_ESP32S3_I2C0=y +CONFIG_ESP32S3_I2C0_SCLPIN=18 +CONFIG_ESP32S3_I2C0_SDAPIN=17 +CONFIG_ESP32S3_I2S0=y +CONFIG_ESP32S3_I2S0_BCLKPIN=9 +CONFIG_ESP32S3_I2S0_DOUTPIN=8 +CONFIG_ESP32S3_I2S0_MCLK=y +CONFIG_ESP32S3_I2S0_MCLKPIN=16 +CONFIG_ESP32S3_I2S0_WSPIN=45 +CONFIG_ESP32S3_I2S=y +CONFIG_ESP32S3_SPIFLASH=y +CONFIG_ESP32S3_SPIFLASH_SPIFFS=y +CONFIG_ESP32S3_UART0=y +CONFIG_ESP32S3_WIFI=y +CONFIG_EXAMPLES_RANDOM=y +CONFIG_FS_PROCFS=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_I2S_DMADESC_NUM=4 +CONFIG_IDLETHREAD_STACKSIZE=3072 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INIT_STACKSIZE=3072 +CONFIG_INTELHEX_BINARY=y +CONFIG_IOB_NBUFFERS=124 +CONFIG_IOB_THROTTLE=24 +CONFIG_LINE_MAX=64 +CONFIG_NETDB_DNSCLIENT=y +CONFIG_NETDEV_LATEINIT=y +CONFIG_NETDEV_PHY_IOCTL=y +CONFIG_NETDEV_WIRELESS_IOCTL=y +CONFIG_NETUTILS_CJSON=y +CONFIG_NET_BROADCAST=y +CONFIG_NET_ETH_PKTSIZE=1518 +CONFIG_NET_ICMP_SOCKET=y +CONFIG_NET_STATISTICS=y +CONFIG_NET_TCP=y +CONFIG_NET_TCP_DELAYED_ACK=y +CONFIG_NET_TCP_WRITE_BUFFERS=y +CONFIG_NET_UDP=y +CONFIG_NET_UDP_WRITE_BUFFERS=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_READLINE=y +CONFIG_NXPLAYER_HTTP_STREAMING_SUPPORT=y +CONFIG_NXPLAYER_MAINTHREAD_STACKSIZE=4096 +CONFIG_PREALLOC_TIMERS=4 +CONFIG_PTHREAD_MUTEX_TYPES=y +CONFIG_RAM_SIZE=114688 +CONFIG_RAM_START=0x20000000 +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_WAITPID=y +CONFIG_SMP=y +CONFIG_SMP_NCPUS=2 +CONFIG_SPIFFS_NAME_MAX=128 +CONFIG_START_DAY=6 +CONFIG_START_MONTH=12 +CONFIG_START_YEAR=2011 +CONFIG_SYSLOG_BUFFER=y +CONFIG_SYSTEM_DHCPC_RENEW=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_NXPLAYER=y +CONFIG_SYSTEM_PING=y +CONFIG_TIMER=y +CONFIG_TLS_NELEM=4 +CONFIG_TLS_TASK_NELEM=4 +CONFIG_UART0_SERIAL_CONSOLE=y +CONFIG_WIRELESS=y +CONFIG_WIRELESS_WAPI=y +CONFIG_WIRELESS_WAPI_CMDTOOL=y +CONFIG_WIRELESS_WAPI_INITCONF=y +CONFIG_WIRELESS_WAPI_STACKSIZE=4096 diff --git a/boards/xtensa/esp32s3/esp32s3-lcd-ev/include/board.h b/boards/xtensa/esp32s3/esp32s3-lcd-ev/include/board.h index f37bacb6a7..e76902b8f8 100644 --- a/boards/xtensa/esp32s3/esp32s3-lcd-ev/include/board.h +++ b/boards/xtensa/esp32s3/esp32s3-lcd-ev/include/board.h @@ -39,4 +39,11 @@ # define BOARD_CLOCK_FREQUENCY 80000000 #endif +/* Peripherals definitions **************************************************/ + +#ifdef CONFIG_AUDIO_ES8311 +# define ES8311_I2C_FREQ 100000 +# define ES8311_I2C_ADDR 0x18 +#endif + #endif /* __BOARDS_XTENSA_ESP32S3_ESP32S3_LCD_EV_INCLUDE_BOARD_H */ diff --git a/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3-lcd-ev.h b/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3-lcd-ev.h index 7e931a625f..c6a728d091 100644 --- a/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3-lcd-ev.h +++ b/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3-lcd-ev.h @@ -45,6 +45,10 @@ #define I2C_PORT 0 +#ifdef CONFIG_AUDIO_ES8311 +# define SPEAKER_ENABLE_GPIO 4 +#endif + /**************************************************************************** * Public Types ****************************************************************************/ @@ -194,5 +198,30 @@ int board_ioexpander_output(int pin, bool level); int board_ioexpander_initialize(void); #endif +/**************************************************************************** + * Name: esp32s3_es8311_initialize + * + * Description: + * This function is called by platform-specific, setup logic to configure + * and register the ES8311 device. This function will register the driver + * as /dev/audio/pcm[x] where x is determined by the I2S port number. + * + * Input Parameters: + * i2c_port - The I2C port used for the device + * i2c_addr - The I2C address used by the device + * i2c_freq - The I2C frequency used for the device + * i2s_port - The I2S port used for the device + * + * Returned Value: + * Zero is returned on success. Otherwise, a negated errno value is + * returned to indicate the nature of the failure. + * + ****************************************************************************/ + +#ifdef CONFIG_AUDIO_ES8311 +int esp32s3_es8311_initialize(int i2c_port, uint8_t i2c_addr, int i2c_freq, + int i2s_port); +#endif + #endif /* __ASSEMBLY__ */ #endif /* __BOARDS_XTENSA_ESP32S3_ESP32S3_LCD_EV_SRC_ESP32S3_LCD_EV_H */ diff --git a/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3_bringup.c b/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3_bringup.c index cf9a4573a0..084a2b6202 100644 --- a/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3_bringup.c +++ b/boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3_bringup.c @@ -37,6 +37,9 @@ #include <errno.h> #include <nuttx/fs/fs.h> +#include <arch/board/board.h> + +#include "esp32s3_gpio.h" #ifdef CONFIG_ESP32S3_TIMER # include "esp32s3_board_tim.h" @@ -54,6 +57,14 @@ # include "esp32s3_wifi_adapter.h" #endif +#ifdef CONFIG_ESP32S3_I2C +# include "esp32s3_i2c.h" +#endif + +#ifdef CONFIG_ESP32S3_I2S +# include "esp32s3_i2s.h" +#endif + #ifdef CONFIG_ESP32S3_RT_TIMER # include "esp32s3_rt_timer.h" #endif @@ -101,6 +112,11 @@ int esp32s3_bringup(void) { int ret; +#if (defined(CONFIG_ESP32S3_I2S0) && !defined(CONFIG_AUDIO_CS4344) && \ + !defined(CONFIG_AUDIO_ES8311)) || defined(CONFIG_ESP32S3_I2S1) + bool i2s_enable_tx; + bool i2s_enable_rx; +#endif #if defined(CONFIG_ESP32S3_EFUSE) ret = esp32s3_efuse_initialize("/dev/efuse"); @@ -170,6 +186,71 @@ int esp32s3_bringup(void) } #endif +#ifdef CONFIG_ESP32S3_I2S +# ifdef CONFIG_ESP32S3_I2S0 +# ifdef CONFIG_AUDIO_ES8311 + + /* Configure ES8311 audio on I2C0 and I2S0 */ + + esp32s3_configgpio(SPEAKER_ENABLE_GPIO, OUTPUT); + esp32s3_gpiowrite(SPEAKER_ENABLE_GPIO, true); + + ret = esp32s3_es8311_initialize(ESP32S3_I2C0, ES8311_I2C_ADDR, + ES8311_I2C_FREQ, ESP32S3_I2S0); + if (ret != OK) + { + syslog(LOG_ERR, "Failed to initialize ES8311 audio: %d\n", ret); + } + +# else +# ifdef CONFIG_ESP32S3_I2S0_TX + i2s_enable_tx = true; +# else + i2s_enable_tx = false; +# endif /* CONFIG_ESP32S3_I2S0_TX */ + +# ifdef CONFIG_ESP32S3_I2S0_RX + i2s_enable_rx = true; +# else + i2s_enable_rx = false; +# endif /* CONFIG_ESP32S3_I2S0_RX */ + + /* Configure I2S generic audio on I2S0 */ + + ret = board_i2sdev_initialize(ESP32S3_I2S0, i2s_enable_tx, i2s_enable_rx); + if (ret < 0) + { + syslog(LOG_ERR, "Failed to initialize I2S0 driver: %d\n", ret); + } + +# endif /* CONFIG_AUDIO_ES8311 */ +# endif /* CONFIG_ESP32S3_I2S0 */ + +# ifdef CONFIG_ESP32S3_I2S1 +# ifdef CONFIG_ESP32S3_I2S1_TX + i2s_enable_tx = true; +# else + i2s_enable_tx = false; +# endif /* CONFIG_ESP32S3_I2S1_TX */ + +# ifdef CONFIG_ESP32S3_I2S1_RX + i2s_enable_rx = true; +# else + i2s_enable_rx = false; +# endif /* CONFIG_ESP32S3_I2S1_RX */ + + /* Configure I2S generic audio on I2S1 */ + + ret = board_i2sdev_initialize(ESP32S3_I2S1, i2s_enable_tx, i2s_enable_rx); + if (ret < 0) + { + syslog(LOG_ERR, "Failed to initialize I2S%d driver: %d\n", + CONFIG_ESP32S3_I2S1, ret); + } + +# endif /* CONFIG_ESP32S3_I2S1 */ +#endif /* CONFIG_ESP32S3_I2S */ + #ifdef CONFIG_INPUT_BUTTONS /* Register the BUTTON driver */