Commit 760ebc0d authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Jonathan Cameron

staging:iio:adis16400: Report correct temperature scale and offset

Temperature scale and offset differ between the different devices supported by
this driver. Right now the driver always reports the temperature scale and
offset of the adis16400 regardless of which chip variant is used. This patch
adds two new attributes to the chip_info struct, one for the temperature scale
and one for the temperature offset.
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent 1cf8c97f
...@@ -139,6 +139,8 @@ struct adis16400_chip_info { ...@@ -139,6 +139,8 @@ struct adis16400_chip_info {
const long flags; const long flags;
unsigned int gyro_scale_micro; unsigned int gyro_scale_micro;
unsigned int accel_scale_micro; unsigned int accel_scale_micro;
int temp_scale_nano;
int temp_offset;
unsigned long default_scan_mask; unsigned long default_scan_mask;
}; };
......
...@@ -570,8 +570,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev, ...@@ -570,8 +570,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
*val2 = 500; /* 0.5 mgauss */ *val2 = 500; /* 0.5 mgauss */
return IIO_VAL_INT_PLUS_MICRO; return IIO_VAL_INT_PLUS_MICRO;
case IIO_TEMP: case IIO_TEMP:
*val = 140; /* 0.14 C */ *val = st->variant->temp_scale_nano / 1000000;
*val2 = 0; *val2 = (st->variant->temp_scale_nano % 1000000);
return IIO_VAL_INT_PLUS_MICRO; return IIO_VAL_INT_PLUS_MICRO;
default: default:
return -EINVAL; return -EINVAL;
...@@ -588,7 +588,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev, ...@@ -588,7 +588,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
*val = val16; *val = val16;
return IIO_VAL_INT; return IIO_VAL_INT;
case IIO_CHAN_INFO_OFFSET: case IIO_CHAN_INFO_OFFSET:
*val = 2500 / 14; /* 25 C = 0x00 */ /* currently only temperature */
*val = st->variant->temp_offset;
return IIO_VAL_INT; return IIO_VAL_INT;
case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
...@@ -1061,6 +1062,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1061,6 +1062,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.num_channels = ARRAY_SIZE(adis16300_channels), .num_channels = ARRAY_SIZE(adis16300_channels),
.gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
.accel_scale_micro = 5884, .accel_scale_micro = 5884,
.temp_scale_nano = 140000000, /* 0.14 C */
.temp_offset = 25000000 / 140000, /* 25 C = 0x00 */
.default_scan_mask = (1 << ADIS16400_SCAN_SUPPLY) | .default_scan_mask = (1 << ADIS16400_SCAN_SUPPLY) |
(1 << ADIS16400_SCAN_GYRO_X) | (1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_GYRO_X) | (1 << ADIS16400_SCAN_ACC_X) |
(1 << ADIS16400_SCAN_ACC_Y) | (1 << ADIS16400_SCAN_ACC_Z) | (1 << ADIS16400_SCAN_ACC_Y) | (1 << ADIS16400_SCAN_ACC_Z) |
...@@ -1073,6 +1076,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1073,6 +1076,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.num_channels = ARRAY_SIZE(adis16334_channels), .num_channels = ARRAY_SIZE(adis16334_channels),
.gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
.accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
.temp_scale_nano = 67850000, /* 0.06785 C */
.temp_offset = 25000000 / 67850, /* 25 C = 0x00 */
.default_scan_mask = (1 << ADIS16400_SCAN_GYRO_X) | .default_scan_mask = (1 << ADIS16400_SCAN_GYRO_X) |
(1 << ADIS16400_SCAN_GYRO_Y) | (1 << ADIS16400_SCAN_GYRO_Z) | (1 << ADIS16400_SCAN_GYRO_Y) | (1 << ADIS16400_SCAN_GYRO_Z) |
(1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_ACC_Y) | (1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_ACC_Y) |
...@@ -1083,6 +1088,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1083,6 +1088,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.num_channels = ARRAY_SIZE(adis16350_channels), .num_channels = ARRAY_SIZE(adis16350_channels),
.gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */
.accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */ .accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */
.temp_scale_nano = 145300000, /* 0.1453 C */
.temp_offset = 25000000 / 145300, /* 25 C = 0x00 */
.default_scan_mask = 0x7FF, .default_scan_mask = 0x7FF,
.flags = ADIS16400_NO_BURST, .flags = ADIS16400_NO_BURST,
}, },
...@@ -1093,6 +1100,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1093,6 +1100,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.product_id = 0x3FE8, .product_id = 0x3FE8,
.gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
.accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
.temp_scale_nano = 136000000, /* 0.136 C */
.temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
.default_scan_mask = 0x7FF, .default_scan_mask = 0x7FF,
}, },
[ADIS16362] = { [ADIS16362] = {
...@@ -1102,6 +1111,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1102,6 +1111,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.product_id = 0x3FEA, .product_id = 0x3FEA,
.gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
.accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */ .accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */
.temp_scale_nano = 136000000, /* 0.136 C */
.temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
.default_scan_mask = 0x7FF, .default_scan_mask = 0x7FF,
}, },
[ADIS16364] = { [ADIS16364] = {
...@@ -1111,6 +1122,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1111,6 +1122,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.product_id = 0x3FEC, .product_id = 0x3FEC,
.gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
.accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
.temp_scale_nano = 136000000, /* 0.136 C */
.temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
.default_scan_mask = 0x7FF, .default_scan_mask = 0x7FF,
}, },
[ADIS16365] = { [ADIS16365] = {
...@@ -1120,6 +1133,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1120,6 +1133,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.product_id = 0x3FED, .product_id = 0x3FED,
.gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
.accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
.temp_scale_nano = 136000000, /* 0.136 C */
.temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
.default_scan_mask = 0x7FF, .default_scan_mask = 0x7FF,
}, },
[ADIS16400] = { [ADIS16400] = {
...@@ -1130,6 +1145,8 @@ static struct adis16400_chip_info adis16400_chips[] = { ...@@ -1130,6 +1145,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
.gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
.accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
.default_scan_mask = 0xFFF, .default_scan_mask = 0xFFF,
.temp_scale_nano = 140000000, /* 0.14 C */
.temp_offset = 25000000 / 140000, /* 25 C = 0x00 */
} }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment