esp32[s3]: Add ES8311 support for esp32s3-lcd-ev board

This commit is contained in:
Eren Terzioglu 2025-01-24 12:09:06 +01:00 committed by Alan C. Assis
parent ac4b5395f1
commit b25c4ec963
4 changed files with 228 additions and 0 deletions

View file

@ -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

View file

@ -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 */

View file

@ -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 */

View file

@ -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 */