Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 1 commit into from
Feb 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions boards/xtensa/esp32s3/esp32s3-lcd-ev/configs/audio/defconfig
Original file line number Diff line number Diff line change
@@ -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
7 changes: 7 additions & 0 deletions boards/xtensa/esp32s3/esp32s3-lcd-ev/include/board.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
29 changes: 29 additions & 0 deletions boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3-lcd-ev.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@

#define I2C_PORT 0

#ifdef CONFIG_AUDIO_ES8311
# define SPEAKER_ENABLE_GPIO 4
#endif

/****************************************************************************
* Public Types
****************************************************************************/
Expand Down Expand Up @@ -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 */
81 changes: 81 additions & 0 deletions boards/xtensa/esp32s3/esp32s3-lcd-ev/src/esp32s3_bringup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -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");
Expand Down Expand Up @@ -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 */

Expand Down