From fca329945b217e454cb92c5c6cf745b482b1f1d8 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Mon, 23 May 2016 13:38:34 -0600 Subject: [PATCH] This patch ensures that the TWIHS (i2c) hw get's its clock set when the sequence of sam_i2cbus_initialize sam_i2cbus_uninitialize sam_i2cbus_initialize Or twi_reset is called. I found this a while back in the stm32 family, so there may be more arch-es with this sort of bug. I suppose any driver that has the notion of "do not set the freq if it is already set" could be suspect. --- arch/arm/src/sam34/sam_twi.c | 1 + arch/arm/src/sama5/sam_twi.c | 1 + arch/arm/src/samv7/sam_twihs.c | 1 + 3 files changed, 3 insertions(+) diff --git a/arch/arm/src/sam34/sam_twi.c b/arch/arm/src/sam34/sam_twi.c index a71525b6276..f8c2f7f7caf 100644 --- a/arch/arm/src/sam34/sam_twi.c +++ b/arch/arm/src/sam34/sam_twi.c @@ -901,6 +901,7 @@ static void twi_hw_initialize(struct twi_dev_s *priv, unsigned int pid, /* Set the initial TWI data transfer frequency */ + priv->i2cfreq = 0; twi_setfrequency(priv, frequency); } diff --git a/arch/arm/src/sama5/sam_twi.c b/arch/arm/src/sama5/sam_twi.c index 8944de9ed4b..c9b17e11e27 100644 --- a/arch/arm/src/sama5/sam_twi.c +++ b/arch/arm/src/sama5/sam_twi.c @@ -1200,6 +1200,7 @@ static void twi_hw_initialize(struct twi_dev_s *priv, uint32_t frequency) /* Set the initial TWI data transfer frequency */ + priv->frequency = 0 twi_setfrequency(priv, frequency); /* Enable Interrupts */ diff --git a/arch/arm/src/samv7/sam_twihs.c b/arch/arm/src/samv7/sam_twihs.c index f11ae78cbb3..fa5a8b2a525 100644 --- a/arch/arm/src/samv7/sam_twihs.c +++ b/arch/arm/src/samv7/sam_twihs.c @@ -1230,6 +1230,7 @@ static void twi_hw_initialize(struct twi_dev_s *priv, uint32_t frequency) /* Set the initial TWIHS data transfer frequency */ + priv->frequency = 0; twi_setfrequency(priv, frequency); /* Enable Interrupts */