aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-11-28 20:30:04 +1100
committerAndrew Tridgell <tridge@samba.org>2013-11-30 20:21:08 +1100
commit92141548319898b2b0db94957b8a9281c33b5c47 (patch)
treeb00171ceb3297958220b818f02bf4c534c6e6ef6
parentcb76f07d3153895e379f15f6ca388ef04c6384dc (diff)
downloadpx4-firmware-92141548319898b2b0db94957b8a9281c33b5c47.tar.gz
px4-firmware-92141548319898b2b0db94957b8a9281c33b5c47.tar.bz2
px4-firmware-92141548319898b2b0db94957b8a9281c33b5c47.zip
lsm303d: added I2C disable based on method from ST engineering support
-rw-r--r--src/drivers/lsm303d/lsm303d.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/drivers/lsm303d/lsm303d.cpp b/src/drivers/lsm303d/lsm303d.cpp
index 10af611ed..889c77b2c 100644
--- a/src/drivers/lsm303d/lsm303d.cpp
+++ b/src/drivers/lsm303d/lsm303d.cpp
@@ -301,6 +301,11 @@ private:
void reset();
/**
+ * disable I2C on the chip
+ */
+ void disable_i2c();
+
+ /**
* Static trampoline from the hrt_call context; because we don't have a
* generic hrt wrapper yet.
*
@@ -564,8 +569,24 @@ out:
}
void
+LSM303D::disable_i2c(void)
+{
+ uint8_t a = read_reg(0x02);
+ write_reg(0x02, (0x10 | a));
+ a = read_reg(0x02);
+ write_reg(0x02, (0xF7 & a));
+ a = read_reg(0x15);
+ write_reg(0x15, (0x80 | a));
+ a = read_reg(0x02);
+ write_reg(0x02, (0xE7 & a));
+}
+
+void
LSM303D::reset()
{
+ // ensure the chip doesn't interpret any other bus traffic as I2C
+ disable_i2c();
+
/* enable accel*/
_reg1_expected = REG1_X_ENABLE_A | REG1_Y_ENABLE_A | REG1_Z_ENABLE_A | REG1_BDU_UPDATE | REG1_RATE_800HZ_A;
write_reg(ADDR_CTRL_REG1, _reg1_expected);