]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: imu: inv_mpu6050: add support for IAM-20680HT/HP
authorJean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Mon, 23 Sep 2024 14:53:22 +0000 (16:53 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 5 Oct 2024 11:09:14 +0000 (12:09 +0100)
IAM-20680HT & HP are 2 variants of IAM-20680 with better specs,
wider temperature range, and a bigger FIFO (4k).

Fully compatible with IAM-20680, FIFO is 512 bytes by default and
with correct register setting we expand it to full 4k.

Signed-off-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Link: https://patch.msgid.link/20240923-inv-mpu6050-add-iam20680-ht-hp-v2-2-48290e0b9931@tdk.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
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 fdb48c5e5686da0d6ba2f03f73c7eb53f21e8a06..5680be153127711777b6074da18a7a0f86211d6c 100644 (file)
@@ -286,6 +286,24 @@ static const struct inv_mpu6050_hw hw_info[] = {
                .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
                .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
        },
+       {
+               .whoami = INV_IAM20680HP_WHOAMI_VALUE,
+               .name = "IAM20680HP",
+               .reg = &reg_set_6500,
+               .config = &chip_config_6500,
+               .fifo_size = 4 * 1024,
+               .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
+       },
+       {
+               .whoami = INV_IAM20680HT_WHOAMI_VALUE,
+               .name = "IAM20680HT",
+               .reg = &reg_set_6500,
+               .config = &chip_config_6500,
+               .fifo_size = 4 * 1024,
+               .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
+       },
 };
 
 static int inv_mpu6050_pwr_mgmt_1_write(struct inv_mpu6050_state *st, bool sleep,
@@ -510,6 +528,8 @@ static int inv_mpu6050_set_accel_lpf_regs(struct inv_mpu6050_state *st,
                return 0;
        case INV_ICM20689:
        case INV_ICM20690:
+       case INV_IAM20680HT:
+       case INV_IAM20680HP:
                /* set FIFO size to maximum value */
                val |= INV_ICM20689_BITS_FIFO_SIZE_MAX;
                break;
index 0e03137fb3d40d4753989522cf5168ef358a1014..7a5926ba6b97d5e5fbdd08e0c90b58afb3f0131a 100644 (file)
@@ -188,6 +188,8 @@ static const struct i2c_device_id inv_mpu_id[] = {
        {"icm20602", INV_ICM20602},
        {"icm20690", INV_ICM20690},
        {"iam20680", INV_IAM20680},
+       {"iam20680hp", INV_IAM20680HP},
+       {"iam20680ht", INV_IAM20680HT},
        {}
 };
 
@@ -254,6 +256,14 @@ static const struct of_device_id inv_of_match[] = {
                .compatible = "invensense,iam20680",
                .data = (void *)INV_IAM20680
        },
+       {
+               .compatible = "invensense,iam20680hp",
+               .data = (void *)INV_IAM20680HP
+       },
+       {
+               .compatible = "invensense,iam20680ht",
+               .data = (void *)INV_IAM20680HT
+       },
        { }
 };
 MODULE_DEVICE_TABLE(of, inv_of_match);
index e1c0c51468761ab18188a224e44e09f919d81f9a..a6862cf426396cbaf3452bb3451cd58e4f30a4ec 100644 (file)
@@ -85,6 +85,8 @@ enum inv_devices {
        INV_ICM20602,
        INV_ICM20690,
        INV_IAM20680,
+       INV_IAM20680HP,
+       INV_IAM20680HT,
        INV_NUM_PARTS
 };
 
@@ -424,6 +426,8 @@ struct inv_mpu6050_state {
 #define INV_ICM20602_WHOAMI_VALUE              0x12
 #define INV_ICM20690_WHOAMI_VALUE              0x20
 #define INV_IAM20680_WHOAMI_VALUE              0xA9
+#define INV_IAM20680HP_WHOAMI_VALUE            0xF8
+#define INV_IAM20680HT_WHOAMI_VALUE            0xFA
 
 /* scan element definition for generic MPU6xxx devices */
 enum inv_mpu6050_scan {
index 05451ca1580b637a66a30efe82fbd2a2b63e55d5..e6a291fcda958c56e889e58151929a2f602b0426 100644 (file)
@@ -80,6 +80,8 @@ static const struct spi_device_id inv_mpu_id[] = {
        {"icm20602", INV_ICM20602},
        {"icm20690", INV_ICM20690},
        {"iam20680", INV_IAM20680},
+       {"iam20680hp", INV_IAM20680HP},
+       {"iam20680ht", INV_IAM20680HT},
        {}
 };
 
@@ -142,6 +144,14 @@ static const struct of_device_id inv_of_match[] = {
                .compatible = "invensense,iam20680",
                .data = (void *)INV_IAM20680
        },
+       {
+               .compatible = "invensense,iam20680hp",
+               .data = (void *)INV_IAM20680HP
+       },
+       {
+               .compatible = "invensense,iam20680ht",
+               .data = (void *)INV_IAM20680HT
+       },
        { }
 };
 MODULE_DEVICE_TABLE(of, inv_of_match);