Skip to content

Commit 06b37fe

Browse files
fdcavalcantixiaoxiang781216
authored andcommitted
arch/risc-v: set SCL timeout for esp_i2c.c
Adds proper timeout settings to SCL on ESP32C3|C6|H2. Signed-off-by: Filipe Cavalcanti <[email protected]>
1 parent 26eb283 commit 06b37fe

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

arch/risc-v/src/common/espressif/esp_i2c.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
#include "soc/system_reg.h"
6161
#include "soc/gpio_sig_map.h"
6262
#include "soc/i2c_periph.h"
63+
#include "esp_clk_tree.h"
6364
#if defined(CONFIG_ESPRESSIF_ESP32H2) || defined(CONFIG_ESPRESSIF_ESP32C6)
6465
# include "soc/pcr_reg.h"
6566
#endif
@@ -129,6 +130,10 @@
129130

130131
#define I2C_CLR_BUS_TIMEOUT_MS (50)
131132

133+
/* SCL timeout value in microseconds */
134+
135+
#define SCL_TIMEOUT_VAL_US (CONFIG_ESPRESSIF_I2CTIMEOMS * 1000)
136+
132137
/****************************************************************************
133138
* Private Types
134139
****************************************************************************/
@@ -713,14 +718,21 @@ static void esp_i2c_sendstop(struct esp_i2c_priv_s *priv)
713718
static void esp_i2c_init_clock(struct esp_i2c_priv_s *priv,
714719
uint32_t bus_freq)
715720
{
721+
uint32_t src_clk_frequency;
722+
716723
if (bus_freq == priv->clk_freq)
717724
{
718725
return ;
719726
}
720727

721728
i2c_clock_source_t src_clk = I2C_CLK_SRC_DEFAULT;
729+
esp_clk_tree_src_get_freq_hz((soc_module_clk_t)src_clk,
730+
ESP_CLK_TREE_SRC_FREQ_PRECISION_CACHED,
731+
&src_clk_frequency);
722732
i2c_hal_set_bus_timing(priv->ctx, priv->config->clk_freq,
723-
src_clk, XTAL_CLK_FREQ);
733+
src_clk, src_clk_frequency);
734+
i2c_hal_master_set_scl_timeout_val(priv->ctx, SCL_TIMEOUT_VAL_US,
735+
src_clk_frequency);
724736
i2c_ll_update(priv->ctx->dev);
725737
priv->clk_freq = bus_freq;
726738
}

0 commit comments

Comments
 (0)