From aa6968dcd5d37027c1e157d81d5850107e58ac2a Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 24 Feb 2016 12:02:11 -1000 Subject: [PATCH 1/3] Ensures frequency is updated on reinitalized bus --- arch/arm/src/stm32/stm32_i2c.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/arch/arm/src/stm32/stm32_i2c.c b/arch/arm/src/stm32/stm32_i2c.c index fe7bf385ba..5a28893ced 100644 --- a/arch/arm/src/stm32/stm32_i2c.c +++ b/arch/arm/src/stm32/stm32_i2c.c @@ -935,7 +935,6 @@ static void stm32_i2c_tracedump(FAR struct stm32_i2c_priv_s *priv) * Set the I2C clock * ************************************************************************************/ - static void stm32_i2c_setclock(FAR struct stm32_i2c_priv_s *priv, uint32_t frequency) { uint16_t cr1; @@ -1554,8 +1553,12 @@ static int stm32_i2c_init(FAR struct stm32_i2c_priv_s *priv) /* Set peripheral frequency, where it must be at least 2 MHz for 100 kHz * or 4 MHz for 400 kHz. This also disables all I2C interrupts. */ - 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 +1832,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 +1844,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 +1926,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: From 052b45db0a0869e0bdb0769e5df4106467a6656e Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 24 Feb 2016 22:21:07 +0000 Subject: [PATCH 2/3] Added spacing back --- arch/arm/src/stm32/stm32_i2c.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/src/stm32/stm32_i2c.c b/arch/arm/src/stm32/stm32_i2c.c index 5a28893ced..4986cb4834 100644 --- a/arch/arm/src/stm32/stm32_i2c.c +++ b/arch/arm/src/stm32/stm32_i2c.c @@ -935,6 +935,7 @@ static void stm32_i2c_tracedump(FAR struct stm32_i2c_priv_s *priv) * Set the I2C clock * ************************************************************************************/ + static void stm32_i2c_setclock(FAR struct stm32_i2c_priv_s *priv, uint32_t frequency) { uint16_t cr1; @@ -1553,6 +1554,7 @@ static int stm32_i2c_init(FAR struct stm32_i2c_priv_s *priv) /* Set peripheral frequency, where it must be at least 2 MHz for 100 kHz * or 4 MHz for 400 kHz. This also disables all I2C interrupts. */ + stm32_i2c_putreg(priv, STM32_I2C_CR2_OFFSET, (STM32_PCLK1_FREQUENCY / 1000000)); /* Force a frequency update */ From 3b871c4fa2475e0b7acdcb5da70736c118a8b1e3 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Wed, 24 Feb 2016 22:23:39 +0000 Subject: [PATCH 3/3] No really removed spaces --- arch/arm/src/stm32/stm32_i2c.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/src/stm32/stm32_i2c.c b/arch/arm/src/stm32/stm32_i2c.c index 4986cb4834..8745f824c0 100644 --- a/arch/arm/src/stm32/stm32_i2c.c +++ b/arch/arm/src/stm32/stm32_i2c.c @@ -935,7 +935,7 @@ static void stm32_i2c_tracedump(FAR struct stm32_i2c_priv_s *priv) * Set the I2C clock * ************************************************************************************/ - + static void stm32_i2c_setclock(FAR struct stm32_i2c_priv_s *priv, uint32_t frequency) { uint16_t cr1; @@ -1554,7 +1554,7 @@ static int stm32_i2c_init(FAR struct stm32_i2c_priv_s *priv) /* Set peripheral frequency, where it must be at least 2 MHz for 100 kHz * or 4 MHz for 400 kHz. This also disables all I2C interrupts. */ - + stm32_i2c_putreg(priv, STM32_I2C_CR2_OFFSET, (STM32_PCLK1_FREQUENCY / 1000000)); /* Force a frequency update */