Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Michael Hennerich and committed by
Greg Kroah-Hartman
3ba2e493 a7861ff0

+25 -14
+3 -1
drivers/staging/iio/adc/ad799x.h
··· 13 13 #define _AD799X_H_ 14 14 15 15 #define AD799X_CHANNEL_SHIFT 4 16 - 16 + #define AD799X_STORAGEBITS 16 17 17 /* 18 18 * AD7991, AD7995 and AD7999 defines 19 19 */ ··· 97 97 struct ad799x_chip_info { 98 98 u8 num_inputs; 99 99 u8 bits; 100 + u8 storagebits; 101 + char sign; 100 102 u16 int_vref_mv; 101 103 bool monitor_mode; 102 104 u16 default_config;
+21 -12
drivers/staging/iio/adc/ad799x_core.c
··· 123 123 static AD799X_SCAN_EL(6); 124 124 static AD799X_SCAN_EL(7); 125 125 126 - static ssize_t ad799x_show_precision(struct device *dev, 126 + static ssize_t ad799x_show_type(struct device *dev, 127 127 struct device_attribute *attr, 128 128 char *buf) 129 129 { 130 - struct iio_dev *dev_info = dev_get_drvdata(dev); 131 - struct ad799x_state *st = iio_dev_get_devdata(dev_info); 132 - return sprintf(buf, "%d\n", st->chip_info->bits); 133 - } 130 + struct iio_ring_buffer *ring = dev_get_drvdata(dev); 131 + struct iio_dev *indio_dev = ring->indio_dev; 132 + struct ad799x_state *st = indio_dev->dev_data; 134 133 135 - static IIO_DEVICE_ATTR(in_precision, S_IRUGO, ad799x_show_precision, 136 - NULL, 0); 134 + return sprintf(buf, "%c%d/%d\n", st->chip_info->sign, 135 + st->chip_info->bits, AD799X_STORAGEBITS); 136 + } 137 + static IIO_DEVICE_ATTR(in_type, S_IRUGO, ad799x_show_type, NULL, 0); 137 138 138 139 static int ad7991_5_9_set_scan_mode(struct ad799x_state *st, unsigned mask) 139 140 { ··· 212 211 if (ret < 0) 213 212 goto error_ret; 214 213 215 - data = rxbuf[0] & 0xFFF; 214 + data = rxbuf[0]; 216 215 } 217 216 218 217 /* Pretty print the result */ 219 - len = sprintf(buf, "%u\n", data); 218 + len = sprintf(buf, "%u\n", data & ((1 << (st->chip_info->bits)) - 1)); 220 219 221 220 error_ret: 222 221 mutex_unlock(&dev_info->mlock); ··· 474 473 &iio_const_attr_in2_index.dev_attr.attr, 475 474 &iio_scan_el_in3.dev_attr.attr, 476 475 &iio_const_attr_in3_index.dev_attr.attr, 477 - &iio_dev_attr_in_precision.dev_attr.attr, 476 + &iio_dev_attr_in_type.dev_attr.attr, 478 477 NULL, 479 478 }; 480 479 ··· 500 499 &iio_const_attr_in0_index.dev_attr.attr, 501 500 &iio_scan_el_in1.dev_attr.attr, 502 501 &iio_const_attr_in1_index.dev_attr.attr, 503 - &iio_dev_attr_in_precision.dev_attr.attr, 502 + &iio_dev_attr_in_type.dev_attr.attr, 504 503 NULL, 505 504 }; 506 505 ··· 544 543 &iio_const_attr_in6_index.dev_attr.attr, 545 544 &iio_scan_el_in7.dev_attr.attr, 546 545 &iio_const_attr_in7_index.dev_attr.attr, 547 - &iio_dev_attr_in_precision.dev_attr.attr, 546 + &iio_dev_attr_in_type.dev_attr.attr, 548 547 NULL, 549 548 }; 550 549 ··· 672 671 [ad7991] = { 673 672 .num_inputs = 4, 674 673 .bits = 12, 674 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 675 675 .int_vref_mv = 4096, 676 676 .dev_attrs = &ad7991_5_9_3_4_dev_attr_group, 677 677 .scan_attrs = &ad7991_5_9_3_4_scan_el_group, ··· 681 679 [ad7995] = { 682 680 .num_inputs = 4, 683 681 .bits = 10, 682 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 684 683 .int_vref_mv = 1024, 685 684 .dev_attrs = &ad7991_5_9_3_4_dev_attr_group, 686 685 .scan_attrs = &ad7991_5_9_3_4_scan_el_group, ··· 690 687 [ad7999] = { 691 688 .num_inputs = 4, 692 689 .bits = 10, 690 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 693 691 .int_vref_mv = 1024, 694 692 .dev_attrs = &ad7991_5_9_3_4_dev_attr_group, 695 693 .scan_attrs = &ad7991_5_9_3_4_scan_el_group, ··· 699 695 [ad7992] = { 700 696 .num_inputs = 2, 701 697 .bits = 12, 698 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 702 699 .int_vref_mv = 4096, 703 700 .monitor_mode = true, 704 701 .default_config = AD7998_ALERT_EN, ··· 711 706 [ad7993] = { 712 707 .num_inputs = 4, 713 708 .bits = 10, 709 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 714 710 .int_vref_mv = 1024, 715 711 .monitor_mode = true, 716 712 .default_config = AD7998_ALERT_EN, ··· 723 717 [ad7994] = { 724 718 .num_inputs = 4, 725 719 .bits = 12, 720 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 726 721 .int_vref_mv = 4096, 727 722 .monitor_mode = true, 728 723 .default_config = AD7998_ALERT_EN, ··· 735 728 [ad7997] = { 736 729 .num_inputs = 8, 737 730 .bits = 10, 731 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 738 732 .int_vref_mv = 1024, 739 733 .monitor_mode = true, 740 734 .default_config = AD7998_ALERT_EN, ··· 747 739 [ad7998] = { 748 740 .num_inputs = 8, 749 741 .bits = 12, 742 + .sign = IIO_SCAN_EL_TYPE_UNSIGNED, 750 743 .int_vref_mv = 4096, 751 744 .monitor_mode = true, 752 745 .default_config = AD7998_ALERT_EN,
+1 -1
drivers/staging/iio/adc/ad799x_ring.c
··· 53 53 mask >>= 1; 54 54 } 55 55 56 - ret = be16_to_cpu(ring_data[count]) & 0xFFF; 56 + ret = be16_to_cpu(ring_data[count]); 57 57 58 58 error_free_ring_data: 59 59 kfree(ring_data);