Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

iio: gyro: Add support for iam20380 sensor

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>

authored by

Han Xu and committed by
Jonathan Cameron
7a91aee8 b3054121

+38
+25
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
··· 277 277 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE}, 278 278 .startup_time = {INV_ICM20690_GYRO_STARTUP_TIME, INV_ICM20690_ACCEL_STARTUP_TIME}, 279 279 }, 280 + { .whoami = INV_IAM20380_WHOAMI_VALUE, 281 + .name = "IAM20380", 282 + .reg = &reg_set_6500, 283 + .config = &chip_config_6500, 284 + .fifo_size = 512, 285 + .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE}, 286 + .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME}, 287 + }, 280 288 { 281 289 .whoami = INV_IAM20680_WHOAMI_VALUE, 282 290 .name = "IAM20680", ··· 1527 1519 INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z), 1528 1520 }; 1529 1521 1522 + static const struct iio_chan_spec inv_iam20380_channels[] = { 1523 + IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP), 1524 + 1525 + INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X), 1526 + INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y), 1527 + INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z), 1528 + }; 1529 + 1530 1530 static const struct iio_chan_spec inv_mpu6500_channels[] = { 1531 1531 IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP), 1532 1532 ··· 1638 1622 (BIT(INV_MPU9X50_SCAN_MAGN_X) \ 1639 1623 | BIT(INV_MPU9X50_SCAN_MAGN_Y) \ 1640 1624 | BIT(INV_MPU9X50_SCAN_MAGN_Z)) 1625 + 1626 + static const unsigned long inv_iam20380_scan_masks[] = { 1627 + INV_MPU6050_SCAN_MASK_3AXIS_GYRO, 1628 + }; 1641 1629 1642 1630 static const unsigned long inv_mpu9x50_scan_masks[] = { 1643 1631 /* 3-axis accel */ ··· 2045 2025 indio_dev->channels = inv_mpu9250_channels; 2046 2026 indio_dev->num_channels = ARRAY_SIZE(inv_mpu9250_channels); 2047 2027 indio_dev->available_scan_masks = inv_mpu9x50_scan_masks; 2028 + break; 2029 + case INV_IAM20380: 2030 + indio_dev->channels = inv_iam20380_channels; 2031 + indio_dev->num_channels = ARRAY_SIZE(inv_iam20380_channels); 2032 + indio_dev->available_scan_masks = inv_iam20380_scan_masks; 2048 2033 break; 2049 2034 case INV_ICM20600: 2050 2035 case INV_ICM20602:
+6
drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c
··· 34 34 case INV_ICM20689: 35 35 case INV_ICM20600: 36 36 case INV_ICM20602: 37 + case INV_IAM20380: 37 38 case INV_IAM20680: 38 39 /* no i2c auxiliary bus on the chip */ 39 40 return false; ··· 188 187 {"icm20600", INV_ICM20600}, 189 188 {"icm20602", INV_ICM20602}, 190 189 {"icm20690", INV_ICM20690}, 190 + {"iam20380", INV_IAM20380}, 191 191 {"iam20680", INV_IAM20680}, 192 192 {"iam20680hp", INV_IAM20680HP}, 193 193 {"iam20680ht", INV_IAM20680HT}, ··· 253 251 { 254 252 .compatible = "invensense,icm20690", 255 253 .data = (void *)INV_ICM20690 254 + }, 255 + { 256 + .compatible = "invensense,iam20380", 257 + .data = (void *)INV_IAM20380 256 258 }, 257 259 { 258 260 .compatible = "invensense,iam20680",
+2
drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
··· 84 84 INV_ICM20600, 85 85 INV_ICM20602, 86 86 INV_ICM20690, 87 + INV_IAM20380, 87 88 INV_IAM20680, 88 89 INV_IAM20680HP, 89 90 INV_IAM20680HT, ··· 426 425 #define INV_ICM20600_WHOAMI_VALUE 0x11 427 426 #define INV_ICM20602_WHOAMI_VALUE 0x12 428 427 #define INV_ICM20690_WHOAMI_VALUE 0x20 428 + #define INV_IAM20380_WHOAMI_VALUE 0xB5 429 429 #define INV_IAM20680_WHOAMI_VALUE 0xA9 430 430 #define INV_IAM20680HP_WHOAMI_VALUE 0xF8 431 431 #define INV_IAM20680HT_WHOAMI_VALUE 0xFA
+5
drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c
··· 79 79 {"icm20600", INV_ICM20600}, 80 80 {"icm20602", INV_ICM20602}, 81 81 {"icm20690", INV_ICM20690}, 82 + {"iam20380", INV_IAM20380}, 82 83 {"iam20680", INV_IAM20680}, 83 84 {"iam20680hp", INV_IAM20680HP}, 84 85 {"iam20680ht", INV_IAM20680HT}, ··· 140 139 { 141 140 .compatible = "invensense,icm20690", 142 141 .data = (void *)INV_ICM20690 142 + }, 143 + { 144 + .compatible = "invensense,iam20380", 145 + .data = (void *)INV_IAM20380 143 146 }, 144 147 { 145 148 .compatible = "invensense,iam20680",