mpu3050: Motion Libraries: Board files for MPL v4.1.1.
Robert Collins [Wed, 9 Nov 2011 21:59:33 +0000 (13:59 -0800)]
Bug 825602
Bug 834422
Bug 843573

Change-Id: I50ded8cafb228b216f4e3a899f50336c8450698b
Reviewed-on: http://git-master/r/66084
Reviewed-by: Lokesh Pathak <lpathak@nvidia.com>
Tested-by: Lokesh Pathak <lpathak@nvidia.com>

arch/arm/mach-tegra/board-cardhu-sensors.c
arch/arm/mach-tegra/board-cardhu.h
arch/arm/mach-tegra/board-enterprise-sensors.c
arch/arm/mach-tegra/board-enterprise.h
arch/arm/mach-tegra/board-ventana-sensors.c
arch/arm/mach-tegra/board-ventana.h

index 41a5707..c7b5658 100644 (file)
@@ -744,47 +744,91 @@ static int __init cam_tca6416_init(void)
 #endif
 
 #ifdef CONFIG_MPU_SENSORS_MPU3050
-#define SENSOR_MPU_NAME "mpu3050"
-static struct mpu3050_platform_data mpu3050_data = {
-       .int_config  = 0x10,
-       .orientation = { 0, -1, 0, -1, 0, 0, 0, 0, -1 },  /* Orientation matrix for MPU on cardhu */
-       .level_shifter = 0,
-
-       .accel = {
-       .get_slave_descr = get_accel_slave_descr,
-       .adapt_num   = 2,
-       .bus         = EXT_SLAVE_BUS_SECONDARY,
-       .address     = 0x0F,
-       .orientation = { 0, -1, 0, -1, 0, 0, 0, 0, -1 },  /* Orientation matrix for Kionix on cardhu */
-       },
+static struct mpu_platform_data mpu3050_data = {
+       .int_config     = 0x10,
+       .level_shifter  = 0,
+       .orientation    = MPU_GYRO_ORIENTATION, /* Located in board_[platformname].h    */
+};
 
-       .compass = {
-       .get_slave_descr = get_compass_slave_descr,
-       .adapt_num   = 2,
-       .bus         = EXT_SLAVE_BUS_PRIMARY,
-       .address     = 0x0C,
-       .orientation = { 1, 0, 0, 0, 1, 0, 0, 0, 1 },  /* Orientation matrix for AKM on cardhu */
-       },
+static struct ext_slave_platform_data mpu3050_accel_data = {
+       .address        = MPU_ACCEL_ADDR,
+       .irq            = 0,
+       .adapt_num      = MPU_ACCEL_BUS_NUM,
+       .bus            = EXT_SLAVE_BUS_SECONDARY,
+       .orientation    = MPU_ACCEL_ORIENTATION,        /* Located in board_[platformname].h    */
 };
 
-static struct i2c_board_info __initdata mpu3050_i2c0_boardinfo[] = {
+static struct ext_slave_platform_data mpu_compass_data = {
+       .address        = MPU_COMPASS_ADDR,
+       .irq            = 0,
+       .adapt_num      = MPU_COMPASS_BUS_NUM,
+       .bus            = EXT_SLAVE_BUS_PRIMARY,
+       .orientation    = MPU_COMPASS_ORIENTATION,      /* Located in board_[platformname].h    */
+};
+
+static struct i2c_board_info __initdata inv_mpu_i2c2_board_info[] = {
        {
-               I2C_BOARD_INFO(SENSOR_MPU_NAME, 0x68),
-               .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PX1),
+               I2C_BOARD_INFO(MPU_GYRO_NAME, MPU_GYRO_ADDR),
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_GYRO_IRQ_GPIO),
                .platform_data = &mpu3050_data,
        },
+       {
+               I2C_BOARD_INFO(MPU_ACCEL_NAME, MPU_ACCEL_ADDR),
+#if    MPU_ACCEL_IRQ_GPIO
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_ACCEL_IRQ_GPIO),
+#endif
+               .platform_data = &mpu3050_accel_data,
+       },
+       {
+               I2C_BOARD_INFO(MPU_COMPASS_NAME, MPU_COMPASS_ADDR),
+#if    MPU_COMPASS_IRQ_GPIO
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_COMPASS_IRQ_GPIO),
+#endif
+               .platform_data = &mpu_compass_data,
+       },
 };
 
