iio: imu: inv_mpu6050: add support of IAM20680
authorJean-Baptiste Maneyrol <jmaneyrol@invensense.com>
Thu, 6 Feb 2020 10:31:02 +0000 (11:31 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Fri, 14 Feb 2020 15:06:25 +0000 (15:06 +0000)
Automotive certified IMU, similar to ICM20608.

Signed-off-by: Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/inv_mpu6050/Kconfig
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c
drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c

index e933db3a5a8987bbb6b8da4f4514545d7e59d505..e65474a64675926285a7e3e0e8d8b8667fe7d99d 100644 (file)
@@ -16,7 +16,7 @@ config INV_MPU6050_I2C
        select REGMAP_I2C
        help
          This driver supports the Invensense MPU6050/9150,
-         MPU6500/6515/9250/9255, ICM20608/20609/20689 and ICM20602
+         MPU6500/6515/9250/9255, ICM20608/20609/20689, ICM20602 and IAM20680
          motion tracking devices over I2C.
          This driver can be built as a module. The module will be called
          inv-mpu6050-i2c.
@@ -28,7 +28,7 @@ config INV_MPU6050_SPI
        select REGMAP_SPI
        help
          This driver supports the Invensense MPU6000,
-         MPU6500/6515/9250/9255, ICM20608/20609/20689 and ICM20602
+         MPU6500/6515/9250/9255, ICM20608/20609/20689, ICM20602 and IAM20680
          motion tracking devices over SPI.
          This driver can be built as a module. The module will be called
          inv-mpu6050-spi.
index 5fd57a1bee906f2667b9d2e90e72e0d128d87fb9..e8e6beef3f04bc5cf58b7581b392426d2ce2f0db 100644 (file)
@@ -200,6 +200,14 @@ static const struct inv_mpu6050_hw hw_info[] = {
                .fifo_size = 1008,
                .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
        },
+       {
+               .whoami = INV_IAM20680_WHOAMI_VALUE,
+               .name = "IAM20680",
+               .reg = &reg_set_6500,
+               .config = &chip_config_6050,
+               .fifo_size = 512,
+               .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+       },
 };
 
 int inv_mpu6050_switch_engine(struct inv_mpu6050_state *st, bool en, u32 mask)
index dd054e21216a2671a4f1a9ad84438865ad928f3e..cd0eeb5dc7f63da8d2c522ed0f532a8eb379beae 100644 (file)
@@ -64,6 +64,7 @@ static bool inv_mpu_i2c_aux_bus(struct device *dev)
        case INV_ICM20609:
        case INV_ICM20689:
        case INV_ICM20602:
+       case INV_IAM20680:
                /* no i2c auxiliary bus on the chip */
                return false;
        case INV_MPU9150:
@@ -207,6 +208,7 @@ static const struct i2c_device_id inv_mpu_id[] = {
        {"icm20609", INV_ICM20609},
        {"icm20689", INV_ICM20689},
        {"icm20602", INV_ICM20602},
+       {"iam20680", INV_IAM20680},
        {}
 };
 
@@ -253,6 +255,10 @@ static const struct of_device_id inv_of_match[] = {
                .compatible = "invensense,icm20602",
                .data = (void *)INV_ICM20602
        },
+       {
+               .compatible = "invensense,iam20680",
+               .data = (void *)INV_IAM20680
+       },
        { }
 };
 MODULE_DEVICE_TABLE(of, inv_of_match);
index 75b8903450ebe4a84d38aed9c252b48f49be64bc..404c289f8c8411ff94503394974bdef5b377a5fd 100644 (file)
@@ -78,6 +78,7 @@ enum inv_devices {
        INV_ICM20609,
        INV_ICM20689,
        INV_ICM20602,
+       INV_IAM20680,
        INV_NUM_PARTS
 };
 
@@ -346,6 +347,7 @@ struct inv_mpu6050_state {
 #define INV_ICM20609_WHOAMI_VALUE              0xA6
 #define INV_ICM20689_WHOAMI_VALUE              0x98
 #define INV_ICM20602_WHOAMI_VALUE              0x12
+#define INV_IAM20680_WHOAMI_VALUE              0xA9
 
 /* scan element definition for generic MPU6xxx devices */
 enum inv_mpu6050_scan {
index 3803c40e7b24200c5485f0e729cfe46158b4dd2d..393cec555be60ba887517d97caaa399c9ebf9f92 100644 (file)
@@ -84,6 +84,7 @@ static const struct spi_device_id inv_mpu_id[] = {
        {"icm20609", INV_ICM20609},
        {"icm20689", INV_ICM20689},
        {"icm20602", INV_ICM20602},
+       {"iam20680", INV_IAM20680},
        {}
 };
 
@@ -126,6 +127,10 @@ static const struct of_device_id inv_of_match[] = {
                .compatible = "invensense,icm20602",
                .data = (void *)INV_ICM20602
        },
+       {
+               .compatible = "invensense,iam20680",
+               .data = (void *)INV_IAM20680
+       },
        { }
 };
 MODULE_DEVICE_TABLE(of, inv_of_match);