Commit 3ba2e493 authored by Michael Hennerich's avatar Michael Hennerich Committed by Greg Kroah-Hartman

staging: iio: adc: ad799x drop in_precision in favor of new in_type

-drop in_precision in favor of new in_type -
This also fixes the bug from the scan elements move (as a side effect)
-add sign and storagebits to struct ad799x_chip_info
-properly mask the results based on ad799x_chip_info:bits

staging: iio: adc: ad799x misc fixed per iio list review

remove new line
remove storagebits from struct ad799x_chip_info
use defined storagebits value for in_type
Signed-off-by: default avatarMichael Hennerich <michael.hennerich@analog.com>
Acked-by: default avatarJonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent a7861ff0
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#define _AD799X_H_ #define _AD799X_H_
#define AD799X_CHANNEL_SHIFT 4 #define AD799X_CHANNEL_SHIFT 4
#define AD799X_STORAGEBITS 16
/* /*
* AD7991, AD7995 and AD7999 defines * AD7991, AD7995 and AD7999 defines
*/ */
...@@ -97,6 +97,8 @@ struct ad799x_state; ...@@ -97,6 +97,8 @@ struct ad799x_state;
struct ad799x_chip_info { struct ad799x_chip_info {
u8 num_inputs; u8 num_inputs;
u8 bits; u8 bits;
u8 storagebits;
char sign;
u16 int_vref_mv; u16 int_vref_mv;
bool monitor_mode; bool monitor_mode;
u16 default_config; u16 default_config;
......
...@@ -123,17 +123,18 @@ static AD799X_SCAN_EL(5); ...@@ -123,17 +123,18 @@ static AD799X_SCAN_EL(5);
static AD799X_SCAN_EL(6); static AD799X_SCAN_EL(6);
static AD799X_SCAN_EL(7); static AD799X_SCAN_EL(7);
static ssize_t ad799x_show_precision(struct device *dev, static ssize_t ad799x_show_type(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
char *buf) char *buf)
{ {
struct iio_dev *dev_info = dev_get_drvdata(dev); struct iio_ring_buffer *ring = dev_get_drvdata(dev);
struct ad799x_state *st = iio_dev_get_devdata(dev_info); struct iio_dev *indio_dev = ring->indio_dev;
return sprintf(buf, "%d\n", st->chip_info->bits); struct ad799x_state *st = indio_dev->dev_data;
}
static IIO_DEVICE_ATTR(in_precision, S_IRUGO, ad799x_show_precision, return sprintf(buf, "%c%d/%d\n", st->chip_info->sign,
NULL, 0); st->chip_info->bits, AD799X_STORAGEBITS);
}
static IIO_DEVICE_ATTR(in_type, S_IRUGO, ad799x_show_type, NULL, 0);
static int ad7991_5_9_set_scan_mode(struct ad799x_state *st, unsigned mask) static int ad7991_5_9_set_scan_mode(struct ad799x_state *st, unsigned mask)
{ {
...@@ -211,11 +212,11 @@ static ssize_t ad799x_read_single_channel(struct device *dev, ...@@ -211,11 +212,11 @@ static ssize_t ad799x_read_single_channel(struct device *dev,
if (ret < 0) if (ret < 0)
goto error_ret; goto error_ret;
data = rxbuf[0] & 0xFFF; data = rxbuf[0];
} }
/* Pretty print the result */ /* Pretty print the result */
len = sprintf(buf, "%u\n", data); len = sprintf(buf, "%u\n", data & ((1 << (st->chip_info->bits)) - 1));
error_ret: error_ret:
mutex_unlock(&dev_info->mlock); mutex_unlock(&dev_info->mlock);
...@@ -473,7 +474,7 @@ static struct attribute *ad7991_5_9_3_4_scan_el_attrs[] = { ...@@ -473,7 +474,7 @@ static struct attribute *ad7991_5_9_3_4_scan_el_attrs[] = {
&iio_const_attr_in2_index.dev_attr.attr, &iio_const_attr_in2_index.dev_attr.attr,
&iio_scan_el_in3.dev_attr.attr, &iio_scan_el_in3.dev_attr.attr,
&iio_const_attr_in3_index.dev_attr.attr, &iio_const_attr_in3_index.dev_attr.attr,
&iio_dev_attr_in_precision.dev_attr.attr, &iio_dev_attr_in_type.dev_attr.attr,
NULL, NULL,
}; };
...@@ -499,7 +500,7 @@ static struct attribute *ad7992_scan_el_attrs[] = { ...@@ -499,7 +500,7 @@ static struct attribute *ad7992_scan_el_attrs[] = {
&iio_const_attr_in0_index.dev_attr.attr, &iio_const_attr_in0_index.dev_attr.attr,
&iio_scan_el_in1.dev_attr.attr, &iio_scan_el_in1.dev_attr.attr,
&iio_const_attr_in1_index.dev_attr.attr, &iio_const_attr_in1_index.dev_attr.attr,
&iio_dev_attr_in_precision.dev_attr.attr, &iio_dev_attr_in_type.dev_attr.attr,
NULL, NULL,
}; };
...@@ -543,7 +544,7 @@ static struct attribute *ad7997_8_scan_el_attrs[] = { ...@@ -543,7 +544,7 @@ static struct attribute *ad7997_8_scan_el_attrs[] = {
&iio_const_attr_in6_index.dev_attr.attr, &iio_const_attr_in6_index.dev_attr.attr,
&iio_scan_el_in7.dev_attr.attr, &iio_scan_el_in7.dev_attr.attr,
&iio_const_attr_in7_index.dev_attr.attr, &iio_const_attr_in7_index.dev_attr.attr,
&iio_dev_attr_in_precision.dev_attr.attr, &iio_dev_attr_in_type.dev_attr.attr,
NULL, NULL,
}; };
...@@ -671,6 +672,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -671,6 +672,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7991] = { [ad7991] = {
.num_inputs = 4, .num_inputs = 4,
.bits = 12, .bits = 12,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 4096, .int_vref_mv = 4096,
.dev_attrs = &ad7991_5_9_3_4_dev_attr_group, .dev_attrs = &ad7991_5_9_3_4_dev_attr_group,
.scan_attrs = &ad7991_5_9_3_4_scan_el_group, .scan_attrs = &ad7991_5_9_3_4_scan_el_group,
...@@ -679,6 +681,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -679,6 +681,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7995] = { [ad7995] = {
.num_inputs = 4, .num_inputs = 4,
.bits = 10, .bits = 10,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 1024, .int_vref_mv = 1024,
.dev_attrs = &ad7991_5_9_3_4_dev_attr_group, .dev_attrs = &ad7991_5_9_3_4_dev_attr_group,
.scan_attrs = &ad7991_5_9_3_4_scan_el_group, .scan_attrs = &ad7991_5_9_3_4_scan_el_group,
...@@ -687,6 +690,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -687,6 +690,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7999] = { [ad7999] = {
.num_inputs = 4, .num_inputs = 4,
.bits = 10, .bits = 10,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 1024, .int_vref_mv = 1024,
.dev_attrs = &ad7991_5_9_3_4_dev_attr_group, .dev_attrs = &ad7991_5_9_3_4_dev_attr_group,
.scan_attrs = &ad7991_5_9_3_4_scan_el_group, .scan_attrs = &ad7991_5_9_3_4_scan_el_group,
...@@ -695,6 +699,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -695,6 +699,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7992] = { [ad7992] = {
.num_inputs = 2, .num_inputs = 2,
.bits = 12, .bits = 12,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 4096, .int_vref_mv = 4096,
.monitor_mode = true, .monitor_mode = true,
.default_config = AD7998_ALERT_EN, .default_config = AD7998_ALERT_EN,
...@@ -706,6 +711,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -706,6 +711,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7993] = { [ad7993] = {
.num_inputs = 4, .num_inputs = 4,
.bits = 10, .bits = 10,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 1024, .int_vref_mv = 1024,
.monitor_mode = true, .monitor_mode = true,
.default_config = AD7998_ALERT_EN, .default_config = AD7998_ALERT_EN,
...@@ -717,6 +723,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -717,6 +723,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7994] = { [ad7994] = {
.num_inputs = 4, .num_inputs = 4,
.bits = 12, .bits = 12,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 4096, .int_vref_mv = 4096,
.monitor_mode = true, .monitor_mode = true,
.default_config = AD7998_ALERT_EN, .default_config = AD7998_ALERT_EN,
...@@ -728,6 +735,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -728,6 +735,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7997] = { [ad7997] = {
.num_inputs = 8, .num_inputs = 8,
.bits = 10, .bits = 10,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 1024, .int_vref_mv = 1024,
.monitor_mode = true, .monitor_mode = true,
.default_config = AD7998_ALERT_EN, .default_config = AD7998_ALERT_EN,
...@@ -739,6 +747,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = { ...@@ -739,6 +747,7 @@ static const struct ad799x_chip_info ad799x_chip_info_tbl[] = {
[ad7998] = { [ad7998] = {
.num_inputs = 8, .num_inputs = 8,
.bits = 12, .bits = 12,
.sign = IIO_SCAN_EL_TYPE_UNSIGNED,
.int_vref_mv = 4096, .int_vref_mv = 4096,
.monitor_mode = true, .monitor_mode = true,
.default_config = AD7998_ALERT_EN, .default_config = AD7998_ALERT_EN,
......
...@@ -53,7 +53,7 @@ int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask) ...@@ -53,7 +53,7 @@ int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask)
mask >>= 1; mask >>= 1;
} }
ret = be16_to_cpu(ring_data[count]) & 0xFFF; ret = be16_to_cpu(ring_data[count]);
error_free_ring_data: error_free_ring_data:
kfree(ring_data); kfree(ring_data);
......
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