-static void cardhu_mpuirq_init(void)
+static void mpuirq_init(void)
 {
-       pr_info("*** MPU START *** cardhu_mpuirq_init...\n");
-       tegra_gpio_enable(TEGRA_GPIO_PX1);
-       gpio_request(TEGRA_GPIO_PX1, SENSOR_MPU_NAME);
-       gpio_direction_input(TEGRA_GPIO_PX1);
-       pr_info("*** MPU END *** cardhu_mpuirq_init...\n");
-
-       i2c_register_board_info(2, mpu3050_i2c0_boardinfo,
-               ARRAY_SIZE(mpu3050_i2c0_boardinfo));
+       int ret = 0;
+
+       pr_info("*** MPU START *** mpuirq_init...\n");
+
+#if    MPU_ACCEL_IRQ_GPIO
+       /* ACCEL-IRQ assignment */
+       tegra_gpio_enable(MPU_ACCEL_IRQ_GPIO);
+       ret = gpio_request(MPU_ACCEL_IRQ_GPIO, MPU_ACCEL_NAME);
+       if (ret < 0) {
+               pr_err("%s: gpio_request failed %d\n", __func__, ret);
+               return;
+       }
+
+       ret = gpio_direction_input(MPU_ACCEL_IRQ_GPIO);
+       if (ret < 0) {
+               pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
+               gpio_free(MPU_ACCEL_IRQ_GPIO);
+               return;
+       }
+#endif
+
+       /* MPU-IRQ assignment */
+       tegra_gpio_enable(MPU_GYRO_IRQ_GPIO);
+       ret = gpio_request(MPU_GYRO_IRQ_GPIO, MPU_GYRO_NAME);
+       if (ret < 0) {
+               pr_err("%s: gpio_request failed %d\n", __func__, ret);
+               return;
+       }
+
+       ret = gpio_direction_input(MPU_GYRO_IRQ_GPIO);
+       if (ret < 0) {
+               pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
+               gpio_free(MPU_GYRO_IRQ_GPIO);
+               return;
+       }
+       pr_info("*** MPU END *** mpuirq_init...\n");
+
+       i2c_register_board_info(MPU_GYRO_BUS_NUM, inv_mpu_i2c2_board_info,
+               ARRAY_SIZE(inv_mpu_i2c2_board_info));
 }
 #endif
 
@@ -848,7 +892,7 @@ int __init cardhu_sensors_init(void)
                ARRAY_SIZE(cardhu_i2c4_nct1008_board_info));
 
 #ifdef CONFIG_MPU_SENSORS_MPU3050
-       cardhu_mpuirq_init();
+       mpuirq_init();
 #endif
        return 0;
 }
index 5c8dcb4..cacbd65 100644 (file)
@@ -211,6 +211,23 @@ int cardhu_pm299_gpio_switch_regulator_init(void);
 int cardhu_pm299_regulator_init(void);
 void __init cardhu_tsensor_init(void);
 
+/* Invensense MPU Definitions */
+#define MPU_GYRO_NAME          "mpu3050"
+#define MPU_GYRO_IRQ_GPIO      TEGRA_GPIO_PX1
+#define MPU_GYRO_ADDR          0x68
+#define MPU_GYRO_BUS_NUM       2
+#define MPU_GYRO_ORIENTATION   { 0, -1, 0, -1, 0, 0, 0, 0, -1 }
+#define MPU_ACCEL_NAME         "kxtf9"
+#define MPU_ACCEL_IRQ_GPIO     TEGRA_GPIO_PL1
+#define MPU_ACCEL_ADDR         0x0F
+#define MPU_ACCEL_BUS_NUM      2
+#define MPU_ACCEL_ORIENTATION  { 0, -1, 0, -1, 0, 0, 0, 0, -1 }
+#define MPU_COMPASS_NAME       "ak8975"
+#define MPU_COMPASS_IRQ_GPIO   0
+#define MPU_COMPASS_ADDR       0x0C
+#define MPU_COMPASS_BUS_NUM    2
+#define MPU_COMPASS_ORIENTATION        { 1, 0, 0, 0, 1, 0, 0, 0, 1 }
+
 /* Baseband GPIO addresses */
 #define BB_GPIO_BB_EN                  TEGRA_GPIO_PR5
 #define BB_GPIO_BB_RST                 TEGRA_GPIO_PS4
