diff --git a/arch/arm/src/stm32/stm32_i2c.c b/arch/arm/src/stm32/stm32_i2c.c index fe7bf385ba..8745f824c0 100644 --- a/arch/arm/src/stm32/stm32_i2c.c +++ b/arch/arm/src/stm32/stm32_i2c.c @@ -1556,6 +1556,11 @@ static int stm32_i2c_init(FAR struct stm32_i2c_priv_s *priv) */ stm32_i2c_putreg(priv, STM32_I2C_CR2_OFFSET, (STM32_PCLK1_FREQUENCY / 1000000)); + + /* Force a frequency update */ + + priv->frequency = 0; + stm32_i2c_setclock(priv, 100000); /* Enable I2C */ @@ -1829,6 +1834,7 @@ static int stm32_i2c_reset(FAR struct i2c_master_s *dev) uint32_t scl_gpio; uint32_t sda_gpio; int ret = ERROR; + uint32_t freqency; ASSERT(dev); @@ -1840,6 +1846,10 @@ static int stm32_i2c_reset(FAR struct i2c_master_s *dev) stm32_i2c_sem_wait(priv); + /* Save the current frequency */ + + freqency = priv->frequency; + /* De-init the port */ stm32_i2c_deinit(priv); @@ -1918,6 +1928,10 @@ static int stm32_i2c_reset(FAR struct i2c_master_s *dev) /* Re-init the port */ stm32_i2c_init(priv); + + /* Restore the frequecncy */ + + stm32_i2c_setclock(priv, freqency); ret = OK; out: