iio: imu: adis16480: add devices to adis16480 driver
authorDarius Berghe <darius.berghe@analog.com>
Fri, 8 Nov 2024 12:58:12 +0000 (14:58 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 7 Dec 2024 17:11:00 +0000 (17:11 +0000)
Add support for adis16486, adis16487 and adis16489 Six Degrees
of Freedom Inertial Sensors into the existing adis16480 iio
subsystem driver.

adis16486 is similar to adis16485, has the exact same channels
but acceleration and delta velocity scales are different.

adis16487 is fallback compatible with adis16485.

adis16489 is similar to adis16488 but lacks the magnetometer
and has a different accelerometer scale.

Signed-off-by: Darius Berghe <darius.berghe@analog.com>
Link: https://patch.msgid.link/20241108125814.3097213-2-darius.berghe@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/imu/adis16480.c

index 0a5d13d2240eee27a24ee9fae2f8b0d04a39dde9..727e0a11eac14771b1052aee4e301ab0bb9c4870 100644 (file)
@@ -878,11 +878,32 @@ static const struct iio_chan_spec adis16545_channels[] = {
        IIO_CHAN_SOFT_TIMESTAMP(17),
 };
 
+static const struct iio_chan_spec adis16489_channels[] = {
+       ADIS16480_GYRO_CHANNEL(X),
+       ADIS16480_GYRO_CHANNEL(Y),
+       ADIS16480_GYRO_CHANNEL(Z),
+       ADIS16480_ACCEL_CHANNEL(X),
+       ADIS16480_ACCEL_CHANNEL(Y),
+       ADIS16480_ACCEL_CHANNEL(Z),
+       ADIS16480_PRESSURE_CHANNEL(),
+       ADIS16480_TEMP_CHANNEL(),
+       IIO_CHAN_SOFT_TIMESTAMP(8),
+       ADIS16480_DELTANG_CHANNEL_NO_SCAN(X),
+       ADIS16480_DELTANG_CHANNEL_NO_SCAN(Y),
+       ADIS16480_DELTANG_CHANNEL_NO_SCAN(Z),
+       ADIS16480_DELTVEL_CHANNEL_NO_SCAN(X),
+       ADIS16480_DELTVEL_CHANNEL_NO_SCAN(Y),
+       ADIS16480_DELTVEL_CHANNEL_NO_SCAN(Z),
+};
+
 enum adis16480_variant {
        ADIS16375,
        ADIS16480,
        ADIS16485,
+       ADIS16486,
+       ADIS16487,
        ADIS16488,
+       ADIS16489,
        ADIS16490,
        ADIS16495_1,
        ADIS16495_2,
@@ -1038,6 +1059,38 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
                .filter_freqs = adis16480_def_filter_freqs,
                .adis_data = ADIS16480_DATA(16485, &adis16485_timeouts, 0, 0),
        },
+       [ADIS16486] = {
+               .channels = adis16485_channels,
+               .num_channels = ARRAY_SIZE(adis16485_channels),
+               .gyro_max_val = 22500 << 16,
+               .gyro_max_scale = IIO_DEGREE_TO_RAD(450),
+               .accel_max_val = IIO_M_S_2_TO_G(20000 << 16),
+               .accel_max_scale = 18,
+               .temp_scale = 5650, /* 5.65 milli degree Celsius */
+               .deltang_max_val = IIO_DEGREE_TO_RAD(720),
+               .deltvel_max_val = 200,
+               .int_clk = 2460000,
+               .max_dec_rate = 2048,
+               .has_sleep_cnt = true,
+               .filter_freqs = adis16480_def_filter_freqs,
+               .adis_data = ADIS16480_DATA(16486, &adis16480_timeouts, 0, 0),
+       },
+       [ADIS16487] = {
+               .channels = adis16485_channels,
+               .num_channels = ARRAY_SIZE(adis16485_channels),
+               .gyro_max_val = 22500 << 16,
+               .gyro_max_scale = IIO_DEGREE_TO_RAD(450),
+               .accel_max_val = IIO_M_S_2_TO_G(20000 << 16),
+               .accel_max_scale = 5,
+               .temp_scale = 5650, /* 5.65 milli degree Celsius */
+               .deltang_max_val = IIO_DEGREE_TO_RAD(720),
+               .deltvel_max_val = 50,
+               .int_clk = 2460000,
+               .max_dec_rate = 2048,
+               .has_sleep_cnt = true,
+               .filter_freqs = adis16480_def_filter_freqs,
+               .adis_data = ADIS16480_DATA(16487, &adis16485_timeouts, 0, 0),
+       },
        [ADIS16488] = {
                .channels = adis16480_channels,
                .num_channels = ARRAY_SIZE(adis16480_channels),
@@ -1054,6 +1107,22 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
                .filter_freqs = adis16480_def_filter_freqs,
                .adis_data = ADIS16480_DATA(16488, &adis16485_timeouts, 0, 0),
        },
+       [ADIS16489] = {
+               .channels = adis16489_channels,
+               .num_channels = ARRAY_SIZE(adis16489_channels),
+               .gyro_max_val = 22500 << 16,
+               .gyro_max_scale = IIO_DEGREE_TO_RAD(450),
+               .accel_max_val = IIO_M_S_2_TO_G(20000 << 16),
+               .accel_max_scale = 18,
+               .temp_scale = 5650, /* 5.65 milli degree Celsius */
+               .deltang_max_val = IIO_DEGREE_TO_RAD(720),
+               .deltvel_max_val = 200,
+               .int_clk = 2460000,
+               .max_dec_rate = 2048,
+               .has_sleep_cnt = true,
+               .filter_freqs = adis16480_def_filter_freqs,
+               .adis_data = ADIS16480_DATA(16489, &adis16480_timeouts, 0, 0),
+       },
        [ADIS16490] = {
                .channels = adis16485_channels,
                .num_channels = ARRAY_SIZE(adis16485_channels),
@@ -1741,7 +1810,10 @@ static const struct spi_device_id adis16480_ids[] = {
        { "adis16375", ADIS16375 },
        { "adis16480", ADIS16480 },
        { "adis16485", ADIS16485 },
+       { "adis16486", ADIS16486 },
+       { "adis16487", ADIS16487 },
        { "adis16488", ADIS16488 },
+       { "adis16489", ADIS16489 },
        { "adis16490", ADIS16490 },
        { "adis16495-1", ADIS16495_1 },
        { "adis16495-2", ADIS16495_2 },
@@ -1763,7 +1835,10 @@ static const struct of_device_id adis16480_of_match[] = {
        { .compatible = "adi,adis16375" },
        { .compatible = "adi,adis16480" },
        { .compatible = "adi,adis16485" },
+       { .compatible = "adi,adis16486" },
+       { .compatible = "adi,adis16487" },
        { .compatible = "adi,adis16488" },
+       { .compatible = "adi,adis16489" },
        { .compatible = "adi,adis16490" },
        { .compatible = "adi,adis16495-1" },
        { .compatible = "adi,adis16495-2" },