Skip to content

Commit 76ada52

Browse files
larsclausenjic23
authored andcommitted
iio:adis16400: Add support for the adis16448
The adis16448 is more or less from the same family of devices as supported by this driver. It features three acceleration channels, three angular velocity channels, three magnetometer channels, one temperature channels and one barometric pressure channel. Signed-off-by: Lars-Peter Clausen <[email protected]> Signed-off-by: Jonathan Cameron <[email protected]>
1 parent 1db18bb commit 76ada52

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

drivers/iio/imu/adis16400.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@
4444
#define ADIS16300_ROLL_OUT 0x14 /* Y axis inclinometer output measurement */
4545
#define ADIS16300_AUX_ADC 0x16 /* Auxiliary ADC measurement */
4646

47+
#define ADIS16448_BARO_OUT 0x16 /* Barometric pressure output */
48+
#define ADIS16448_TEMP_OUT 0x18 /* Temperature output */
49+
4750
/* Calibration parameters */
4851
#define ADIS16400_XGYRO_OFF 0x1A /* X-axis gyroscope bias offset factor */
4952
#define ADIS16400_YGYRO_OFF 0x1C /* Y-axis gyroscope bias offset factor */
@@ -179,6 +182,7 @@ enum {
179182
ADIS16400_SCAN_MAGN_X,
180183
ADIS16400_SCAN_MAGN_Y,
181184
ADIS16400_SCAN_MAGN_Z,
185+
ADIS16400_SCAN_BARO,
182186
ADIS16350_SCAN_TEMP_X,
183187
ADIS16350_SCAN_TEMP_Y,
184188
ADIS16350_SCAN_TEMP_Z,

drivers/iio/imu/adis16400_core.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ enum adis16400_chip_variant {
139139
ADIS16362,
140140
ADIS16364,
141141
ADIS16400,
142+
ADIS16448,
142143
};
143144

144145
static int adis16334_get_freq(struct adis16400_state *st)
@@ -633,6 +634,28 @@ static const struct iio_chan_spec adis16400_channels[] = {
633634
IIO_CHAN_SOFT_TIMESTAMP(12)
634635
};
635636

637+
static const struct iio_chan_spec adis16448_channels[] = {
638+
ADIS16400_GYRO_CHAN(X, ADIS16400_XGYRO_OUT, 16),
639+
ADIS16400_GYRO_CHAN(Y, ADIS16400_YGYRO_OUT, 16),
640+
ADIS16400_GYRO_CHAN(Z, ADIS16400_ZGYRO_OUT, 16),
641+
ADIS16400_ACCEL_CHAN(X, ADIS16400_XACCL_OUT, 16),
642+
ADIS16400_ACCEL_CHAN(Y, ADIS16400_YACCL_OUT, 16),
643+
ADIS16400_ACCEL_CHAN(Z, ADIS16400_ZACCL_OUT, 16),
644+
ADIS16400_MAGN_CHAN(X, ADIS16400_XMAGN_OUT, 16),
645+
ADIS16400_MAGN_CHAN(Y, ADIS16400_YMAGN_OUT, 16),
646+
ADIS16400_MAGN_CHAN(Z, ADIS16400_ZMAGN_OUT, 16),
647+
{
648+
.type = IIO_PRESSURE,
649+
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
650+
IIO_CHAN_INFO_SCALE_SHARED_BIT,
651+
.address = ADIS16448_BARO_OUT,
652+
.scan_index = ADIS16400_SCAN_BARO,
653+
.scan_type = IIO_ST('s', 16, 16, 0),
654+
},
655+
ADIS16400_TEMP_CHAN(ADIS16448_TEMP_OUT, 12),
656+
IIO_CHAN_SOFT_TIMESTAMP(11)
657+
};
658+
636659
static const struct iio_chan_spec adis16350_channels[] = {
637660
ADIS16400_SUPPLY_CHAN(ADIS16400_SUPPLY_OUT, 12),
638661
ADIS16400_GYRO_CHAN(X, ADIS16400_XGYRO_OUT, 14),
@@ -765,6 +788,18 @@ static struct adis16400_chip_info adis16400_chips[] = {
765788
.temp_offset = 25000000 / 140000, /* 25 C = 0x00 */
766789
.set_freq = adis16400_set_freq,
767790
.get_freq = adis16400_get_freq,
791+
},
792+
[ADIS16448] = {
793+
.channels = adis16448_channels,
794+
.num_channels = ARRAY_SIZE(adis16448_channels),
795+
.flags = ADIS16400_HAS_PROD_ID |
796+
ADIS16400_HAS_SERIAL_NUMBER,
797+
.gyro_scale_micro = IIO_DEGREE_TO_RAD(10000), /* 0.01 deg/s */
798+
.accel_scale_micro = IIO_G_TO_M_S_2(833), /* 1/1200 g */
799+
.temp_scale_nano = 73860000, /* 0.07386 C */
800+
.temp_offset = 31000000 / 73860, /* 31 C = 0x00 */
801+
.set_freq = adis16334_set_freq,
802+
.get_freq = adis16334_get_freq,
768803
}
769804
};
770805

@@ -909,6 +944,7 @@ static const struct spi_device_id adis16400_id[] = {
909944
{"adis16365", ADIS16360},
910945
{"adis16400", ADIS16400},
911946
{"adis16405", ADIS16400},
947+
{"adis16448", ADIS16448},
912948
{}
913949
};
914950
MODULE_DEVICE_TABLE(spi, adis16400_id);

0 commit comments

Comments
 (0)