altos: Don't reboot bmx160 at powerup.
[fw/altos] / src / drivers / ao_bmx160.c
index f206bfcfa5fa829327ef8c99c63cffe778e125ed..3e5d564093496592552e89321e6539a7ee553e0c 100644 (file)
@@ -183,6 +183,8 @@ _ao_bmx160_wait_alive(void)
 static void
 _ao_bmx160_setup(void)
 {
+       int r;
+
        if (ao_bmx160_configured)
                return;
 
@@ -190,11 +192,18 @@ _ao_bmx160_setup(void)
        _ao_bmx160_wait_alive();
 
        /* Reboot */
-       _ao_bmx160_cmd(BMX160_CMD_SOFTRESET);
+//     _ao_bmx160_cmd(BMX160_CMD_SOFTRESET);
 
        /* Force SPI mode */
        _ao_bmx160_reg_write(BMX160_NV_CONF, 1 << BMX160_NV_CONF_SPI_EN);
 
+       /* Enable acc and gyr
+        */
+
+       _ao_bmx160_cmd(BMX160_CMD_ACC_SET_PMU_MODE(BMX160_PMU_STATUS_ACC_PMU_STATUS_NORMAL));
+
+       _ao_bmx160_cmd(BMX160_CMD_GYR_SET_PMU_MODE(BMX160_PMU_STATUS_GYR_PMU_STATUS_NORMAL));
+
        /* Configure accelerometer:
         *
         *      undersampling disabled
@@ -210,6 +219,9 @@ _ao_bmx160_setup(void)
                             (BMX160_ACC_CONF_ACC_ODR_200 << BMX160_ACC_CONF_ACC_ODR));
        _ao_bmx160_reg_write(BMX160_ACC_RANGE,
                             BMX160_ACC_RANGE_16G);
+       for (r = 0x4; r <= 0x17; r++)
+               (void) _ao_bmx160_reg_read(r);
+
 
        /* Configure gyro:
         *
@@ -276,11 +288,6 @@ _ao_bmx160_setup(void)
                             (0 << BMX160_MAG_IF_0_MAG_OFFSET) |
                             (0 << BMX160_MAG_IF_0_MAG_RD_BURST));
 
-       /* Enable acc and gyr
-        */
-
-       _ao_bmx160_cmd(BMX160_CMD_ACC_SET_PMU_MODE(BMX160_PMU_STATUS_ACC_PMU_STATUS_NORMAL));
-       _ao_bmx160_cmd(BMX160_CMD_GYR_SET_PMU_MODE(BMX160_PMU_STATUS_GYR_PMU_STATUS_NORMAL));
        ao_bmx160_configured = 1;
 }
 
@@ -318,11 +325,18 @@ ao_bmx160_show(void)
        uint8_t gyr_conf = _ao_bmx160_reg_read(BMX160_GYR_CONF);
        uint8_t gyr_range = _ao_bmx160_reg_read(BMX160_GYR_RANGE);
        uint8_t mag_conf = _ao_bmx160_reg_read(BMX160_MAG_CONF);
+       uint8_t status = _ao_bmx160_reg_read(BMX160_STATUS);
+       uint8_t pmu_status = _ao_bmx160_reg_read(BMX160_PMU_STATUS);
+       uint8_t acc_x_lo = _ao_bmx160_reg_read(BMX160_ACCEL_X_0_7);
+       uint8_t acc_x_hi = _ao_bmx160_reg_read(BMX160_ACCEL_X_8_15);
        ao_bmx160_spi_put();
 
        printf("ACC_CONF %02x ACC_RANGE %02x GYR_CONF %02x GYR_RANGE %02x MAG_CONF %02x\n",
               acc_conf, acc_range, gyr_conf, gyr_range, mag_conf);
 
+       printf("STATUS %02x PMU_STATUS %02x ACCEL_X_0_7 %02x ACCEL_X_8_15 %02x\n",
+              status, pmu_status, acc_x_lo, acc_x_hi);
+
        printf ("Accel: %7d %7d %7d Gyro: %7d %7d %7d Mag: %7d %7d %7d\n",
                ao_bmx160_current.acc_x,
                ao_bmx160_current.acc_y,