diff --git a/conf/airframes/esden/cocto_lm2a2.xml b/conf/airframes/esden/cocto_lm2a2.xml
index e0ce48b4a4..e035a7b5c7 100644
--- a/conf/airframes/esden/cocto_lm2a2.xml
+++ b/conf/airframes/esden/cocto_lm2a2.xml
@@ -243,9 +243,7 @@ B2L -> CW
-
-
-
+
diff --git a/conf/airframes/esden/quady_lm2a2pwm.xml b/conf/airframes/esden/quady_lm2a2pwm.xml
index c7caa99380..8bf1d23257 100644
--- a/conf/airframes/esden/quady_lm2a2pwm.xml
+++ b/conf/airframes/esden/quady_lm2a2pwm.xml
@@ -200,9 +200,7 @@
-
-
-
+
diff --git a/conf/firmwares/subsystems/shared/imu_aspirin_v2.1.makefile b/conf/firmwares/subsystems/shared/imu_aspirin_v2.1.makefile
index 1f0f83f906..810271975b 100644
--- a/conf/firmwares/subsystems/shared/imu_aspirin_v2.1.makefile
+++ b/conf/firmwares/subsystems/shared/imu_aspirin_v2.1.makefile
@@ -42,7 +42,7 @@ ifeq ($(TARGET), ap)
IMU_ASPIRIN_CFLAGS = -DUSE_IMU
endif
-IMU_ASPIRIN_CFLAGS += -DIMU_TYPE_H=\"imu/imu_aspirin2.h\" -DIMU_OVERRIDE_CHANNELS
+IMU_ASPIRIN_CFLAGS += -DIMU_TYPE_H=\"imu/imu_aspirin2.h\"
IMU_ASPIRIN_SRCS = $(SRC_SUBSYSTEMS)/imu.c \
$(SRC_SUBSYSTEMS)/imu/imu_aspirin2.c
diff --git a/conf/firmwares/subsystems/shared/imu_aspirin_v2.2.makefile b/conf/firmwares/subsystems/shared/imu_aspirin_v2.2.makefile
index a27b8e576b..f36ee75375 100644
--- a/conf/firmwares/subsystems/shared/imu_aspirin_v2.2.makefile
+++ b/conf/firmwares/subsystems/shared/imu_aspirin_v2.2.makefile
@@ -1,5 +1,73 @@
-ap.CFLAGS += -DIMU_ASPIRIN_DISABLE_BARO
-
-include $(CFG_SHARED)/imu_aspirin_v2.1.makefile
+# Hey Emacs, this is a -*- makefile -*-
+#
+# Aspirin IMU v2.2
+#
+#
+# required xml:
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+# for fixedwing firmware and ap only
+ifeq ($(TARGET), ap)
+ IMU_ASPIRIN_CFLAGS = -DUSE_IMU
+endif
+
+IMU_ASPIRIN_CFLAGS += -DIMU_TYPE_H=\"imu/imu_aspirin2.h\"
+IMU_ASPIRIN_SRCS = $(SRC_SUBSYSTEMS)/imu.c \
+ $(SRC_SUBSYSTEMS)/imu/imu_aspirin2.c
+
+include $(CFG_SHARED)/spi.makefile
+
+ifeq ($(ARCH), lpc21)
+IMU_ASPIRIN_CFLAGS += -DUSE_SPI1
+IMU_ASPIRIN_CFLAGS += -DUSE_SPI_SLAVE0
+else ifeq ($(ARCH), stm32)
+IMU_ASPIRIN_CFLAGS += -DUSE_SPI2
+# Slave select configuration
+# SLAVE2 is on PB12 (NSS) (MPU600 CS)
+IMU_ASPIRIN_CFLAGS += -DUSE_SPI_SLAVE2
+endif
+
+IMU_ASPIRIN_CFLAGS += -DIMU_ASPIRIN_VERSION_2_2
+
+# Keep CFLAGS/Srcs for imu in separate expression so we can assign it to other targets
+# see: conf/autopilot/subsystems/lisa_passthrough/imu_b2_v1.1.makefile for example
+
+ap.CFLAGS += $(IMU_ASPIRIN_CFLAGS)
+ap.srcs += $(IMU_ASPIRIN_SRCS)
+
+
+#
+# NPS simulator
+#
+include $(CFG_SHARED)/imu_nps.makefile
diff --git a/sw/airborne/subsystems/imu/imu_aspirin2.c b/sw/airborne/subsystems/imu/imu_aspirin2.c
index cd2f412923..9a2d0896c4 100644
--- a/sw/airborne/subsystems/imu/imu_aspirin2.c
+++ b/sw/airborne/subsystems/imu/imu_aspirin2.c
@@ -28,10 +28,6 @@
#include "peripherals/hmc58xx_regs.h"
#include "peripherals/ms5611.h"
-#ifdef BARO_I2C
-#define MPU6000_NO_SLAVES
-#endif
-
#ifndef MPU6000_SLAVE_IDX
#define MPU6000_SLAVE_IDX SPI_SLAVE2
#endif
@@ -211,6 +207,7 @@ static void mpu_configure(void)
(3 << 3) ); // Full Scale = 16g
#ifndef MPU6000_NO_SLAVES
+PRINT_CONFIG_MSG("Reading MPU slaves")
/////////////////////////////////////
// SPI Slave Configuration Section
@@ -227,16 +224,16 @@ static void mpu_configure(void)
// Enable the aux i2c
mpu_set( MPU60X0_REG_I2C_MST_CTRL,
(0 << 7) | // no multimaster
- (0 << 6) | // do not delay IRQ waiting for all external slaves
- (0 << 5) | // no slave 3 FIFO
- (0 << 4) | // restart or stop/start from one slave to another: read -> write is always stop/start
- (8 << 0) ); // 0=348kHz 8=256kHz, 9=500kHz
+ (0 << 6) | // do not delay IRQ waiting for all external slaves
+ (0 << 5) | // no slave 3 FIFO
+ (0 << 4) | // restart or stop/start from one slave to another: read -> write is always stop/start
+ (8 << 0) ); // 0=348kHz 8=256kHz, 9=500kHz
mpu_set( MPU60X0_REG_I2C_MST_DELAY,
(0 << 2) | // No Delay Slave 2
(1 << 3) ); // Delay Slave 3
-#ifdef IMU_ASPIRIN_VERSION_2_1
+#if defined IMU_ASPIRIN_VERSION_2_1 && USE_IMU_ASPIRIN2_BARO_SLAVE
// MS5611 Send Reset
mpu_set( MPU60X0_REG_I2C_SLV4_ADDR, (MS5611_ADDR0));
@@ -251,7 +248,7 @@ static void mpu_configure(void)
// Wait at least 2.8ms
-#endif
+#endif // read MS5611 as MPU slave
// HMC5883 Magnetometer Configuration
@@ -297,9 +294,8 @@ static void mpu_configure(void)
// Slave 0 Control:
-#if !IMU_ASPIRIN_DISABLE_BARO
-#ifdef IMU_ASPIRIN_VERSION_2_1
-PRINT_CONFIG_MSG("Reading the MS5611")
+#if defined IMU_ASPIRIN_VERSION_2_1 && USE_IMU_ASPIRIN2_BARO_SLAVE
+PRINT_CONFIG_MSG("Reading the MS5611 as MPU slave")
/*
@@ -342,10 +338,7 @@ PRINT_CONFIG_MSG("Reading the MS5611")
(0 << 6) | // Byte Swap
(3 << 0) ); // Read 6 bytes
-
-
-#endif
-#endif
+#endif // read MS5611 as MPU slave
#endif