]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: gyro: Add support for iam20380 sensor
authorHan Xu <han.xu@nxp.com>
Fri, 15 Nov 2024 22:37:23 +0000 (17:37 -0500)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 7 Dec 2024 17:47:59 +0000 (17:47 +0000)
Add support for the Invensense IAM20380 sensor to the MPU6050 driver. It is
similar to the IAM20680. But IAM20380 only supports gyro and WHOAMI
register data is difference.

Signed-off-by: Han Xu <han.xu@nxp.com>
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Acked-by: Jean-Baptiste Maneyrol <jean-baptiste.maneyrol@tdk.com>
Link: https://patch.msgid.link/20241115-iam20380-v2-2-d8d9dc6891f5@nxp.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 844b611b825a961375193b726e9722c7a0d0887f..5bcd5e7970468d0279aa81f104d1355d8ed3c648 100644 (file)
@@ -277,6 +277,14 @@ static const struct inv_mpu6050_hw hw_info[] = {
                .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
                .startup_time = {INV_ICM20690_GYRO_STARTUP_TIME, INV_ICM20690_ACCEL_STARTUP_TIME},
        },
+       {       .whoami = INV_IAM20380_WHOAMI_VALUE,
+               .name = "IAM20380",
+               .reg = &reg_set_6500,
+               .config = &chip_config_6500,
+               .fifo_size = 512,
+               .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE},
+               .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME},
+       },
        {
                .whoami = INV_IAM20680_WHOAMI_VALUE,
                .name = "IAM20680",
@@ -1519,6 +1527,14 @@ static const struct iio_chan_spec inv_mpu6050_channels[] = {
        INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z),
 };
 
+static const struct iio_chan_spec inv_iam20380_channels[] = {
+       IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),
+
+       INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X),
+       INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y),
+       INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z),
+};
+
 static const struct iio_chan_spec inv_mpu6500_channels[] = {
        IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP),
 
@@ -1623,6 +1639,10 @@ static const struct iio_chan_spec inv_mpu9250_channels[] = {
        | BIT(INV_MPU9X50_SCAN_MAGN_Y)          \
        | BIT(INV_MPU9X50_SCAN_MAGN_Z))
 
+static const unsigned long inv_iam20380_scan_masks[] = {
+       INV_MPU6050_SCAN_MASK_3AXIS_GYRO,
+};
+
 static const unsigned long inv_mpu9x50_scan_masks[] = {
        /* 3-axis accel */
        INV_MPU6050_SCAN_MASK_3AXIS_ACCEL,
@@ -2026,6 +2046,11 @@ int inv_mpu_core_probe(struct regmap *regmap, int irq, const char *name,
                indio_dev->num_channels = ARRAY_SIZE(inv_mpu9250_channels);
                indio_dev->available_scan_masks = inv_mpu9x50_scan_masks;
                break;
+       case INV_IAM20380:
+               indio_dev->channels = inv_iam20380_channels;
+               indio_dev->num_channels = ARRAY_SIZE(inv_iam20380_channels);
+               indio_dev->available_scan_masks = inv_iam20380_scan_masks;
+               break;
        case INV_ICM20600:
        case INV_ICM20602:
                indio_dev->channels = inv_mpu6500_channels;
index 307a06f4df2e2fb61d67a11dce8e01f901ffc128..91d77f94d2046aa141eaf33c17d0d5391fe606eb 100644 (file)
@@ -34,6 +34,7 @@ static bool inv_mpu_i2c_aux_bus(struct device *dev)
        case INV_ICM20689:
        case INV_ICM20600:
        case INV_ICM20602:
+       case INV_IAM20380:
        case INV_IAM20680:
                /* no i2c auxiliary bus on the chip */
                return false;
@@ -187,6 +188,7 @@ static const struct i2c_device_id inv_mpu_id[] = {
        {"icm20600", INV_ICM20600},
        {"icm20602", INV_ICM20602},
        {"icm20690", INV_ICM20690},
+       {"iam20380", INV_IAM20380},
        {"iam20680", INV_IAM20680},
        {"iam20680hp", INV_IAM20680HP},
        {"iam20680ht", INV_IAM20680HT},
@@ -252,6 +254,10 @@ static const struct of_device_id inv_of_match[] = {
                .compatible = "invensense,icm20690",
                .data = (void *)INV_ICM20690
        },
+       {
+               .compatible = "invensense,iam20380",
+               .data = (void *)INV_IAM20380
+       },
        {
                .compatible = "invensense,iam20680",
                .data = (void *)INV_IAM20680
index a6862cf426396cbaf3452bb3451cd58e4f30a4ec..211901f8b8eb6fef72e57afabf5cbc3e5140b9b9 100644 (file)
@@ -84,6 +84,7 @@ enum inv_devices {
        INV_ICM20600,
        INV_ICM20602,
        INV_ICM20690,
+       INV_IAM20380,
        INV_IAM20680,
        INV_IAM20680HP,
        INV_IAM20680HT,
@@ -425,6 +426,7 @@ struct inv_mpu6050_state {
 #define INV_ICM20600_WHOAMI_VALUE              0x11
 #define INV_ICM20602_WHOAMI_VALUE              0x12
 #define INV_ICM20690_WHOAMI_VALUE              0x20
+#define INV_IAM20380_WHOAMI_VALUE              0xB5
 #define INV_IAM20680_WHOAMI_VALUE              0xA9
 #define INV_IAM20680HP_WHOAMI_VALUE            0xF8
 #define INV_IAM20680HT_WHOAMI_VALUE            0xFA
index ab415874d6994844c94302fa3cd45f05d2e50d45..20de6eb5cd35568623ed3e6ae6aac49a632a681a 100644 (file)
@@ -79,6 +79,7 @@ static const struct spi_device_id inv_mpu_id[] = {
        {"icm20600", INV_ICM20600},
        {"icm20602", INV_ICM20602},
        {"icm20690", INV_ICM20690},
+       {"iam20380", INV_IAM20380},
        {"iam20680", INV_IAM20680},
        {"iam20680hp", INV_IAM20680HP},
        {"iam20680ht", INV_IAM20680HT},
@@ -140,6 +141,10 @@ static const struct of_device_id inv_of_match[] = {
                .compatible = "invensense,icm20690",
                .data = (void *)INV_ICM20690
        },
+       {
+               .compatible = "invensense,iam20380",
+               .data = (void *)INV_IAM20380
+       },
        {
                .compatible = "invensense,iam20680",
                .data = (void *)INV_IAM20680