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:34 -0400
commit760ebc0d2af519dde91e39d22927d2be1bc57190 (patch)
tree1986bf56aa01a014127dded6b22666b1c8aceb56
parent1cf8c97f94a07e6d6461ae81b62abc2134b52c24 (diff)
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: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r--drivers/staging/iio/imu/adis16400.h2
-rw-r--r--drivers/staging/iio/imu/adis16400_core.c23
2 files changed, 22 insertions, 3 deletions
diff --git a/drivers/staging/iio/imu/adis16400.h b/drivers/staging/iio/imu/adis16400.h
index d59d7ac856a9..77c601da1846 100644
--- a/drivers/staging/iio/imu/adis16400.h
+++ b/drivers/staging/iio/imu/adis16400.h
@@ -139,6 +139,8 @@ struct adis16400_chip_info {
139 const long flags; 139 const long flags;
140 unsigned int gyro_scale_micro; 140 unsigned int gyro_scale_micro;
141 unsigned int accel_scale_micro; 141 unsigned int accel_scale_micro;
142 int temp_scale_nano;
143 int temp_offset;
142 unsigned long default_scan_mask; 144 unsigned long default_scan_mask;
143}; 145};
144 146
diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c
index dccea95496f5..eaed87ff1c86 100644
--- a/drivers/staging/iio/imu/adis16400_core.c
+++ b/drivers/staging/iio/imu/adis16400_core.c
@@ -570,8 +570,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
570 *val2 = 500; /* 0.5 mgauss */ 570 *val2 = 500; /* 0.5 mgauss */
571 return IIO_VAL_INT_PLUS_MICRO; 571 return IIO_VAL_INT_PLUS_MICRO;
572 case IIO_TEMP: 572 case IIO_TEMP:
573 *val = 140; /* 0.14 C */ 573 *val = st->variant->temp_scale_nano / 1000000;
574 *val2 = 0; 574 *val2 = (st->variant->temp_scale_nano % 1000000);
575 return IIO_VAL_INT_PLUS_MICRO; 575 return IIO_VAL_INT_PLUS_MICRO;
576 default: 576 default:
577 return -EINVAL; 577 return -EINVAL;
@@ -588,7 +588,8 @@ static int adis16400_read_raw(struct iio_dev *indio_dev,
588 *val = val16; 588 *val = val16;
589 return IIO_VAL_INT; 589 return IIO_VAL_INT;
590 case IIO_CHAN_INFO_OFFSET: 590 case IIO_CHAN_INFO_OFFSET:
591 *val = 2500 / 14; /* 25 C = 0x00 */ 591 /* currently only temperature */
592 *val = st->variant->temp_offset;
592 return IIO_VAL_INT; 593 return IIO_VAL_INT;
593 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: 594 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
594 mutex_lock(&indio_dev->mlock); 595 mutex_lock(&indio_dev->mlock);
@@ -1061,6 +1062,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1061 .num_channels = ARRAY_SIZE(adis16300_channels), 1062 .num_channels = ARRAY_SIZE(adis16300_channels),
1062 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ 1063 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1063 .accel_scale_micro = 5884, 1064 .accel_scale_micro = 5884,
1065 .temp_scale_nano = 140000000, /* 0.14 C */
1066 .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */
1064 .default_scan_mask = (1 << ADIS16400_SCAN_SUPPLY) | 1067 .default_scan_mask = (1 << ADIS16400_SCAN_SUPPLY) |
1065 (1 << ADIS16400_SCAN_GYRO_X) | (1 << ADIS16400_SCAN_ACC_X) | 1068 (1 << ADIS16400_SCAN_GYRO_X) | (1 << ADIS16400_SCAN_ACC_X) |
1066 (1 << ADIS16400_SCAN_ACC_Y) | (1 << ADIS16400_SCAN_ACC_Z) | 1069 (1 << ADIS16400_SCAN_ACC_Y) | (1 << ADIS16400_SCAN_ACC_Z) |
@@ -1073,6 +1076,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1073 .num_channels = ARRAY_SIZE(adis16334_channels), 1076 .num_channels = ARRAY_SIZE(adis16334_channels),
1074 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ 1077 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1075 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ 1078 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
1079 .temp_scale_nano = 67850000, /* 0.06785 C */
1080 .temp_offset = 25000000 / 67850, /* 25 C = 0x00 */
1076 .default_scan_mask = (1 << ADIS16400_SCAN_GYRO_X) | 1081 .default_scan_mask = (1 << ADIS16400_SCAN_GYRO_X) |
1077 (1 << ADIS16400_SCAN_GYRO_Y) | (1 << ADIS16400_SCAN_GYRO_Z) | 1082 (1 << ADIS16400_SCAN_GYRO_Y) | (1 << ADIS16400_SCAN_GYRO_Z) |
1078 (1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_ACC_Y) | 1083 (1 << ADIS16400_SCAN_ACC_X) | (1 << ADIS16400_SCAN_ACC_Y) |
@@ -1083,6 +1088,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1083 .num_channels = ARRAY_SIZE(adis16350_channels), 1088 .num_channels = ARRAY_SIZE(adis16350_channels),
1084 .gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */ 1089 .gyro_scale_micro = IIO_DEGREE_TO_RAD(73260), /* 0.07326 deg/s */
1085 .accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */ 1090 .accel_scale_micro = IIO_G_TO_M_S_2(2522), /* 0.002522 g */
1091 .temp_scale_nano = 145300000, /* 0.1453 C */
1092 .temp_offset = 25000000 / 145300, /* 25 C = 0x00 */
1086 .default_scan_mask = 0x7FF, 1093 .default_scan_mask = 0x7FF,
1087 .flags = ADIS16400_NO_BURST, 1094 .flags = ADIS16400_NO_BURST,
1088 }, 1095 },
@@ -1093,6 +1100,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1093 .product_id = 0x3FE8, 1100 .product_id = 0x3FE8,
1094 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ 1101 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1095 .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ 1102 .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
1103 .temp_scale_nano = 136000000, /* 0.136 C */
1104 .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
1096 .default_scan_mask = 0x7FF, 1105 .default_scan_mask = 0x7FF,
1097 }, 1106 },
1098 [ADIS16362] = { 1107 [ADIS16362] = {
@@ -1102,6 +1111,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1102 .product_id = 0x3FEA, 1111 .product_id = 0x3FEA,
1103 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ 1112 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1104 .accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */ 1113 .accel_scale_micro = IIO_G_TO_M_S_2(333), /* 0.333 mg */
1114 .temp_scale_nano = 136000000, /* 0.136 C */
1115 .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
1105 .default_scan_mask = 0x7FF, 1116 .default_scan_mask = 0x7FF,
1106 }, 1117 },
1107 [ADIS16364] = { 1118 [ADIS16364] = {
@@ -1111,6 +1122,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1111 .product_id = 0x3FEC, 1122 .product_id = 0x3FEC,
1112 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ 1123 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1113 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ 1124 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
1125 .temp_scale_nano = 136000000, /* 0.136 C */
1126 .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
1114 .default_scan_mask = 0x7FF, 1127 .default_scan_mask = 0x7FF,
1115 }, 1128 },
1116 [ADIS16365] = { 1129 [ADIS16365] = {
@@ -1120,6 +1133,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1120 .product_id = 0x3FED, 1133 .product_id = 0x3FED,
1121 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ 1134 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1122 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */ 1135 .accel_scale_micro = IIO_G_TO_M_S_2(1000), /* 1 mg */
1136 .temp_scale_nano = 136000000, /* 0.136 C */
1137 .temp_offset = 25000000 / 136000, /* 25 C = 0x00 */
1123 .default_scan_mask = 0x7FF, 1138 .default_scan_mask = 0x7FF,
1124 }, 1139 },
1125 [ADIS16400] = { 1140 [ADIS16400] = {
@@ -1130,6 +1145,8 @@ static struct adis16400_chip_info adis16400_chips[] = {
1130 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */ 1145 .gyro_scale_micro = IIO_DEGREE_TO_RAD(50000), /* 0.05 deg/s */
1131 .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */ 1146 .accel_scale_micro = IIO_G_TO_M_S_2(3333), /* 3.333 mg */
1132 .default_scan_mask = 0xFFF, 1147 .default_scan_mask = 0xFFF,
1148 .temp_scale_nano = 140000000, /* 0.14 C */
1149 .temp_offset = 25000000 / 140000, /* 25 C = 0x00 */
1133 } 1150 }
1134}; 1151};
1135 1152