diff options
author | Jonathan Cameron <jic23@cam.ac.uk> | 2010-05-04 09:43:10 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-05-11 14:36:06 -0400 |
commit | 3bf877c1cc0d17ef471f21ae319fcb9c9211df61 (patch) | |
tree | 08d1007770debdf959a5fda1df81e7cbec929877 | |
parent | c3fa0fddd6fed10eda57de8912a634890ee27a31 (diff) |
staging:iio:max1363 add support for 8 bit equivalent devices, max1036-9, max11600-5
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/iio/adc/Kconfig | 12 | ||||
-rw-r--r-- | drivers/staging/iio/adc/max1363_core.c | 143 | ||||
-rw-r--r-- | drivers/staging/iio/adc/max1363_ring.c | 23 |
3 files changed, 161 insertions, 17 deletions
diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig index afc8318a96d..0835fbc86c2 100644 --- a/drivers/staging/iio/adc/Kconfig +++ b/drivers/staging/iio/adc/Kconfig | |||
@@ -10,11 +10,13 @@ config MAX1363 | |||
10 | select MAX1363_RING_BUFFER | 10 | select MAX1363_RING_BUFFER |
11 | help | 11 | help |
12 | Say yes here to build support for many MAXIM i2c analog to digital | 12 | Say yes here to build support for many MAXIM i2c analog to digital |
13 | convertors (ADC). (max1361, max1362, max1363, max1364, max1136, | 13 | convertors (ADC). (max1361, max1362, max1363, max1364, max1036, |
14 | max1136, max1137, max1138, max1139, max1236, max1237, max11238, | 14 | max1037, max1038, max1039, max1136, max1136, max1137, max1138, |
15 | max1239, max11606, max11607, max11608, max11609, max11610, | 15 | max1139, max1236, max1237, max11238, max1239, max11600, max11601, |
16 | max11611, max11612, max11613, max11614, max11615, max11616, | 16 | max11602, max11603, max11604, max11605, max11606, max11607, |
17 | max11617) Provides direct access via sysfs. | 17 | max11608, max11609, max11610, max11611, max11612, max11613, |
18 | max11614, max11615, max11616, max11617) Provides direct access | ||
19 | via sysfs. | ||
18 | 20 | ||
19 | config MAX1363_RING_BUFFER | 21 | config MAX1363_RING_BUFFER |
20 | bool "MAXIM max1363: use ring buffer" | 22 | bool "MAXIM max1363: use ring buffer" |
diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index c53bf6d8410..fa91cc14c64 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c | |||
@@ -226,13 +226,24 @@ static ssize_t max1363_read_single_channel(struct device *dev, | |||
226 | if (ret) | 226 | if (ret) |
227 | goto error_ret; | 227 | goto error_ret; |
228 | } | 228 | } |
229 | /* Get reading */ | 229 | if (st->chip_info->bits != 8) { |
230 | data = i2c_master_recv(client, rxbuf, 2); | 230 | /* Get reading */ |
231 | if (data < 0) { | 231 | data = i2c_master_recv(client, rxbuf, 2); |
232 | ret = data; | 232 | if (data < 0) { |
233 | goto error_ret; | 233 | ret = data; |
234 | goto error_ret; | ||
235 | } | ||
236 | |||
237 | data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8; | ||
238 | } else { | ||
239 | /* Get reading */ | ||
240 | data = i2c_master_recv(client, rxbuf, 1); | ||
241 | if (data < 0) { | ||
242 | ret = data; | ||
243 | goto error_ret; | ||
244 | } | ||
245 | data = rxbuf[0]; | ||
234 | } | 246 | } |
235 | data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8; | ||
236 | } | 247 | } |
237 | /* Pretty print the result */ | 248 | /* Pretty print the result */ |
238 | len = sprintf(buf, "%u\n", data); | 249 | len = sprintf(buf, "%u\n", data); |
@@ -508,6 +519,10 @@ enum { max1361, | |||
508 | max1362, | 519 | max1362, |
509 | max1363, | 520 | max1363, |
510 | max1364, | 521 | max1364, |
522 | max1036, | ||
523 | max1037, | ||
524 | max1038, | ||
525 | max1039, | ||
511 | max1136, | 526 | max1136, |
512 | max1137, | 527 | max1137, |
513 | max1138, | 528 | max1138, |
@@ -516,6 +531,12 @@ enum { max1361, | |||
516 | max1237, | 531 | max1237, |
517 | max1238, | 532 | max1238, |
518 | max1239, | 533 | max1239, |
534 | max11600, | ||
535 | max11601, | ||
536 | max11602, | ||
537 | max11603, | ||
538 | max11604, | ||
539 | max11605, | ||
519 | max11606, | 540 | max11606, |
520 | max11607, | 541 | max11607, |
521 | max11608, | 542 | max11608, |
@@ -577,6 +598,46 @@ static const struct max1363_chip_info max1363_chip_info_tbl[] = { | |||
577 | .dev_attrs = &max1363_dev_attr_group, | 598 | .dev_attrs = &max1363_dev_attr_group, |
578 | .scan_attrs = &max1363_scan_el_group, | 599 | .scan_attrs = &max1363_scan_el_group, |
579 | }, { | 600 | }, { |
601 | .name = "max1036", | ||
602 | .num_inputs = 4, | ||
603 | .bits = 8, | ||
604 | .int_vref_mv = 4096, | ||
605 | .mode_list = max1236_mode_list, | ||
606 | .num_modes = ARRAY_SIZE(max1236_mode_list), | ||
607 | .default_mode = s0to3, | ||
608 | .dev_attrs = &max1363_dev_attr_group, | ||
609 | .scan_attrs = &max1363_scan_el_group, | ||
610 | }, { | ||
611 | .name = "max1037", | ||
612 | .num_inputs = 4, | ||
613 | .bits = 8, | ||
614 | .int_vref_mv = 2048, | ||
615 | .mode_list = max1236_mode_list, | ||
616 | .num_modes = ARRAY_SIZE(max1236_mode_list), | ||
617 | .default_mode = s0to3, | ||
618 | .dev_attrs = &max1363_dev_attr_group, | ||
619 | .scan_attrs = &max1363_scan_el_group, | ||
620 | }, { | ||
621 | .name = "max1038", | ||
622 | .num_inputs = 12, | ||
623 | .bits = 8, | ||
624 | .int_vref_mv = 4096, | ||
625 | .mode_list = max1238_mode_list, | ||
626 | .num_modes = ARRAY_SIZE(max1238_mode_list), | ||
627 | .default_mode = s0to11, | ||
628 | .dev_attrs = &max1238_dev_attr_group, | ||
629 | .scan_attrs = &max1238_scan_el_group, | ||
630 | }, { | ||
631 | .name = "max1039", | ||
632 | .num_inputs = 12, | ||
633 | .bits = 8, | ||
634 | .int_vref_mv = 2048, | ||
635 | .mode_list = max1238_mode_list, | ||
636 | .num_modes = ARRAY_SIZE(max1238_mode_list), | ||
637 | .default_mode = s0to11, | ||
638 | .dev_attrs = &max1238_dev_attr_group, | ||
639 | .scan_attrs = &max1238_scan_el_group, | ||
640 | }, { | ||
580 | .name = "max1136", | 641 | .name = "max1136", |
581 | .num_inputs = 4, | 642 | .num_inputs = 4, |
582 | .bits = 10, | 643 | .bits = 10, |
@@ -657,6 +718,66 @@ static const struct max1363_chip_info max1363_chip_info_tbl[] = { | |||
657 | .dev_attrs = &max1238_dev_attr_group, | 718 | .dev_attrs = &max1238_dev_attr_group, |
658 | .scan_attrs = &max1238_scan_el_group, | 719 | .scan_attrs = &max1238_scan_el_group, |
659 | }, { | 720 | }, { |
721 | .name = "max11600", | ||
722 | .num_inputs = 4, | ||
723 | .bits = 8, | ||
724 | .int_vref_mv = 4096, | ||
725 | .mode_list = max11607_mode_list, | ||
726 | .num_modes = ARRAY_SIZE(max11607_mode_list), | ||
727 | .default_mode = s0to3, | ||
728 | .dev_attrs = &max1363_dev_attr_group, | ||
729 | .scan_attrs = &max1363_scan_el_group, | ||
730 | }, { | ||
731 | .name = "max11601", | ||
732 | .num_inputs = 4, | ||
733 | .bits = 8, | ||
734 | .int_vref_mv = 2048, | ||
735 | .mode_list = max11607_mode_list, | ||
736 | .num_modes = ARRAY_SIZE(max11607_mode_list), | ||
737 | .default_mode = s0to3, | ||
738 | .dev_attrs = &max1363_dev_attr_group, | ||
739 | .scan_attrs = &max1363_scan_el_group, | ||
740 | }, { | ||
741 | .name = "max11602", | ||
742 | .num_inputs = 8, | ||
743 | .bits = 8, | ||
744 | .int_vref_mv = 4096, | ||
745 | .mode_list = max11608_mode_list, | ||
746 | .num_modes = ARRAY_SIZE(max11608_mode_list), | ||
747 | .default_mode = s0to7, | ||
748 | .dev_attrs = &max11608_dev_attr_group, | ||
749 | .scan_attrs = &max11608_scan_el_group, | ||
750 | }, { | ||
751 | .name = "max11603", | ||
752 | .num_inputs = 8, | ||
753 | .bits = 8, | ||
754 | .int_vref_mv = 2048, | ||
755 | .mode_list = max11608_mode_list, | ||
756 | .num_modes = ARRAY_SIZE(max11608_mode_list), | ||
757 | .default_mode = s0to7, | ||
758 | .dev_attrs = &max11608_dev_attr_group, | ||
759 | .scan_attrs = &max11608_scan_el_group, | ||
760 | }, { | ||
761 | .name = "max11604", | ||
762 | .num_inputs = 12, | ||
763 | .bits = 8, | ||
764 | .int_vref_mv = 4098, | ||
765 | .mode_list = max1238_mode_list, | ||
766 | .num_modes = ARRAY_SIZE(max1238_mode_list), | ||
767 | .default_mode = s0to11, | ||
768 | .dev_attrs = &max1238_dev_attr_group, | ||
769 | .scan_attrs = &max1238_scan_el_group, | ||
770 | }, { | ||
771 | .name = "max11605", | ||
772 | .num_inputs = 12, | ||
773 | .bits = 8, | ||
774 | .int_vref_mv = 2048, | ||
775 | .mode_list = max1238_mode_list, | ||
776 | .num_modes = ARRAY_SIZE(max1238_mode_list), | ||
777 | .default_mode = s0to11, | ||
778 | .dev_attrs = &max1238_dev_attr_group, | ||
779 | .scan_attrs = &max1238_scan_el_group, | ||
780 | }, { | ||
660 | .name = "max11606", | 781 | .name = "max11606", |
661 | .num_inputs = 4, | 782 | .num_inputs = 4, |
662 | .bits = 10, | 783 | .bits = 10, |
@@ -920,6 +1041,10 @@ static const struct i2c_device_id max1363_id[] = { | |||
920 | { "max1362", max1362 }, | 1041 | { "max1362", max1362 }, |
921 | { "max1363", max1363 }, | 1042 | { "max1363", max1363 }, |
922 | { "max1364", max1364 }, | 1043 | { "max1364", max1364 }, |
1044 | { "max1036", max1036 }, | ||
1045 | { "max1037", max1037 }, | ||
1046 | { "max1038", max1038 }, | ||
1047 | { "max1039", max1039 }, | ||
923 | { "max1136", max1136 }, | 1048 | { "max1136", max1136 }, |
924 | { "max1137", max1137 }, | 1049 | { "max1137", max1137 }, |
925 | { "max1138", max1138 }, | 1050 | { "max1138", max1138 }, |
@@ -928,6 +1053,12 @@ static const struct i2c_device_id max1363_id[] = { | |||
928 | { "max1237", max1237 }, | 1053 | { "max1237", max1237 }, |
929 | { "max1238", max1238 }, | 1054 | { "max1238", max1238 }, |
930 | { "max1239", max1239 }, | 1055 | { "max1239", max1239 }, |
1056 | { "max11600", max11600 }, | ||
1057 | { "max11601", max11601 }, | ||
1058 | { "max11602", max11602 }, | ||
1059 | { "max11603", max11603 }, | ||
1060 | { "max11604", max11604 }, | ||
1061 | { "max11605", max11605 }, | ||
931 | { "max11606", max11606 }, | 1062 | { "max11606", max11606 }, |
932 | { "max11607", max11607 }, | 1063 | { "max11607", max11607 }, |
933 | { "max11608", max11608 }, | 1064 | { "max11608", max11608 }, |
diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c index f1e37f2cf4e..85fde751a15 100644 --- a/drivers/staging/iio/adc/max1363_ring.c +++ b/drivers/staging/iio/adc/max1363_ring.c | |||
@@ -55,8 +55,11 @@ int max1363_single_channel_from_ring(long mask, struct max1363_state *st) | |||
55 | count++; | 55 | count++; |
56 | mask >>= 1; | 56 | mask >>= 1; |
57 | } | 57 | } |
58 | return ((int)(ring_data[count*2 + 0] & 0x0F) << 8) | 58 | if (st->chip_info->bits != 8) |
59 | + (int)(ring_data[count*2 + 1]); | 59 | return ((int)(ring_data[count*2 + 0] & 0x0F) << 8) |
60 | + (int)(ring_data[count*2 + 1]); | ||
61 | else | ||
62 | return ring_data[count]; | ||
60 | 63 | ||
61 | error_free_ring_data: | 64 | error_free_ring_data: |
62 | kfree(ring_data); | 65 | kfree(ring_data); |
@@ -90,7 +93,10 @@ static int max1363_ring_preenable(struct iio_dev *indio_dev) | |||
90 | 93 | ||
91 | numvals = hweight_long(st->current_mode->modemask); | 94 | numvals = hweight_long(st->current_mode->modemask); |
92 | if (indio_dev->ring->access.set_bpd) { | 95 | if (indio_dev->ring->access.set_bpd) { |
93 | d_size = numvals*2 + sizeof(s64); | 96 | if (st->chip_info->bits != 8) |
97 | d_size = numvals*2 + sizeof(s64); | ||
98 | else | ||
99 | d_size = numvals + sizeof(s64); | ||
94 | if (d_size % 8) | 100 | if (d_size % 8) |
95 | d_size += 8 - (d_size % 8); | 101 | d_size += 8 - (d_size % 8); |
96 | indio_dev->ring->access.set_bpd(indio_dev->ring, d_size); | 102 | indio_dev->ring->access.set_bpd(indio_dev->ring, d_size); |
@@ -166,7 +172,10 @@ static void max1363_poll_bh_to_ring(struct work_struct *work_s) | |||
166 | unsigned long numvals = hweight_long(st->current_mode->modemask); | 172 | unsigned long numvals = hweight_long(st->current_mode->modemask); |
167 | 173 | ||
168 | /* Ensure the timestamp is 8 byte aligned */ | 174 | /* Ensure the timestamp is 8 byte aligned */ |
169 | d_size = numvals*2 + sizeof(s64); | 175 | if (st->chip_info->bits != 8) |
176 | d_size = numvals*2 + sizeof(s64); | ||
177 | else | ||
178 | d_size = numvals + sizeof(s64); | ||
170 | if (d_size % sizeof(s64)) | 179 | if (d_size % sizeof(s64)) |
171 | d_size += sizeof(s64) - (d_size % sizeof(s64)); | 180 | d_size += sizeof(s64) - (d_size % sizeof(s64)); |
172 | 181 | ||
@@ -184,8 +193,10 @@ static void max1363_poll_bh_to_ring(struct work_struct *work_s) | |||
184 | rxbuf = kmalloc(d_size, GFP_KERNEL); | 193 | rxbuf = kmalloc(d_size, GFP_KERNEL); |
185 | if (rxbuf == NULL) | 194 | if (rxbuf == NULL) |
186 | return; | 195 | return; |
187 | 196 | if (st->chip_info->bits != 8) | |
188 | b_sent = i2c_master_recv(st->client, rxbuf, numvals*2); | 197 | b_sent = i2c_master_recv(st->client, rxbuf, numvals*2); |
198 | else | ||
199 | b_sent = i2c_master_recv(st->client, rxbuf, numvals); | ||
189 | if (b_sent < 0) | 200 | if (b_sent < 0) |
190 | goto done; | 201 | goto done; |
191 | 202 | ||