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

iio: imu: inv_mpu6050: add support for IAM-20680HT/HP

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>

authored by

Jean-Baptiste Maneyrol and committed by
Jonathan Cameron
85255921 129bb33f

+44
+20
drivers/iio/imu/inv_mpu6050/inv_mpu_core.c
··· 286 286 .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE}, 287 287 .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME}, 288 288 }, 289 + { 290 + .whoami = INV_IAM20680HP_WHOAMI_VALUE, 291 + .name = "IAM20680HP", 292 + .reg = &reg_set_6500, 293 + .config = &chip_config_6500, 294 + .fifo_size = 4 * 1024, 295 + .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE}, 296 + .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME}, 297 + }, 298 + { 299 + .whoami = INV_IAM20680HT_WHOAMI_VALUE, 300 + .name = "IAM20680HT", 301 + .reg = &reg_set_6500, 302 + .config = &chip_config_6500, 303 + .fifo_size = 4 * 1024, 304 + .temp = {INV_ICM20608_TEMP_OFFSET, INV_ICM20608_TEMP_SCALE}, 305 + .startup_time = {INV_MPU6500_GYRO_STARTUP_TIME, INV_MPU6500_ACCEL_STARTUP_TIME}, 306 + }, 289 307 }; 290 308 291 309 static int inv_mpu6050_pwr_mgmt_1_write(struct inv_mpu6050_state *st, bool sleep, ··· 528 510 return 0; 529 511 case INV_ICM20689: 530 512 case INV_ICM20690: 513 + case INV_IAM20680HT: 514 + case INV_IAM20680HP: 531 515 /* set FIFO size to maximum value */ 532 516 val |= INV_ICM20689_BITS_FIFO_SIZE_MAX; 533 517 break;
+10
drivers/iio/imu/inv_mpu6050/inv_mpu_i2c.c
··· 188 188 {"icm20602", INV_ICM20602}, 189 189 {"icm20690", INV_ICM20690}, 190 190 {"iam20680", INV_IAM20680}, 191 + {"iam20680hp", INV_IAM20680HP}, 192 + {"iam20680ht", INV_IAM20680HT}, 191 193 {} 192 194 }; 193 195 ··· 255 253 { 256 254 .compatible = "invensense,iam20680", 257 255 .data = (void *)INV_IAM20680 256 + }, 257 + { 258 + .compatible = "invensense,iam20680hp", 259 + .data = (void *)INV_IAM20680HP 260 + }, 261 + { 262 + .compatible = "invensense,iam20680ht", 263 + .data = (void *)INV_IAM20680HT 258 264 }, 259 265 { } 260 266 };
+4
drivers/iio/imu/inv_mpu6050/inv_mpu_iio.h
··· 85 85 INV_ICM20602, 86 86 INV_ICM20690, 87 87 INV_IAM20680, 88 + INV_IAM20680HP, 89 + INV_IAM20680HT, 88 90 INV_NUM_PARTS 89 91 }; 90 92 ··· 426 424 #define INV_ICM20602_WHOAMI_VALUE 0x12 427 425 #define INV_ICM20690_WHOAMI_VALUE 0x20 428 426 #define INV_IAM20680_WHOAMI_VALUE 0xA9 427 + #define INV_IAM20680HP_WHOAMI_VALUE 0xF8 428 + #define INV_IAM20680HT_WHOAMI_VALUE 0xFA 429 429 430 430 /* scan element definition for generic MPU6xxx devices */ 431 431 enum inv_mpu6050_scan {
+10
drivers/iio/imu/inv_mpu6050/inv_mpu_spi.c
··· 80 80 {"icm20602", INV_ICM20602}, 81 81 {"icm20690", INV_ICM20690}, 82 82 {"iam20680", INV_IAM20680}, 83 + {"iam20680hp", INV_IAM20680HP}, 84 + {"iam20680ht", INV_IAM20680HT}, 83 85 {} 84 86 }; 85 87 ··· 143 141 { 144 142 .compatible = "invensense,iam20680", 145 143 .data = (void *)INV_IAM20680 144 + }, 145 + { 146 + .compatible = "invensense,iam20680hp", 147 + .data = (void *)INV_IAM20680HP 148 + }, 149 + { 150 + .compatible = "invensense,iam20680ht", 151 + .data = (void *)INV_IAM20680HT 146 152 }, 147 153 { } 148 154 };