index f6149a3..7d71d1b 100644 (file)
@@ -144,71 +144,101 @@ static void enterprise_nct1008_init(void)
                                ARRAY_SIZE(enterprise_i2c4_nct1008_board_info));
 }
 
-#define SENSOR_MPU_NAME "mpu3050"
-static struct mpu3050_platform_data mpu3050_data = {
-       .int_config  = 0x10,
-       /* Orientation matrix for MPU on enterprise */
-       .orientation = { -1, 0, 0, 0, -1, 0, 0, 0, 1 },
-       .level_shifter = 0,
-
-       .accel = {
-               .get_slave_descr = get_accel_slave_descr,
-               .adapt_num   = 0,
-               .bus         = EXT_SLAVE_BUS_SECONDARY,
-               .address     = 0x0F,
-               /* Orientation matrix for Kionix on enterprise */
-               .orientation = { 0, 1, 0, -1, 0, 0, 0, 0, 1 },
+static struct mpu_platform_data mpu3050_data = {
+       .int_config     = 0x10,
+       .level_shifter  = 0,
+       .orientation    = MPU_GYRO_ORIENTATION, /* Located in board_[platformname].h    */
+};
 
-       },
+static struct ext_slave_platform_data mpu3050_accel_data = {
+       .address        = MPU_ACCEL_ADDR,
+       .irq            = 0,
+       .adapt_num      = MPU_ACCEL_BUS_NUM,
+       .bus            = EXT_SLAVE_BUS_SECONDARY,
+       .orientation    = MPU_ACCEL_ORIENTATION,        /* Located in board_[platformname].h    */
+};
 
-       .compass = {
-               .get_slave_descr = get_compass_slave_descr,
-               .adapt_num   = 0,
-               .bus         = EXT_SLAVE_BUS_PRIMARY,
-               .address     = 0x0C,
-               /* Orientation matrix for AKM on enterprise */
-               .orientation = { 0, 1, 0, -1, 0, 0, 0, 0, 1 },
-       },
+static struct ext_slave_platform_data mpu_compass_data = {
+       .address        = MPU_COMPASS_ADDR,
+       .irq            = 0,
+       .adapt_num      = MPU_COMPASS_BUS_NUM,
+       .bus            = EXT_SLAVE_BUS_PRIMARY,
+       .orientation    = MPU_COMPASS_ORIENTATION,      /* Located in board_[platformname].h    */
 };
 
-static struct i2c_board_info __initdata mpu3050_i2c0_boardinfo[] = {
+static struct i2c_board_info __initdata inv_mpu_i2c2_board_info[] = {
        {
-               I2C_BOARD_INFO(SENSOR_MPU_NAME, 0x68),
-               .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PH4),
+               I2C_BOARD_INFO(MPU_GYRO_NAME, MPU_GYRO_ADDR),
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_GYRO_IRQ_GPIO),
                .platform_data = &mpu3050_data,
        },
+       {
+               I2C_BOARD_INFO(MPU_ACCEL_NAME, MPU_ACCEL_ADDR),
+#if    MPU_ACCEL_IRQ_GPIO
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_ACCEL_IRQ_GPIO),
+#endif
+               .platform_data = &mpu3050_accel_data,
+       },
+       {
+               I2C_BOARD_INFO(MPU_COMPASS_NAME, MPU_COMPASS_ADDR),
+#if    MPU_COMPASS_IRQ_GPIO
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_COMPASS_IRQ_GPIO),
+#endif
+               .platform_data = &mpu_compass_data,
+       },
 };
 
-static inline void enterprise_msleep(u32 t)
-{
-       /*
-       If timer value is between ( 10us - 20ms),
-       usleep_range() is recommended.
-       Please read Documentation/timers/timers-howto.txt.
-       */
-       usleep_range(t*1000, t*1000 + 500);
-}
-
-static void enterprise_mpuirq_init(void)
+static void mpuirq_init(void)
 {
        int ret = 0;
 
-       tegra_gpio_enable(TEGRA_GPIO_PH4);
-       ret = gpio_request(TEGRA_GPIO_PH4, SENSOR_MPU_NAME);
+       pr_info("*** MPU START *** mpuirq_init...\n");
+
+#if    MPU_ACCEL_IRQ_GPIO
+       /* ACCEL-IRQ assignment */
+       tegra_gpio_enable(MPU_ACCEL_IRQ_GPIO);
+       ret = gpio_request(MPU_ACCEL_IRQ_GPIO, MPU_ACCEL_NAME);
        if (ret < 0) {
                pr_err("%s: gpio_request failed %d\n", __func__, ret);
                return;
        }
 
-       ret = gpio_direction_input(TEGRA_GPIO_PH4);
+       ret = gpio_direction_input(MPU_ACCEL_IRQ_GPIO);
        if (ret < 0) {
                pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
-               gpio_free(TEGRA_GPIO_PH4);
+               gpio_free(MPU_ACCEL_IRQ_GPIO);
                return;
        }
+#endif
+
+       /* MPU-IRQ assignment */
+       tegra_gpio_enable(MPU_GYRO_IRQ_GPIO);
+       ret = gpio_request(MPU_GYRO_IRQ_GPIO, MPU_GYRO_NAME);
+       if (ret < 0) {
+               pr_err("%s: gpio_request failed %d\n", __func__, ret);
+               return;
+       }
+
+       ret = gpio_direction_input(MPU_GYRO_IRQ_GPIO);
+       if (ret < 0) {
+               pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
+               gpio_free(MPU_GYRO_IRQ_GPIO);
+               return;
+       }
+       pr_info("*** MPU END *** mpuirq_init...\n");
 
-       i2c_register_board_info(0, mpu3050_i2c0_boardinfo,
-                               ARRAY_SIZE(mpu3050_i2c0_boardinfo));
+       i2c_register_board_info(MPU_GYRO_BUS_NUM, inv_mpu_i2c2_board_info,
+               ARRAY_SIZE(inv_mpu_i2c2_board_info));
+}
+
+static inline void enterprise_msleep(u32 t)
+{
+       /*
+       If timer value is between ( 10us - 20ms),
+       usleep_range() is recommended.
+       Please read Documentation/timers/timers-howto.txt.
+       */
+       usleep_range(t*1000, t*1000 + 500);
 }
 
 static struct i2c_board_info enterprise_i2c0_isl_board_info[] = {
@@ -623,7 +653,7 @@ int __init enterprise_sensors_init(void)
 
        enterprise_isl_init();
        enterprise_nct1008_init();
-       enterprise_mpuirq_init();
+       mpuirq_init();
        ret = enterprise_cam_init();
 
        return ret;
index 8c86093..80fad49 100644 (file)
@@ -52,6 +52,23 @@ int enterprise_suspend_init(void);
 int enterprise_edp_init(void);
 void __init enterprise_tsensor_init(void);
 
+/* Invensense MPU Definitions */
+#define MPU_GYRO_NAME          "mpu3050"
+#define MPU_GYRO_IRQ_GPIO      TEGRA_GPIO_PH4
+#define MPU_GYRO_ADDR          0x68
+#define MPU_GYRO_BUS_NUM       0
+#define MPU_GYRO_ORIENTATION   { -1, 0, 0, 0, -1, 0, 0, 0, 1 }
+#define MPU_ACCEL_NAME         "kxtf9"
+#define MPU_ACCEL_IRQ_GPIO     0 /* DISABLE ACCELIRQ:  TEGRA_GPIO_PJ2 */
+#define MPU_ACCEL_ADDR         0x0F
+#define MPU_ACCEL_BUS_NUM      0
+#define MPU_ACCEL_ORIENTATION  { 0, 1, 0, -1, 0, 0, 0, 0, 1 }
+#define MPU_COMPASS_NAME       "ak8975"
+#define MPU_COMPASS_IRQ_GPIO   0
+#define MPU_COMPASS_ADDR       0x0C
+#define MPU_COMPASS_BUS_NUM    0
+#define MPU_COMPASS_ORIENTATION        { 0, 1, 0, -1, 0, 0, 0, 0, 1 }
+
 /* PCA954x I2C bus expander bus addresses */
 #define PCA954x_I2C_BUS_BASE   6
 #define PCA954x_I2C_BUS0       (PCA954x_I2C_BUS_BASE + 0)
index 5d1c73f..c9c2f54 100644 (file)
@@ -334,51 +334,96 @@ static struct i2c_board_info ventana_i2c8_board_info[] = {
 };
 
 #ifdef CONFIG_MPU_SENSORS_MPU3050
-#define SENSOR_MPU_NAME "mpu3050"
-static struct mpu3050_platform_data mpu3050_data = {
-       .int_config  = 0x10,
-       .orientation = { 0, -1, 0, -1, 0, 0, 0, 0, -1 },  /* Orientation matrix for MPU on ventana */
-       .level_shifter = 0,
-       .accel = {
-#ifdef CONFIG_MPU_SENSORS_KXTF9
-       .get_slave_descr = get_accel_slave_descr,
-#else
-       .get_slave_descr = NULL,
-#endif
-       .adapt_num   = 0,
-       .bus         = EXT_SLAVE_BUS_SECONDARY,
-       .address     = 0x0F,
-       .orientation = { 0, -1, 0, -1, 0, 0, 0, 0, -1 },  /* Orientation matrix for Kionix on ventana */
-       },
+static struct mpu_platform_data mpu3050_data = {
+       .int_config     = 0x10,
+       .level_shifter  = 0,
+       .orientation    = MPU_GYRO_ORIENTATION, /* Located in board_[platformname].h    */
+};
+
+static struct ext_slave_platform_data mpu3050_accel_data = {
+       .address        = MPU_ACCEL_ADDR,
+       .irq            = 0,
+       .adapt_num      = MPU_ACCEL_BUS_NUM,
+       .bus            = EXT_SLAVE_BUS_SECONDARY,
+       .orientation    = MPU_ACCEL_ORIENTATION,        /* Located in board_[platformname].h    */
+};
+
+static struct ext_slave_platform_data mpu_compass_data = {
+       .address        = MPU_COMPASS_ADDR,
+       .irq            = 0,
+       .adapt_num      = MPU_COMPASS_BUS_NUM,
+       .bus            = EXT_SLAVE_BUS_PRIMARY,
+       .orientation    = MPU_COMPASS_ORIENTATION,      /* Located in board_[platformname].h    */
+};
 
-       .compass = {
-#ifdef CONFIG_MPU_SENSORS_AK8975
-       .get_slave_descr = get_compass_slave_descr,
-#else
-       .get_slave_descr = NULL,
+static struct i2c_board_info __initdata inv_mpu_i2c2_board_info[] = {
+       {
+               I2C_BOARD_INFO(MPU_GYRO_NAME, MPU_GYRO_ADDR),
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_GYRO_IRQ_GPIO),
+               .platform_data = &mpu3050_data,
+       },
+       {
+               I2C_BOARD_INFO(MPU_ACCEL_NAME, MPU_ACCEL_ADDR),
+#if    MPU_ACCEL_IRQ_GPIO
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_ACCEL_IRQ_GPIO),
 #endif
-       .adapt_num   = 4,            /* bus number 4 on ventana */
-       .bus         = EXT_SLAVE_BUS_PRIMARY,
-       .address     = 0x0C,
-       .orientation = { 1, 0, 0, 0, -1, 0, 0, 0, -1 },  /* Orientation matrix for AKM on ventana */
+               .platform_data = &mpu3050_accel_data,
        },
 };
 
-static struct i2c_board_info __initdata mpu3050_i2c0_boardinfo[] = {
+static struct i2c_board_info __initdata inv_mpu_i2c4_board_info[] = {
        {
-               I2C_BOARD_INFO(SENSOR_MPU_NAME, 0x68),
-               .irq = TEGRA_GPIO_TO_IRQ(TEGRA_GPIO_PZ4),
-               .platform_data = &mpu3050_data,
+               I2C_BOARD_INFO(MPU_COMPASS_NAME, MPU_COMPASS_ADDR),
+#if    MPU_COMPASS_IRQ_GPIO
+               .irq = TEGRA_GPIO_TO_IRQ(MPU_COMPASS_IRQ_GPIO),
+#endif
+               .platform_data = &mpu_compass_data,
        },
 };
 
-static void ventana_mpuirq_init(void)
+static void mpuirq_init(void)
 {
-       pr_info("*** MPU START *** ventana_mpuirq_init...\n");
-       tegra_gpio_enable(TEGRA_GPIO_PZ4);
-       gpio_request(TEGRA_GPIO_PZ4, SENSOR_MPU_NAME);
-       gpio_direction_input(TEGRA_GPIO_PZ4);
-       pr_info("*** MPU END *** ventana_mpuirq_init...\n");
+       int ret = 0;
+
+       pr_info("*** MPU START *** mpuirq_init...\n");
+
+#if    MPU_ACCEL_IRQ_GPIO
+       /* ACCEL-IRQ assignment */
+       tegra_gpio_enable(MPU_ACCEL_IRQ_GPIO);
+       ret = gpio_request(MPU_ACCEL_IRQ_GPIO, MPU_ACCEL_NAME);
+       if (ret < 0) {
+               pr_err("%s: gpio_request failed %d\n", __func__, ret);
+               return;
+       }
+
+       ret = gpio_direction_input(MPU_ACCEL_IRQ_GPIO);
+       if (ret < 0) {
+               pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
+               gpio_free(MPU_ACCEL_IRQ_GPIO);
+               return;
+       }
+#endif
+
+       /* MPU-IRQ assignment */
+       tegra_gpio_enable(MPU_GYRO_IRQ_GPIO);
+       ret = gpio_request(MPU_GYRO_IRQ_GPIO, MPU_GYRO_NAME);
+       if (ret < 0) {
+               pr_err("%s: gpio_request failed %d\n", __func__, ret);
+               return;
+       }
+
+       ret = gpio_direction_input(MPU_GYRO_IRQ_GPIO);
+       if (ret < 0) {
+               pr_err("%s: gpio_direction_input failed %d\n", __func__, ret);
+               gpio_free(MPU_GYRO_IRQ_GPIO);
+               return;
+       }
+       pr_info("*** MPU END *** mpuirq_init...\n");
+
+       i2c_register_board_info(MPU_GYRO_BUS_NUM, inv_mpu_i2c2_board_info,
+               ARRAY_SIZE(inv_mpu_i2c2_board_info));
+       i2c_register_board_info(MPU_COMPASS_BUS_NUM, inv_mpu_i2c4_board_info,
+               ARRAY_SIZE(inv_mpu_i2c4_board_info));
 }
 #endif
 
@@ -391,7 +436,7 @@ int __init ventana_sensors_init(void)
        ventana_akm8975_init();
 #endif
 #ifdef CONFIG_MPU_SENSORS_MPU3050
-       ventana_mpuirq_init();
+       mpuirq_init();
 #endif
        ventana_camera_init();
        ventana_nct1008_init();
@@ -425,12 +470,6 @@ int __init ventana_sensors_init(void)
        i2c_register_board_info(8, ventana_i2c8_board_info,
                ARRAY_SIZE(ventana_i2c8_board_info));
 
-
-#ifdef CONFIG_MPU_SENSORS_MPU3050
-       i2c_register_board_info(0, mpu3050_i2c0_boardinfo,
-               ARRAY_SIZE(mpu3050_i2c0_boardinfo));
-#endif
-
        return 0;
 }
 
index 6e2a122..61b7536 100644 (file)
@@ -69,4 +69,21 @@ int ventana_charger_init(void);
 #define TPS6586X_INT_BASE      TEGRA_NR_IRQS
 #define TPS6586X_INT_END       (TPS6586X_INT_BASE + 32)
 
+/* Invensense MPU Definitions */
+#define MPU_GYRO_NAME          "mpu3050"
+#define MPU_GYRO_IRQ_GPIO      TEGRA_GPIO_PZ4
+#define MPU_GYRO_ADDR          0x68
+#define MPU_GYRO_BUS_NUM       0
+#define MPU_GYRO_ORIENTATION   { 0, -1, 0, -1, 0, 0, 0, 0, -1 }
+#define MPU_ACCEL_NAME         "kxtf9"
+#define MPU_ACCEL_IRQ_GPIO     0 /* Disable ACCELIRQ: TEGRA_GPIO_PN4 */
+#define MPU_ACCEL_ADDR         0x0F
+#define MPU_ACCEL_BUS_NUM      0
+#define MPU_ACCEL_ORIENTATION  { 0, -1, 0, -1, 0, 0, 0, 0, -1 }
+#define MPU_COMPASS_NAME       "ak8975"
+#define MPU_COMPASS_IRQ_GPIO   TEGRA_GPIO_PN5
+#define MPU_COMPASS_ADDR       0x0C
+#define MPU_COMPASS_BUS_NUM    4
+#define MPU_COMPASS_ORIENTATION        { 1, 0, 0, 0, 1, 0, 0, 0, 1 }
+
 #endif