]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
iio: adc: max1027: Prepare the introduction of different resolutions
authorMiquel Raynal <miquel.raynal@bootlin.com>
Fri, 11 Oct 2019 14:43:43 +0000 (16:43 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 15 Oct 2019 20:11:03 +0000 (21:11 +0100)
Maxim's max1027/29/31 series returns the measured voltages with a
resolution of 10 bits. There is a very similar series, max1227/29/31
which works identically but uses a resolution of 12 bits. Prepare the
support for these chips by turning the 'depth' into a macro parameter
instead of hardcoding it everywhere. Also reorganize just a bit the
macros at the top to avoid repeating tens of lines when adding support
for a new chip.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/max1027.c

index f9b473ee671130de5b1110d5cb874d12e562e100..8b449044bef5cc6405d8d8f886a8c95792031171 100644 (file)
@@ -83,7 +83,7 @@ static const struct of_device_id max1027_adc_dt_ids[] = {
 MODULE_DEVICE_TABLE(of, max1027_adc_dt_ids);
 #endif
 
-#define MAX1027_V_CHAN(index)                                          \
+#define MAX1027_V_CHAN(index, depth)                                   \
        {                                                               \
                .type = IIO_VOLTAGE,                                    \
                .indexed = 1,                                           \
@@ -93,7 +93,7 @@ MODULE_DEVICE_TABLE(of, max1027_adc_dt_ids);
                .scan_index = index + 1,                                \
                .scan_type = {                                          \
                        .sign = 'u',                                    \
-                       .realbits = 10,                                 \
+                       .realbits = depth,                              \
                        .storagebits = 16,                              \
                        .shift = 2,                                     \
                        .endianness = IIO_BE,                           \
@@ -115,52 +115,42 @@ MODULE_DEVICE_TABLE(of, max1027_adc_dt_ids);
                },                                                      \
        }
 
+#define MAX1X27_CHANNELS(depth)                        \
+       MAX1027_T_CHAN,                         \
+       MAX1027_V_CHAN(0, depth),               \
+       MAX1027_V_CHAN(1, depth),               \
+       MAX1027_V_CHAN(2, depth),               \
+       MAX1027_V_CHAN(3, depth),               \
+       MAX1027_V_CHAN(4, depth),               \
+       MAX1027_V_CHAN(5, depth),               \
+       MAX1027_V_CHAN(6, depth),               \
+       MAX1027_V_CHAN(7, depth)
+
+#define MAX1X29_CHANNELS(depth)                        \
+       MAX1X27_CHANNELS(depth),                \
+       MAX1027_V_CHAN(8, depth),               \
+       MAX1027_V_CHAN(9, depth),               \
+       MAX1027_V_CHAN(10, depth),              \
+       MAX1027_V_CHAN(11, depth)
+
+#define MAX1X31_CHANNELS(depth)                        \
+       MAX1X27_CHANNELS(depth),                \
+       MAX1X29_CHANNELS(depth),                \
+       MAX1027_V_CHAN(12, depth),              \
+       MAX1027_V_CHAN(13, depth),              \
+       MAX1027_V_CHAN(14, depth),              \
+       MAX1027_V_CHAN(15, depth)
+
 static const struct iio_chan_spec max1027_channels[] = {
-       MAX1027_T_CHAN,
-       MAX1027_V_CHAN(0),
-       MAX1027_V_CHAN(1),
-       MAX1027_V_CHAN(2),
-       MAX1027_V_CHAN(3),
-       MAX1027_V_CHAN(4),
-       MAX1027_V_CHAN(5),
-       MAX1027_V_CHAN(6),
-       MAX1027_V_CHAN(7)
+       MAX1X27_CHANNELS(10),
 };
 
 static const struct iio_chan_spec max1029_channels[] = {
-       MAX1027_T_CHAN,
-       MAX1027_V_CHAN(0),
-       MAX1027_V_CHAN(1),
-       MAX1027_V_CHAN(2),
-       MAX1027_V_CHAN(3),
-       MAX1027_V_CHAN(4),
-       MAX1027_V_CHAN(5),
-       MAX1027_V_CHAN(6),
-       MAX1027_V_CHAN(7),
-       MAX1027_V_CHAN(8),
-       MAX1027_V_CHAN(9),
-       MAX1027_V_CHAN(10),
-       MAX1027_V_CHAN(11)
+       MAX1X29_CHANNELS(10),
 };
 
 static const struct iio_chan_spec max1031_channels[] = {
-       MAX1027_T_CHAN,
-       MAX1027_V_CHAN(0),
-       MAX1027_V_CHAN(1),
-       MAX1027_V_CHAN(2),
-       MAX1027_V_CHAN(3),
-       MAX1027_V_CHAN(4),
-       MAX1027_V_CHAN(5),
-       MAX1027_V_CHAN(6),
-       MAX1027_V_CHAN(7),
-       MAX1027_V_CHAN(8),
-       MAX1027_V_CHAN(9),
-       MAX1027_V_CHAN(10),
-       MAX1027_V_CHAN(11),
-       MAX1027_V_CHAN(12),
-       MAX1027_V_CHAN(13),
-       MAX1027_V_CHAN(14),
-       MAX1027_V_CHAN(15)
+       MAX1X31_CHANNELS(10),
 };
 
 static const unsigned long max1027_available_scan_masks[] = {
@@ -284,7 +274,7 @@ static int max1027_read_raw(struct iio_dev *indio_dev,
                        break;
                case IIO_VOLTAGE:
                        *val = 2500;
-                       *val2 = 10;
+                       *val2 = chan->scan_type.realbits;
                        ret = IIO_VAL_FRACTIONAL_LOG2;
                        break;
                default: