/* * Copyright (C) 2012 Invensense, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef __MPU_H_ #define __MPU_H_ #ifdef __KERNEL__ #include #include #endif enum secondary_slave_type { SECONDARY_SLAVE_TYPE_NONE, SECONDARY_SLAVE_TYPE_ACCEL, SECONDARY_SLAVE_TYPE_COMPASS, SECONDARY_SLAVE_TYPE_PRESSURE, SECONDARY_SLAVE_TYPE_ALS, SECONDARY_SLAVE_TYPE_TYPES }; enum ext_slave_id { ID_INVALID = 0, GYRO_ID_MPU3050, GYRO_ID_MPU6050A2, GYRO_ID_MPU6050B1, GYRO_ID_MPU6050B1_NO_ACCEL, GYRO_ID_ITG3500, ACCEL_ID_LIS331, ACCEL_ID_LSM303DLX, ACCEL_ID_LIS3DH, ACCEL_ID_KXSD9, ACCEL_ID_KXTF9, ACCEL_ID_BMA150, ACCEL_ID_BMA222, ACCEL_ID_BMA250, ACCEL_ID_ADXL34X, ACCEL_ID_MMA8450, ACCEL_ID_MMA845X, ACCEL_ID_MPU6050, COMPASS_ID_AK8963, COMPASS_ID_AK8975, COMPASS_ID_AK8972, COMPASS_ID_AMI30X, COMPASS_ID_AMI306, COMPASS_ID_YAS529, COMPASS_ID_YAS530, COMPASS_ID_HMC5883, COMPASS_ID_LSM303DLH, COMPASS_ID_LSM303DLM, COMPASS_ID_MMC314X, COMPASS_ID_HSCDTD002B, COMPASS_ID_HSCDTD004A, COMPASS_ID_MLX90399, COMPASS_ID_AK09911, COMPASS_ID_AK09912, COMPASS_ID_ST480M, PRESSURE_ID_BMP085, PRESSURE_ID_BMP280, ALS_ID_APDS_9900, ALS_ID_APDS_9930, }; #define INV_PROD_KEY(ver, rev) (ver * 100 + rev) /** * struct mpu_platform_data - Platform data for the mpu driver * @int_config: Bits [7:3] of the int config register. * @level_shifter: 0: VLogic, 1: VDD * @orientation: Orientation matrix of the gyroscope * @sec_slave_type: secondary slave device type, can be compass, accel, etc * @sec_slave_id: id of the secondary slave device * @secondary_i2c_address: secondary device's i2c address * @secondary_orientation: secondary device's orientation matrix * @aux_slave_type: auxiliary slave. Another slave device type * @aux_slave_id: auxiliary slave ID. * @aux_i2c_addr: auxiliary device I2C address. * @read_only_slave_type: read only slave type. * @read_only_slave_id: read only slave device ID. * @read_only_i2c_addr: read only slave device address. * * Contains platform specific information on how to configure the MPU3050 to * work on this platform. The orientation matricies are 3x3 rotation matricies * that are applied to the data to rotate from the mounting orientation to the * platform orientation. The values must be one of 0, 1, or -1 and each row and * column should have exactly 1 non-zero value. */ struct mpu_platform_data { __u8 int_config; __u8 level_shifter; __s8 orientation[9]; enum secondary_slave_type sec_slave_type; enum ext_slave_id sec_slave_id; __u16 secondary_i2c_addr; __s8 secondary_orientation[9]; enum secondary_slave_type aux_slave_type; enum ext_slave_id aux_slave_id; __u16 aux_i2c_addr; enum secondary_slave_type read_only_slave_type; enum ext_slave_id read_only_slave_id; __u16 read_only_i2c_addr; #ifdef CONFIG_DTS_INV_MPU_IIO int (*power_on)(struct mpu_platform_data *); int (*power_off)(struct mpu_platform_data *); struct regulator *vdd_ana; struct regulator *vdd_i2c; #endif }; #endif /* __MPU_H_ */