mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 23:35:05 +08:00
boards/xtensa/esp32s3: Refactor ES8311 initialization to use I2C handle
Refactor esp32s3_es8311_initialize function to accept I2C handle instead of port number, moving I2C bus initialization responsibility to the board bringup code. This change improves flexibility by allowing boards to manage I2C initialization while the ES8311 driver focuses on audio codec configuration. * Updated function signature to accept struct i2c_master_s *i2c parameter * Removed I2C bus initialization from ES8311 driver * Updated function documentation to reflect new parameter * Modified esp32s3-lcd-ev and esp32s3-korvo-2 boards to initialize I2C before calling ES8311 initialization * Added proper error handling for I2C initialization failures * Moved variable declarations to function start for C89 compliance * Fixed code style issues including line length and indentation This change maintains backward compatibility for existing functionality while providing better separation of concerns between I2C bus management and audio codec configuration. Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
This commit is contained in:
@@ -65,7 +65,7 @@ static struct es8311_lower_s g_es8311_lower[2];
|
|||||||
* as /dev/audio/pcm[x] where x is determined by the I2S port number.
|
* as /dev/audio/pcm[x] where x is determined by the I2S port number.
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* i2c_port - The I2C port used for the device
|
* i2c - The I2C handle used for the device
|
||||||
* i2c_addr - The I2C address used by the device
|
* i2c_addr - The I2C address used by the device
|
||||||
* i2c_freq - The I2C frequency used for the device
|
* i2c_freq - The I2C frequency used for the device
|
||||||
* i2s_port - The I2S port used for the device
|
* i2s_port - The I2S port used for the device
|
||||||
@@ -76,17 +76,16 @@ static struct es8311_lower_s g_es8311_lower[2];
|
|||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
int esp32s3_es8311_initialize(int i2c_port, uint8_t i2c_addr, int i2c_freq,
|
int esp32s3_es8311_initialize(struct i2c_master_s *i2c, uint8_t i2c_addr,
|
||||||
int i2s_port)
|
int i2c_freq, int i2s_port)
|
||||||
{
|
{
|
||||||
struct audio_lowerhalf_s *es8311;
|
struct audio_lowerhalf_s *es8311;
|
||||||
struct i2s_dev_s *i2s;
|
struct i2s_dev_s *i2s;
|
||||||
struct i2c_master_s *i2c;
|
|
||||||
static bool initialized = false;
|
static bool initialized = false;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
audinfo("i2c_port %d, i2c_addr %d, i2c_freq %d\n",
|
audinfo("i2c_addr %d, i2c_freq %d\n",
|
||||||
i2c_port, i2c_addr, i2c_freq);
|
i2c_addr, i2c_freq);
|
||||||
|
|
||||||
/* Have we already initialized? Since we never uninitialize we must
|
/* Have we already initialized? Since we never uninitialize we must
|
||||||
* prevent multiple initializations. This is necessary, for example,
|
* prevent multiple initializations. This is necessary, for example,
|
||||||
@@ -107,10 +106,9 @@ int esp32s3_es8311_initialize(int i2c_port, uint8_t i2c_addr, int i2c_freq,
|
|||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
i2c = esp32s3_i2cbus_initialize(i2c_port);
|
|
||||||
if (i2c == NULL)
|
if (i2c == NULL)
|
||||||
{
|
{
|
||||||
auderr("ERROR: Failed to initialize I2C%d\n", i2c_port);
|
auderr("ERROR: I2C handle is NULL\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
#include <nuttx/compiler.h>
|
#include <nuttx/compiler.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <nuttx/i2c/i2c_master.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
@@ -100,7 +101,7 @@ int board_spiflash_init(void);
|
|||||||
* as /dev/audio/pcm[x] where x is determined by the I2S port number.
|
* as /dev/audio/pcm[x] where x is determined by the I2S port number.
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* i2c_port - The I2C port used for the device
|
* i2c - The I2C handle used for the device
|
||||||
* i2c_addr - The I2C address used by the device
|
* i2c_addr - The I2C address used by the device
|
||||||
* i2c_freq - The I2C frequency used for the device
|
* i2c_freq - The I2C frequency used for the device
|
||||||
* i2s_port - The I2S port used for the device
|
* i2s_port - The I2S port used for the device
|
||||||
@@ -112,8 +113,8 @@ int board_spiflash_init(void);
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_AUDIO_ES8311
|
#ifdef CONFIG_AUDIO_ES8311
|
||||||
int esp32s3_es8311_initialize(int i2c_port, uint8_t i2c_addr, int i2c_freq,
|
int esp32s3_es8311_initialize(struct i2c_master_s *i2c, uint8_t i2c_addr,
|
||||||
int i2s_port);
|
int i2c_freq, int i2s_port);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|||||||
@@ -140,12 +140,15 @@
|
|||||||
|
|
||||||
int esp32s3_bringup(void)
|
int esp32s3_bringup(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = OK;
|
||||||
#if (defined(CONFIG_ESPRESSIF_I2S0) && !defined(CONFIG_AUDIO_CS4344) && \
|
#if (defined(CONFIG_ESPRESSIF_I2S0) && !defined(CONFIG_AUDIO_CS4344) && \
|
||||||
!defined(CONFIG_AUDIO_ES8311)) || defined(CONFIG_ESPRESSIF_I2S1)
|
!defined(CONFIG_AUDIO_ES8311)) || defined(CONFIG_ESPRESSIF_I2S1)
|
||||||
bool i2s_enable_tx;
|
bool i2s_enable_tx;
|
||||||
bool i2s_enable_rx;
|
bool i2s_enable_rx;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_AUDIO_ES8311
|
||||||
|
struct i2c_master_s *i2c;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ESP32S3_SPIRAM) && \
|
#if defined(CONFIG_ESP32S3_SPIRAM) && \
|
||||||
defined(CONFIG_ESP32S3_SPIRAM_BANKSWITCH_ENABLE)
|
defined(CONFIG_ESP32S3_SPIRAM_BANKSWITCH_ENABLE)
|
||||||
@@ -311,8 +314,22 @@ int esp32s3_bringup(void)
|
|||||||
esp32s3_configgpio(SPEAKER_ENABLE_GPIO, OUTPUT);
|
esp32s3_configgpio(SPEAKER_ENABLE_GPIO, OUTPUT);
|
||||||
esp32s3_gpiowrite(SPEAKER_ENABLE_GPIO, true);
|
esp32s3_gpiowrite(SPEAKER_ENABLE_GPIO, true);
|
||||||
|
|
||||||
ret = esp32s3_es8311_initialize(ESP32S3_I2C0, ES8311_I2C_ADDR,
|
i2c = esp32s3_i2cbus_initialize(ESP32S3_I2C0);
|
||||||
ES8311_I2C_FREQ, ESP32S3_I2S0);
|
if (i2c == NULL)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "Failed to initialize I2C%d\n", ESP32S3_I2C0);
|
||||||
|
ret = -ENODEV;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = esp32s3_es8311_initialize(i2c, ES8311_I2C_ADDR,
|
||||||
|
ES8311_I2C_FREQ, ESP32S3_I2S0);
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "Failed to initialize ES8311 audio: %d\n", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, "Failed to initialize ES8311 audio: %d\n", ret);
|
syslog(LOG_ERR, "Failed to initialize ES8311 audio: %d\n", ret);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
#include <nuttx/compiler.h>
|
#include <nuttx/compiler.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <nuttx/i2c/i2c_master.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
@@ -207,7 +208,7 @@ int board_ioexpander_initialize(void);
|
|||||||
* as /dev/audio/pcm[x] where x is determined by the I2S port number.
|
* as /dev/audio/pcm[x] where x is determined by the I2S port number.
|
||||||
*
|
*
|
||||||
* Input Parameters:
|
* Input Parameters:
|
||||||
* i2c_port - The I2C port used for the device
|
* i2c - The I2C handle used for the device
|
||||||
* i2c_addr - The I2C address used by the device
|
* i2c_addr - The I2C address used by the device
|
||||||
* i2c_freq - The I2C frequency used for the device
|
* i2c_freq - The I2C frequency used for the device
|
||||||
* i2s_port - The I2S port used for the device
|
* i2s_port - The I2S port used for the device
|
||||||
@@ -219,8 +220,8 @@ int board_ioexpander_initialize(void);
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_AUDIO_ES8311
|
#ifdef CONFIG_AUDIO_ES8311
|
||||||
int esp32s3_es8311_initialize(int i2c_port, uint8_t i2c_addr, int i2c_freq,
|
int esp32s3_es8311_initialize(struct i2c_master_s *i2c, uint8_t i2c_addr,
|
||||||
int i2s_port);
|
int i2c_freq, int i2s_port);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|||||||
@@ -111,12 +111,15 @@
|
|||||||
|
|
||||||
int esp32s3_bringup(void)
|
int esp32s3_bringup(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret = OK;
|
||||||
#if (defined(CONFIG_ESPRESSIF_I2S0) && !defined(CONFIG_AUDIO_CS4344) && \
|
#if (defined(CONFIG_ESPRESSIF_I2S0) && !defined(CONFIG_AUDIO_CS4344) && \
|
||||||
!defined(CONFIG_AUDIO_ES8311)) || defined(CONFIG_ESPRESSIF_I2S1)
|
!defined(CONFIG_AUDIO_ES8311)) || defined(CONFIG_ESPRESSIF_I2S1)
|
||||||
bool i2s_enable_tx;
|
bool i2s_enable_tx;
|
||||||
bool i2s_enable_rx;
|
bool i2s_enable_rx;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_AUDIO_ES8311
|
||||||
|
struct i2c_master_s *i2c;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_ESPRESSIF_EFUSE)
|
#if defined(CONFIG_ESPRESSIF_EFUSE)
|
||||||
ret = esp_efuse_initialize("/dev/efuse");
|
ret = esp_efuse_initialize("/dev/efuse");
|
||||||
@@ -195,8 +198,22 @@ int esp32s3_bringup(void)
|
|||||||
esp32s3_configgpio(SPEAKER_ENABLE_GPIO, OUTPUT);
|
esp32s3_configgpio(SPEAKER_ENABLE_GPIO, OUTPUT);
|
||||||
esp32s3_gpiowrite(SPEAKER_ENABLE_GPIO, true);
|
esp32s3_gpiowrite(SPEAKER_ENABLE_GPIO, true);
|
||||||
|
|
||||||
ret = esp32s3_es8311_initialize(ESP32S3_I2C0, ES8311_I2C_ADDR,
|
i2c = esp32s3_i2cbus_initialize(ESP32S3_I2C0);
|
||||||
ES8311_I2C_FREQ, ESP32S3_I2S0);
|
if (i2c == NULL)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "Failed to initialize I2C%d\n", ESP32S3_I2C0);
|
||||||
|
ret = -ENODEV;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = esp32s3_es8311_initialize(i2c, ES8311_I2C_ADDR,
|
||||||
|
ES8311_I2C_FREQ, ESP32S3_I2S0);
|
||||||
|
if (ret != OK)
|
||||||
|
{
|
||||||
|
syslog(LOG_ERR, "Failed to initialize ES8311 audio: %d\n", ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
{
|
{
|
||||||
syslog(LOG_ERR, "Failed to initialize ES8311 audio: %d\n", ret);
|
syslog(LOG_ERR, "Failed to initialize ES8311 audio: %d\n", ret);
|
||||||
|
|||||||
Reference in New Issue
Block a user