|
@@ -563,8 +563,9 @@ static ssize_t ad7793_show_scale_available(struct device *dev,
|
|
return len;
|
|
return len;
|
|
}
|
|
}
|
|
|
|
|
|
-static IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available, in-in_scale_available,
|
|
|
|
- S_IRUGO, ad7793_show_scale_available, NULL, 0);
|
|
|
|
|
|
+static IIO_DEVICE_ATTR_NAMED(in_m_in_scale_available,
|
|
|
|
+ in_voltage-voltage_scale_available, S_IRUGO,
|
|
|
|
+ ad7793_show_scale_available, NULL, 0);
|
|
|
|
|
|
static struct attribute *ad7793_attributes[] = {
|
|
static struct attribute *ad7793_attributes[] = {
|
|
&iio_dev_attr_sampling_frequency.dev_attr.attr,
|
|
&iio_dev_attr_sampling_frequency.dev_attr.attr,
|
|
@@ -604,9 +605,6 @@ static int ad7793_read_raw(struct iio_dev *indio_dev,
|
|
*val = (smpl >> chan->scan_type.shift) &
|
|
*val = (smpl >> chan->scan_type.shift) &
|
|
((1 << (chan->scan_type.realbits)) - 1);
|
|
((1 << (chan->scan_type.realbits)) - 1);
|
|
|
|
|
|
- if (!unipolar)
|
|
|
|
- *val -= (1 << (chan->scan_type.realbits - 1));
|
|
|
|
-
|
|
|
|
return IIO_VAL_INT;
|
|
return IIO_VAL_INT;
|
|
|
|
|
|
case IIO_CHAN_INFO_SCALE:
|
|
case IIO_CHAN_INFO_SCALE:
|
|
@@ -620,25 +618,38 @@ static int ad7793_read_raw(struct iio_dev *indio_dev,
|
|
return IIO_VAL_INT_PLUS_NANO;
|
|
return IIO_VAL_INT_PLUS_NANO;
|
|
} else {
|
|
} else {
|
|
/* 1170mV / 2^23 * 6 */
|
|
/* 1170mV / 2^23 * 6 */
|
|
- scale_uv = (1170ULL * 100000000ULL * 6ULL)
|
|
|
|
- >> (chan->scan_type.realbits -
|
|
|
|
- (unipolar ? 0 : 1));
|
|
|
|
|
|
+ scale_uv = (1170ULL * 100000000ULL * 6ULL);
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case IIO_TEMP:
|
|
case IIO_TEMP:
|
|
- /* Always uses unity gain and internal ref */
|
|
|
|
- scale_uv = (2500ULL * 100000000ULL)
|
|
|
|
- >> (chan->scan_type.realbits -
|
|
|
|
- (unipolar ? 0 : 1));
|
|
|
|
|
|
+ /* 1170mV / 0.81 mV/C / 2^23 */
|
|
|
|
+ scale_uv = 1444444444444ULL;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- *val2 = do_div(scale_uv, 100000000) * 10;
|
|
|
|
- *val = scale_uv;
|
|
|
|
-
|
|
|
|
|
|
+ scale_uv >>= (chan->scan_type.realbits - (unipolar ? 0 : 1));
|
|
|
|
+ *val = 0;
|
|
|
|
+ *val2 = scale_uv;
|
|
return IIO_VAL_INT_PLUS_NANO;
|
|
return IIO_VAL_INT_PLUS_NANO;
|
|
|
|
+ case IIO_CHAN_INFO_OFFSET:
|
|
|
|
+ if (!unipolar)
|
|
|
|
+ *val = -(1 << (chan->scan_type.realbits - 1));
|
|
|
|
+ else
|
|
|
|
+ *val = 0;
|
|
|
|
+
|
|
|
|
+ /* Kelvin to Celsius */
|
|
|
|
+ if (chan->type == IIO_TEMP) {
|
|
|
|
+ unsigned long long offset;
|
|
|
|
+ unsigned int shift;
|
|
|
|
+
|
|
|
|
+ shift = chan->scan_type.realbits - (unipolar ? 0 : 1);
|
|
|
|
+ offset = 273ULL << shift;
|
|
|
|
+ do_div(offset, 1444);
|
|
|
|
+ *val -= offset;
|
|
|
|
+ }
|
|
|
|
+ return IIO_VAL_INT;
|
|
}
|
|
}
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
@@ -676,7 +687,7 @@ static int ad7793_write_raw(struct iio_dev *indio_dev,
|
|
}
|
|
}
|
|
ret = 0;
|
|
ret = 0;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
}
|
|
}
|
|
@@ -720,9 +731,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 0,
|
|
.channel2 = 0,
|
|
.address = AD7793_CH_AIN1P_AIN1M,
|
|
.address = AD7793_CH_AIN1P_AIN1M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 0,
|
|
.scan_index = 0,
|
|
- .scan_type = IIO_ST('s', 24, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 24, 32, 0)
|
|
},
|
|
},
|
|
.channel[1] = {
|
|
.channel[1] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -732,9 +744,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 1,
|
|
.channel2 = 1,
|
|
.address = AD7793_CH_AIN2P_AIN2M,
|
|
.address = AD7793_CH_AIN2P_AIN2M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 1,
|
|
.scan_index = 1,
|
|
- .scan_type = IIO_ST('s', 24, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 24, 32, 0)
|
|
},
|
|
},
|
|
.channel[2] = {
|
|
.channel[2] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -744,9 +757,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 2,
|
|
.channel2 = 2,
|
|
.address = AD7793_CH_AIN3P_AIN3M,
|
|
.address = AD7793_CH_AIN3P_AIN3M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 2,
|
|
.scan_index = 2,
|
|
- .scan_type = IIO_ST('s', 24, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 24, 32, 0)
|
|
},
|
|
},
|
|
.channel[3] = {
|
|
.channel[3] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -757,9 +771,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 2,
|
|
.channel2 = 2,
|
|
.address = AD7793_CH_AIN1M_AIN1M,
|
|
.address = AD7793_CH_AIN1M_AIN1M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 3,
|
|
.scan_index = 3,
|
|
- .scan_type = IIO_ST('s', 24, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 24, 32, 0)
|
|
},
|
|
},
|
|
.channel[4] = {
|
|
.channel[4] = {
|
|
.type = IIO_TEMP,
|
|
.type = IIO_TEMP,
|
|
@@ -769,7 +784,7 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
|
|
IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
|
|
.scan_index = 4,
|
|
.scan_index = 4,
|
|
- .scan_type = IIO_ST('s', 24, 32, 0),
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 24, 32, 0),
|
|
},
|
|
},
|
|
.channel[5] = {
|
|
.channel[5] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -778,9 +793,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel = 4,
|
|
.channel = 4,
|
|
.address = AD7793_CH_AVDD_MONITOR,
|
|
.address = AD7793_CH_AVDD_MONITOR,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 5,
|
|
.scan_index = 5,
|
|
- .scan_type = IIO_ST('s', 24, 32, 0),
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 24, 32, 0),
|
|
},
|
|
},
|
|
.channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6),
|
|
.channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6),
|
|
},
|
|
},
|
|
@@ -793,9 +809,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 0,
|
|
.channel2 = 0,
|
|
.address = AD7793_CH_AIN1P_AIN1M,
|
|
.address = AD7793_CH_AIN1P_AIN1M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 0,
|
|
.scan_index = 0,
|
|
- .scan_type = IIO_ST('s', 16, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 16, 32, 0)
|
|
},
|
|
},
|
|
.channel[1] = {
|
|
.channel[1] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -805,9 +822,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 1,
|
|
.channel2 = 1,
|
|
.address = AD7793_CH_AIN2P_AIN2M,
|
|
.address = AD7793_CH_AIN2P_AIN2M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 1,
|
|
.scan_index = 1,
|
|
- .scan_type = IIO_ST('s', 16, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 16, 32, 0)
|
|
},
|
|
},
|
|
.channel[2] = {
|
|
.channel[2] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -817,9 +835,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 2,
|
|
.channel2 = 2,
|
|
.address = AD7793_CH_AIN3P_AIN3M,
|
|
.address = AD7793_CH_AIN3P_AIN3M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 2,
|
|
.scan_index = 2,
|
|
- .scan_type = IIO_ST('s', 16, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 16, 32, 0)
|
|
},
|
|
},
|
|
.channel[3] = {
|
|
.channel[3] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -830,9 +849,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel2 = 2,
|
|
.channel2 = 2,
|
|
.address = AD7793_CH_AIN1M_AIN1M,
|
|
.address = AD7793_CH_AIN1M_AIN1M,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SHARED_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SHARED_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 3,
|
|
.scan_index = 3,
|
|
- .scan_type = IIO_ST('s', 16, 32, 0)
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 16, 32, 0)
|
|
},
|
|
},
|
|
.channel[4] = {
|
|
.channel[4] = {
|
|
.type = IIO_TEMP,
|
|
.type = IIO_TEMP,
|
|
@@ -842,7 +862,7 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
|
|
IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
|
|
.scan_index = 4,
|
|
.scan_index = 4,
|
|
- .scan_type = IIO_ST('s', 16, 32, 0),
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 16, 32, 0),
|
|
},
|
|
},
|
|
.channel[5] = {
|
|
.channel[5] = {
|
|
.type = IIO_VOLTAGE,
|
|
.type = IIO_VOLTAGE,
|
|
@@ -851,9 +871,10 @@ static const struct ad7793_chip_info ad7793_chip_info_tbl[] = {
|
|
.channel = 4,
|
|
.channel = 4,
|
|
.address = AD7793_CH_AVDD_MONITOR,
|
|
.address = AD7793_CH_AVDD_MONITOR,
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT |
|
|
- IIO_CHAN_INFO_SCALE_SEPARATE_BIT,
|
|
|
|
|
|
+ IIO_CHAN_INFO_SCALE_SEPARATE_BIT |
|
|
|
|
+ IIO_CHAN_INFO_OFFSET_SHARED_BIT,
|
|
.scan_index = 5,
|
|
.scan_index = 5,
|
|
- .scan_type = IIO_ST('s', 16, 32, 0),
|
|
|
|
|
|
+ .scan_type = IIO_ST('u', 16, 32, 0),
|
|
},
|
|
},
|
|
.channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6),
|
|
.channel[6] = IIO_CHAN_SOFT_TIMESTAMP(6),
|
|
},
|
|
},
|
|
@@ -901,7 +922,7 @@ static int __devinit ad7793_probe(struct spi_device *spi)
|
|
else if (voltage_uv)
|
|
else if (voltage_uv)
|
|
st->int_vref_mv = voltage_uv / 1000;
|
|
st->int_vref_mv = voltage_uv / 1000;
|
|
else
|
|
else
|
|
- st->int_vref_mv = 2500; /* Build-in ref */
|
|
|
|
|
|
+ st->int_vref_mv = 1170; /* Build-in ref */
|
|
|
|
|
|
spi_set_drvdata(spi, indio_dev);
|
|
spi_set_drvdata(spi, indio_dev);
|
|
st->spi = spi;
|
|
st->spi = spi;
|