From d55dd67d77e8187440f9c52ae26438250566d997 Mon Sep 17 00:00:00 2001 From: px4dev Date: Fri, 24 Aug 2012 08:18:18 -0700 Subject: [PATCH] Remove spurious I2C clock frequency resets. --- apps/drivers/device/i2c.cpp | 13 +++++++------ apps/system/i2c/i2c_bus.c | 2 -- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/apps/drivers/device/i2c.cpp b/apps/drivers/device/i2c.cpp index 42dfd73008..f5f29fde33 100644 --- a/apps/drivers/device/i2c.cpp +++ b/apps/drivers/device/i2c.cpp @@ -73,11 +73,8 @@ I2C::init() { int ret = OK; - // attach to the i2c bus + /* attach to the i2c bus */ _dev = up_i2cinitialize(_bus); - // set the bus speed again to a reasonable number of 400 KHz - I2C_SETFREQUENCY(_dev, 400000); - if (_dev == nullptr) { debug("failed to init I2C"); @@ -147,8 +144,12 @@ I2C::transfer(uint8_t *send, unsigned send_len, uint8_t *recv, unsigned recv_len if (msgs == 0) return -EINVAL; - // set the bus speed again to a reasonable number of 400 KHz - I2C_SETFREQUENCY(_dev, 400000); + /* + * I2C architecture means there is an unavoidable race here + * if there are any devices on the bus with a different frequency + * preference. Really, this is pointless. + */ + I2C_SETFREQUENCY(_dev, _frequency); ret = I2C_TRANSFER(_dev, &msgv[0], msgs); if (ret == OK) diff --git a/apps/system/i2c/i2c_bus.c b/apps/system/i2c/i2c_bus.c index 4bca13c66e..07e6d2da38 100644 --- a/apps/system/i2c/i2c_bus.c +++ b/apps/system/i2c/i2c_bus.c @@ -84,8 +84,6 @@ int i2ccmd_bus(FAR struct i2ctool_s *i2ctool, int argc, char **argv) for (i = CONFIG_I2CTOOL_MINBUS; i <= CONFIG_I2CTOOL_MAXBUS; i++) { dev = up_i2cinitialize(i); - // set the bus speed again to a reasonable number of 400 KHz - I2C_SETFREQUENCY(_dev, 400000); if (dev) { i2ctool_printf(i2ctool, "Bus %d: YES\n", i);