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

Reply via email to