From 4a1b8e5825801d30bb49ceef33de7bf6e20d0600 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Tue, 11 Sep 2018 22:14:37 +0000 Subject: [PATCH] Merged in david_s5/nuttx/master_kinetis_i2c_reset_hf (pull request #718) kinetis:i2c On faild reset re-init i2c and clocking If a reset fails, we still must reinitializes the i2c block so that subsequent transfers will not cause a hardfault due to the clock being off. If that transfer fails it can try to reset again. Approved-by: GregoryN --- arch/arm/src/kinetis/kinetis_i2c.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/arch/arm/src/kinetis/kinetis_i2c.c b/arch/arm/src/kinetis/kinetis_i2c.c index 59dc0e6ab23..6207164bf79 100644 --- a/arch/arm/src/kinetis/kinetis_i2c.c +++ b/arch/arm/src/kinetis/kinetis_i2c.c @@ -1335,17 +1335,16 @@ static int kinetis_i2c_reset(struct i2c_master_s *dev) kinetis_pinconfig(MKI2C_INPUT(sda_gpio)); kinetis_pinconfig(MKI2C_INPUT(scl_gpio)); + ret = OK; - /* Re-init the port */ + /* Re-init the port (even on error to enable clock) */ +out: kinetis_i2c_init(priv); /* Restore the frequency */ kinetis_i2c_setfrequency(priv, frequency); - ret = OK; - -out: /* Release the port for re-use by other clients */