diff options
author | Robert Collins <rcollins@nvidia.com> | 2011-11-09 13:59:33 -0800 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2011-12-08 18:00:55 +0530 |
commit | 5d901d9a62a560a7e260902f78286678297bfd3d (patch) | |
tree | 483cfe1b6fd7c1b20daef7899f8c946fab0eba73 /arch/arm/mach-tegra/board-ventana-sensors.c | |
parent | f1e961e877025f60cc409180350a3def85f26f64 (diff) |
mpu3050: Motion Libraries: Board files for MPL v4.1.1.
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>
Diffstat (limited to 'arch/arm/mach-tegra/board-ventana-sensors.c')
-rw-r--r-- | arch/arm/mach-tegra/board-ventana-sensors.c | 123 |
1 files changed, 81 insertions, 42 deletions
diff --git a/arch/arm/mach-tegra/board-ventana-sensors.c b/arch/arm/mach-tegra/board-ventana-sensors.c index 5d1c73f65fef..c9c2f5441612 100644 --- a/arch/arm/mach-tegra/board-ventana-sensors.c +++ b/arch/arm/mach-tegra/board-ventana-sensors.c @@ -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; } |