aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2012-10-15 05:35:00 -0400
committerJonathan Cameron <jic23@kernel.org>2012-10-19 11:23:33 -0400
commit1cf8c97f94a07e6d6461ae81b62abc2134b52c24 (patch)
treea9a37f7494c625f6061b047551f2f10514845800
parent7e72a54c08c3a3d296c11139774e13cc80424060 (diff)
staging:iio: Fix adis16400 channel offsets and scales
Most of the channel offsets and scales in the adis16400 are incorrect: * Voltage scale is off by a factor of 1000 * Temperature scale is off by a factor of 1000 * Temperature offset is completely wrong * Some of the acceleration scales are either completely wrong or have the wrong unit * Some of the angular velocity scale are either completely wrong or have the wrong unit This patch fixes these issues. For consistency it also converts scales which are correct to use the IIO_G_TO_M_S_2 and IIO_DEGREE_TO_RAD macro. This makes it much easier to compare it to the value given in the datasheet. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r--drivers/staging/iio/imu/adis16400_core.c53
1 files changed, 27 insertions, 26 deletions
diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c
index b302c9ba2712..dccea95496f5 100644
--- a/drivers/staging/iio/imu/adis16400_core.c
+++ b/drivers/staging/iio/imu/adis16400_core.c
@@ -553,10 +553,13 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
553 return IIO_VAL_INT_PLUS_MICRO; 553 return IIO_VAL_INT_PLUS_MICRO;
554 case IIO_VOLTAGE: 554 case IIO_VOLTAGE:
555 *val = 0; 555 *val = 0;
556 if (chan->channel == 0) 556 if (chan->channel == 0) {
557 *val2 = 2418; 557 *val = 2;
558 else 558 *val2 = 418000; /* 2.418 mV */
559 *val2 = 806; 559 } else {
560 *val = 0;
561 *val2 = 805800; /* 805.8 uV */
562 }
560 return IIO_VAL_INT_PLUS_MICRO; 563 return IIO_VAL_INT_PLUS_MICRO;
561 case IIO_ACCEL: 564 case IIO_ACCEL:
562 *val = 0; 565 *val = 0;
@@ -564,11 +567,11 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
564 return IIO_VAL_INT_PLUS_MICRO; 567 return IIO_VAL_INT_PLUS_MICRO;
565 case IIO_MAGN: 568 case IIO_MAGN:
566 *val = 0; 569 *val = 0;
567 *val2 = 500; 570 *val2 = 500; /* 0.5 mgauss */
568 return IIO_VAL_INT_PLUS_MICRO; 571 return IIO_VAL_INT_PLUS_MICRO;
569 case IIO_TEMP: 572 case IIO_TEMP:
570 *val = 0; 573 *val = 140; /* 0.14 C */
571 *val2 = 140000; 574 *val2 = 0;
572 return IIO_VAL_INT_PLUS_MICRO; 575 return IIO_VAL_INT_PLUS_MICRO;
573 default: 576 default:
574 return -EINVAL; 577 return -EINVAL;
@@ -585,10 +588,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
585 *val = val16; 588 *val = val16;
586 return IIO_VAL_INT; 589 return IIO_VAL_INT;
587 case IIO_CHAN_INFO_OFFSET: 590 case IIO_CHAN_INFO_OFFSET:
588 /* currently only temperature */ 591 *val = 2500 / 14; /* 25 C = 0x00 */
589 *val = 198; 592 return IIO_VAL_INT;
590 *val2 = 160000;
591 return IIO_VAL_INT_PLUS_MICRO;
592 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: 593 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
593 mutex_lock(&indio_dev->mlock); 594 mutex_lock(&indio_dev->mlock);
594 /* Need both the number of taps and the sampling frequency */ 595 /* Need both the number of taps and the sampling frequency */
@@ -1058,7 +1059,7 @@ static struct adis16400_chip_info adis16400_chips[] = {
1058 [ADIS16300] = { 1059 [ADIS16300] = {
1059 .channels = adis16300_channels, 1060 .channels = adis16300_channels,
1060 .num_channels = ARRAY_SIZE(adis16300_channels), 1061 .num_channels = ARRAY_SIZE(adis16300_channels),
1061 .gyro_scale_micro = 873, 1062 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1062 .accel_scale_micro = 5884, 1063 .accel_scale_micro = 5884,
1063 .default_scan_mask = (1 << ADIS16400_SCAN_SUPPLY) | 1064 .default_scan_mask = (1 << ADIS16400_SCAN_SUPPLY) |
1064 (1 << ADIS16400_SCAN_GYRO_X) | (1 << ADIS16400_SCAN_ACC_X) | 1065 (1 << ADIS16400_SCAN_GYRO_X) | (1 << ADIS16400_SCAN_ACC_X) |
@@ -1070,8 +1071,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1070 [ADIS16334] = { 1071 [ADIS16334] = {
1071 .channels = adis16334_channels, 1072 .channels = adis16334_channels,
1072 .num_channels = ARRAY_SIZE(adis16334_channels), 1073 .num_channels = ARRAY_SIZE(adis16334_channels),
1073 .gyro_scale_micro = 873, 1074 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1074 .accel_scale_micro = 981, 1075 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
1075 .default_scan_mask = (1 << ADIS16400_SCAN_GYRO_X) | 1076 .default_scan_mask = (1 << ADIS16400_SCAN_GYRO_X) |
1076 (1 << ADIS16400_SCAN_GYRO_Y) | (1 << ADIS16400_SCAN_GYRO_Z) | 1077 (1 << ADIS16400_SCAN_GYRO_Y) | (1 << ADIS16400_SCAN_GYRO_Z) |
1077 (1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_ACC_Y) | 1078 (1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_ACC_Y) |
@@ -1080,8 +1081,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1080 [ADIS16350] = { 1081 [ADIS16350] = {
1081 .channels = adis16350_channels, 1082 .channels = adis16350_channels,
1082 .num_channels = ARRAY_SIZE(adis16350_channels), 1083 .num_channels = ARRAY_SIZE(adis16350_channels),
1083 .gyro_scale_micro = 872664, 1084 .gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */
1084 .accel_scale_micro = 24732, 1085 .accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */
1085 .default_scan_mask = 0x7FF, 1086 .default_scan_mask = 0x7FF,
1086 .flags = ADIS16400_NO_BURST, 1087 .flags = ADIS16400_NO_BURST,
1087 }, 1088 },
@@ -1090,8 +1091,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1090 .num_channels = ARRAY_SIZE(adis16350_channels), 1091 .num_channels = ARRAY_SIZE(adis16350_channels),
1091 .flags = ADIS16400_HAS_PROD_ID, 1092 .flags = ADIS16400_HAS_PROD_ID,
1092 .product_id = 0x3FE8, 1093 .product_id = 0x3FE8,
1093 .gyro_scale_micro = 1279, 1094 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1094 .accel_scale_micro = 24732, 1095 .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
1095 .default_scan_mask = 0x7FF, 1096 .default_scan_mask = 0x7FF,
1096 }, 1097 },
1097 [ADIS16362] = { 1098 [ADIS16362] = {
@@ -1099,8 +1100,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1099 .num_channels = ARRAY_SIZE(adis16350_channels), 1100 .num_channels = ARRAY_SIZE(adis16350_channels),
1100 .flags = ADIS16400_HAS_PROD_ID, 1101 .flags = ADIS16400_HAS_PROD_ID,
1101 .product_id = 0x3FEA, 1102 .product_id = 0x3FEA,
1102 .gyro_scale_micro = 1279, 1103 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1103 .accel_scale_micro = 24732, 1104 .accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */
1104 .default_scan_mask = 0x7FF, 1105 .default_scan_mask = 0x7FF,
1105 }, 1106 },
1106 [ADIS16364] = { 1107 [ADIS16364] = {
@@ -1108,8 +1109,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1108 .num_channels = ARRAY_SIZE(adis16350_channels), 1109 .num_channels = ARRAY_SIZE(adis16350_channels),
1109 .flags = ADIS16400_HAS_PROD_ID, 1110 .flags = ADIS16400_HAS_PROD_ID,
1110 .product_id = 0x3FEC, 1111 .product_id = 0x3FEC,
1111 .gyro_scale_micro = 1279, 1112 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1112 .accel_scale_micro = 24732, 1113 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
1113 .default_scan_mask = 0x7FF, 1114 .default_scan_mask = 0x7FF,
1114 }, 1115 },
1115 [ADIS16365] = { 1116 [ADIS16365] = {
@@ -1117,8 +1118,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1117 .num_channels = ARRAY_SIZE(adis16350_channels), 1118 .num_channels = ARRAY_SIZE(adis16350_channels),
1118 .flags = ADIS16400_HAS_PROD_ID, 1119 .flags = ADIS16400_HAS_PROD_ID,
1119 .product_id = 0x3FED, 1120 .product_id = 0x3FED,
1120 .gyro_scale_micro = 1279, 1121 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1121 .accel_scale_micro = 24732, 1122 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
1122 .default_scan_mask = 0x7FF, 1123 .default_scan_mask = 0x7FF,
1123 }, 1124 },
1124 [ADIS16400] = { 1125 [ADIS16400] = {
@@ -1126,8 +1127,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1126 .num_channels = ARRAY_SIZE(adis16400_channels), 1127 .num_channels = ARRAY_SIZE(adis16400_channels),
1127 .flags = ADIS16400_HAS_PROD_ID, 1128 .flags = ADIS16400_HAS_PROD_ID,
1128 .product_id = 0x4015, 1129 .product_id = 0x4015,
1129 .gyro_scale_micro = 873, 1130 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1130 .accel_scale_micro = 32656, 1131 .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
1131 .default_scan_mask = 0xFFF, 1132 .default_scan_mask = 0xFFF,
1132 } 1133 }
1133}; 1134};