arch: arm: board support for Invensense MPU
Graziano Misuraca [Thu, 13 Sep 2012 01:04:13 +0000 (18:04 -0700)]
Add board support for Invensense MPU

Change-Id: Iefabb4e01f9d0772a3a037696fe82417a51f78fd
Signed-off-by: Xiaohui Tao <xtao@nvidia.com>
Signed-off-by: Robert Collins <rcollins@nvidia.com>
Signed-off-by: Graziano Misuraca <gmisuraca@nvidia.com>
Reviewed-on: http://git-master/r/132404
(cherry picked from commit baea2bfc5696f2f044efc80f5b7a88dda061e3d8)
Reviewed-on: http://git-master/r/138746
Reviewed-by: Automatic_Commit_Validation_User
Tested-by: Gaurav Batra <gbatra@nvidia.com>
Reviewed-by: Thomas Cherry <tcherry@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-kai-sensors.c
arch/arm/mach-tegra/board-kai.h

index e50be58..cc6e93d 100644 (file)
@@ -1095,34 +1095,22 @@ static int __init cam_tca6416_init(void)
 #endif
 
 /* MPU board file definition   */
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-#define MPU_GYRO_NAME          "mpu3050"
-#endif
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU6050)
-#define MPU_GYRO_NAME          "mpu6050"
-#endif
 static struct mpu_platform_data mpu_gyro_data = {
        .int_config     = 0x10,
        .level_shifter  = 0,
        .orientation    = MPU_GYRO_ORIENTATION, /* Located in board_[platformname].h    */
+       .sec_slave_type = SECONDARY_SLAVE_TYPE_ACCEL,
+       .sec_slave_id   = ACCEL_ID_KXTF9,
+       .secondary_i2c_addr     = MPU_ACCEL_ADDR,
+       .secondary_read_reg     = 0x06,
+       .secondary_orientation  = MPU_ACCEL_ORIENTATION,
+       .key            = {0x4E, 0xCC, 0x7E, 0xEB, 0xF6, 0x1E, 0x35, 0x22,
+                          0x00, 0x34, 0x0D, 0x65, 0x32, 0xE9, 0x94, 0x89},
 };
 
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-static struct ext_slave_platform_data mpu_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    */
-};
-#endif
-
-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 mpu_platform_data mpu_compass_data = {
+       .orientation    = MPU_COMPASS_ORIENTATION,
+       .sec_slave_type = SECONDARY_SLAVE_TYPE_NONE,
 };
 
 static struct i2c_board_info __initdata inv_mpu_i2c2_board_info[] = {
@@ -1130,12 +1118,9 @@ static struct i2c_board_info __initdata inv_mpu_i2c2_board_info[] = {
                I2C_BOARD_INFO(MPU_GYRO_NAME, MPU_GYRO_ADDR),
                .platform_data = &mpu_gyro_data,
        },
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
        {
                I2C_BOARD_INFO(MPU_ACCEL_NAME, MPU_ACCEL_ADDR),
-               .platform_data = &mpu_accel_data,
        },
-#endif
        {
                I2C_BOARD_INFO(MPU_COMPASS_NAME, MPU_COMPASS_ADDR),
                .platform_data = &mpu_compass_data,
@@ -1149,7 +1134,6 @@ static void mpuirq_init(void)
 
        pr_info("*** MPU START *** mpuirq_init...\n");
 
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
 #if    MPU_ACCEL_IRQ_GPIO
        /* ACCEL-IRQ assignment */
        ret = gpio_request(MPU_ACCEL_IRQ_GPIO, MPU_ACCEL_NAME);
@@ -1165,7 +1149,6 @@ static void mpuirq_init(void)
                return;
        }
 #endif
-#endif
 
        /* MPU-IRQ assignment */
        ret = gpio_request(MPU_GYRO_IRQ_GPIO, MPU_GYRO_NAME);
@@ -1183,12 +1166,10 @@ static void mpuirq_init(void)
        pr_info("*** MPU END *** mpuirq_init...\n");
 
        inv_mpu_i2c2_board_info[i++].irq = gpio_to_irq(MPU_GYRO_IRQ_GPIO);
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
 #if MPU_ACCEL_IRQ_GPIO
        inv_mpu_i2c2_board_info[i].irq = gpio_to_irq(MPU_ACCEL_IRQ_GPIO);
 #endif
        i++;
-#endif
 #if MPU_COMPASS_IRQ_GPIO
        inv_mpu_i2c2_board_info[i++].irq = gpio_to_irq(MPU_COMPAS_IRQ_GPIO);
 #endif
index 8e2bb0b..49c1abf 100644 (file)
@@ -223,10 +223,6 @@ int cardhu_pm299_regulator_init(void);
 
 extern struct tegra_uart_platform_data cardhu_irda_pdata;
 
-#define MPU_TYPE_MPU3050       1
-#define MPU_TYPE_MPU6050       2
-#define MPU_GYRO_TYPE          MPU_TYPE_MPU3050
-
 /* Touch definitions */
 #define TOUCH_GPIO_IRQ_RAYDIUM_SPI      TEGRA_GPIO_PH4
 #define TOUCH_GPIO_RST_RAYDIUM_SPI      TEGRA_GPIO_PH6
index e7e7b57..20191c5 100644 (file)
@@ -141,34 +141,22 @@ static void enterprise_nct1008_init(void)
 }
 
 /* MPU board file definition   */
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-#define MPU_GYRO_NAME          "mpu3050"
-#endif
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU6050)
-#define MPU_GYRO_NAME          "mpu6050"
-#endif
 static struct mpu_platform_data mpu_gyro_data = {
        .int_config     = 0x10,
        .level_shifter  = 0,
        .orientation    = MPU_GYRO_ORIENTATION, /* Located in board_[platformname].h    */
+       .sec_slave_type = SECONDARY_SLAVE_TYPE_ACCEL,
+       .sec_slave_id   = ACCEL_ID_KXTF9,
+       .secondary_i2c_addr     = MPU_ACCEL_ADDR,
+       .secondary_read_reg     = 0x06,
+       .secondary_orientation  = MPU_ACCEL_ORIENTATION,
+       .key            = {0x4E, 0xCC, 0x7E, 0xEB, 0xF6, 0x1E, 0x35, 0x22,
+                          0x00, 0x34, 0x0D, 0x65, 0x32, 0xE9, 0x94, 0x89},
 };
 
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-static struct ext_slave_platform_data mpu_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    */
-};
-#endif
-
-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 mpu_platform_data mpu_compass_data = {
+       .orientation    = MPU_COMPASS_ORIENTATION,
+       .sec_slave_type = SECONDARY_SLAVE_TYPE_NONE,
 };
 
 static struct i2c_board_info __initdata inv_mpu_i2c2_board_info[] = {
@@ -176,12 +164,9 @@ static struct i2c_board_info __initdata inv_mpu_i2c2_board_info[] = {
                I2C_BOARD_INFO(MPU_GYRO_NAME, MPU_GYRO_ADDR),
                .platform_data = &mpu_gyro_data,
        },
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
        {
                I2C_BOARD_INFO(MPU_ACCEL_NAME, MPU_ACCEL_ADDR),
-               .platform_data = &mpu_accel_data,
        },
-#endif
        {
                I2C_BOARD_INFO(MPU_COMPASS_NAME, MPU_COMPASS_ADDR),
                .platform_data = &mpu_compass_data,
@@ -195,7 +180,6 @@ static void mpuirq_init(void)
 
        pr_info("*** MPU START *** mpuirq_init...\n");
 
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
 #if    MPU_ACCEL_IRQ_GPIO
        /* ACCEL-IRQ assignment */
        ret = gpio_request(MPU_ACCEL_IRQ_GPIO, MPU_ACCEL_NAME);
@@ -211,7 +195,6 @@ static void mpuirq_init(void)
                return;
        }
 #endif
-#endif
 
        /* MPU-IRQ assignment */
        ret = gpio_request(MPU_GYRO_IRQ_GPIO, MPU_GYRO_NAME);
@@ -229,14 +212,12 @@ static void mpuirq_init(void)
        pr_info("*** MPU END *** mpuirq_init...\n");
 
        inv_mpu_i2c2_board_info[i++].irq = gpio_to_irq(MPU_GYRO_IRQ_GPIO);
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-#ifdef MPU_ACCELL_IRQ_GPIO
+#if MPU_ACCEL_IRQ_GPIO
        inv_mpu_i2c2_board_info[i].irq = gpio_to_irq(MPU_ACCEL_IRQ_GPIO);
 #endif
        i++;
-#endif
-#ifdef MPU_COMPASS_IRQ_GPIO
-       inv_mpu_i2c2_board_info[i++].irq = gpio_to_irq(MPU_COMPASS_IRQ_GPIO);
+#if MPU_COMPASS_IRQ_GPIO
+       inv_mpu_i2c2_board_info[i++].irq = gpio_to_irq(MPU_COMPAS_IRQ_GPIO);
 #endif
        i2c_register_board_info(MPU_GYRO_BUS_NUM, inv_mpu_i2c2_board_info,
                ARRAY_SIZE(inv_mpu_i2c2_board_info));
index 4903ea4..f4a3378 100644 (file)
@@ -56,12 +56,13 @@ int enterprise_edp_init(void);
 void enterprise_bpc_mgmt_init(void);
 
 /* Invensense MPU Definitions */
-#define MPU_TYPE_MPU3050       1
-#define MPU_TYPE_MPU6050       2
-#define MPU_GYRO_TYPE          MPU_TYPE_MPU3050
+#define MPU_GYRO_NAME          "mpu3050"
+#define MPU_GYRO_NAME_TAI      "mpu9150"
 #define MPU_GYRO_IRQ_GPIO      TEGRA_GPIO_PH4
+#define MPU_GYRO_IRQ_GPIO_TAI  TEGRA_GPIO_PI6
 #define MPU_GYRO_ADDR          0x68
 #define MPU_GYRO_BUS_NUM       0
+#define MPU_GYRO_BUS_NUM_TAI   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 */
index 6421b0f..9b7250f 100644 (file)
@@ -233,36 +233,18 @@ static struct i2c_board_info kai_i2c2_board_info[] = {
 };
 
 /* MPU board file definition */
-
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-#define MPU_GYRO_NAME          "mpu3050"
-#endif
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU6050)
-#define MPU_GYRO_NAME          "mpu6050"
-#endif
-
 static struct mpu_platform_data mpu_gyro_data = {
        .int_config     = 0x10,
        .level_shifter  = 0,
        .orientation    = MPU_GYRO_ORIENTATION,
+       .sec_slave_type = SECONDARY_SLAVE_TYPE_NONE,
+       .key            = {0x4E, 0xCC, 0x7E, 0xEB, 0xF6, 0x1E, 0x35, 0x22,
+                          0x00, 0x34, 0x0D, 0x65, 0x32, 0xE9, 0x94, 0x89},
 };
 
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-static struct ext_slave_platform_data mpu_accel_data = {
-       .address        = MPU_ACCEL_ADDR,
-       .irq            = 0,
-       .adapt_num      = MPU_ACCEL_BUS_NUM,
-       .bus            = EXT_SLAVE_BUS_SECONDARY,
-       .orientation    = MPU_ACCEL_ORIENTATION,
-};
-#endif
-
-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,
+static struct mpu_platform_data mpu_compass_data = {
+       .orientation    = MPU_COMPASS_ORIENTATION,
+       .sec_slave_type = SECONDARY_SLAVE_TYPE_NONE,
 };
 
 static struct i2c_board_info __initdata inv_mpu_i2c0_board_info[] = {
@@ -270,12 +252,6 @@ static struct i2c_board_info __initdata inv_mpu_i2c0_board_info[] = {
                I2C_BOARD_INFO(MPU_GYRO_NAME, MPU_GYRO_ADDR),
                .platform_data = &mpu_gyro_data,
        },
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-       {
-               I2C_BOARD_INFO(MPU_ACCEL_NAME, MPU_ACCEL_ADDR),
-               .platform_data = &mpu_accel_data,
-       },
-#endif
        {
                I2C_BOARD_INFO(MPU_COMPASS_NAME, MPU_COMPASS_ADDR),
                .platform_data = &mpu_compass_data,
@@ -289,24 +265,6 @@ static void mpuirq_init(void)
 
        pr_info("*** MPU START *** mpuirq_init...\n");
 
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-#if MPU_ACCEL_IRQ_GPIO
-       /* ACCEL-IRQ assignment */
-       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
-#endif
-
        /* MPU-IRQ assignment */
        ret = gpio_request(MPU_GYRO_IRQ_GPIO, MPU_GYRO_NAME);
        if (ret < 0) {
@@ -323,13 +281,7 @@ static void mpuirq_init(void)
        pr_info("*** MPU END *** mpuirq_init...\n");
 
        inv_mpu_i2c0_board_info[i++].irq = gpio_to_irq(MPU_GYRO_IRQ_GPIO);
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-#if MPU_ACCEL_IRQ_GPIO
-       inv_mpu_i2c0_board_info[i].irq = gpio_to_irq(MPU_ACCEL_IRQ_GPIO);
-#endif
-       i++
-#endif
-#if MPU_COMPASS_IRQ_GPIO
+#ifdef MPU_COMPASS_IRQ_GPIO
        inv_mpu_i2c0_board_info[i++].irq = gpio_to_irq(MPU_COMPASS_IRQ_GPIO);
 #endif
        i2c_register_board_info(MPU_GYRO_BUS_NUM, inv_mpu_i2c0_board_info,
index 6000553..02c31ca 100644 (file)
@@ -96,20 +96,11 @@ int __init touch_init_synaptics_kai(void);
 
 #define KAI_TEMP_ALERT_GPIO    TEGRA_GPIO_PS3
 
-#define MPU_TYPE_MPU3050       1
-#define MPU_TYPE_MPU6050       2
-#define MPU_GYRO_TYPE          MPU_TYPE_MPU6050
+#define MPU_GYRO_NAME          "mpu6050"
 #define MPU_GYRO_IRQ_GPIO      TEGRA_GPIO_PX1
 #define MPU_GYRO_ADDR          0x68
 #define MPU_GYRO_BUS_NUM       0
 #define MPU_GYRO_ORIENTATION   { 0, -1, 0, -1, 0, 0, 0, 0, -1 }
-#if (MPU_GYRO_TYPE == MPU_TYPE_MPU3050)
-#define MPU_ACCEL_NAME         "kxtf9"
-#define MPU_ACCEL_IRQ_GPIO     TEGRA_GPIO_PL1
-#define MPU_ACCEL_ADDR         0x0F
-#define MPU_ACCEL_BUS_NUM      0
-#define MPU_ACCEL_ORIENTATION  { 0, -1, 0, -1, 0, 0, 0, 0, -1 }
-#endif
 #define MPU_COMPASS_NAME       "ak8975"
 #define MPU_COMPASS_IRQ_GPIO   0
 #define MPU_COMPASS_ADDR       0x0C