]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
iio: adc: ad7606: add 'bits' parameter to channels macros
authorAlexandru Ardelean <aardelean@baylibre.com>
Thu, 19 Sep 2024 13:04:36 +0000 (16:04 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Mon, 30 Sep 2024 08:21:04 +0000 (09:21 +0100)
There are some newer additions to the AD7606 family, which support 18 bit
precision. Up until now, all chips were 16 bit.

This change adds a 'bits' parameter to the AD760X_CHANNEL macro and renames
'ad7606_channels' -> 'ad7606_channels_16bit' for the current devices.

The AD7606_SW_CHANNEL() macro is also introduced, as a short-hand for IIO
channels in SW mode.

Signed-off-by: Alexandru Ardelean <aardelean@baylibre.com>
Reviewed-by: David Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20240919130444.2100447-2-aardelean@baylibre.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/ad7606.c
drivers/iio/adc/ad7606.h
drivers/iio/adc/ad7606_spi.c

index 9b457472d49c176f75fa211577c3b59e66dac77e..8ebfe8abc3f4630553364d8042f756a40a6698d3 100644 (file)
@@ -309,16 +309,16 @@ static const struct iio_chan_spec ad7605_channels[] = {
        AD7605_CHANNEL(3),
 };
 
-static const struct iio_chan_spec ad7606_channels[] = {
+static const struct iio_chan_spec ad7606_channels_16bit[] = {
        IIO_CHAN_SOFT_TIMESTAMP(8),
-       AD7606_CHANNEL(0),
-       AD7606_CHANNEL(1),
-       AD7606_CHANNEL(2),
-       AD7606_CHANNEL(3),
-       AD7606_CHANNEL(4),
-       AD7606_CHANNEL(5),
-       AD7606_CHANNEL(6),
-       AD7606_CHANNEL(7),
+       AD7606_CHANNEL(0, 16),
+       AD7606_CHANNEL(1, 16),
+       AD7606_CHANNEL(2, 16),
+       AD7606_CHANNEL(3, 16),
+       AD7606_CHANNEL(4, 16),
+       AD7606_CHANNEL(5, 16),
+       AD7606_CHANNEL(6, 16),
+       AD7606_CHANNEL(7, 16),
 };
 
 /*
@@ -333,22 +333,22 @@ static const struct iio_chan_spec ad7606_channels[] = {
  */
 static const struct iio_chan_spec ad7616_channels[] = {
        IIO_CHAN_SOFT_TIMESTAMP(16),
-       AD7606_CHANNEL(0),
-       AD7606_CHANNEL(1),
-       AD7606_CHANNEL(2),
-       AD7606_CHANNEL(3),
-       AD7606_CHANNEL(4),
-       AD7606_CHANNEL(5),
-       AD7606_CHANNEL(6),
-       AD7606_CHANNEL(7),
-       AD7606_CHANNEL(8),
-       AD7606_CHANNEL(9),
-       AD7606_CHANNEL(10),
-       AD7606_CHANNEL(11),
-       AD7606_CHANNEL(12),
-       AD7606_CHANNEL(13),
-       AD7606_CHANNEL(14),
-       AD7606_CHANNEL(15),
+       AD7606_CHANNEL(0, 16),
+       AD7606_CHANNEL(1, 16),
+       AD7606_CHANNEL(2, 16),
+       AD7606_CHANNEL(3, 16),
+       AD7606_CHANNEL(4, 16),
+       AD7606_CHANNEL(5, 16),
+       AD7606_CHANNEL(6, 16),
+       AD7606_CHANNEL(7, 16),
+       AD7606_CHANNEL(8, 16),
+       AD7606_CHANNEL(9, 16),
+       AD7606_CHANNEL(10, 16),
+       AD7606_CHANNEL(11, 16),
+       AD7606_CHANNEL(12, 16),
+       AD7606_CHANNEL(13, 16),
+       AD7606_CHANNEL(14, 16),
+       AD7606_CHANNEL(15, 16),
 };
 
 static const struct ad7606_chip_info ad7606_chip_info_tbl[] = {
@@ -358,25 +358,25 @@ static const struct ad7606_chip_info ad7606_chip_info_tbl[] = {
                .num_channels = 5,
        },
        [ID_AD7606_8] = {
-               .channels = ad7606_channels,
+               .channels = ad7606_channels_16bit,
                .num_channels = 9,
                .oversampling_avail = ad7606_oversampling_avail,
                .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
        },
        [ID_AD7606_6] = {
-               .channels = ad7606_channels,
+               .channels = ad7606_channels_16bit,
                .num_channels = 7,
                .oversampling_avail = ad7606_oversampling_avail,
                .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
        },
        [ID_AD7606_4] = {
-               .channels = ad7606_channels,
+               .channels = ad7606_channels_16bit,
                .num_channels = 5,
                .oversampling_avail = ad7606_oversampling_avail,
                .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
        },
        [ID_AD7606B] = {
-               .channels = ad7606_channels,
+               .channels = ad7606_channels_16bit,
                .num_channels = 9,
                .oversampling_avail = ad7606_oversampling_avail,
                .oversampling_num = ARRAY_SIZE(ad7606_oversampling_avail),
index 6649e84d25de6428bc2cecaea9cc10f7add49781..204a343067e5f63e828770565278068a10a114a0 100644 (file)
@@ -8,7 +8,7 @@
 #ifndef IIO_ADC_AD7606_H_
 #define IIO_ADC_AD7606_H_
 
-#define AD760X_CHANNEL(num, mask_sep, mask_type, mask_all) {   \
+#define AD760X_CHANNEL(num, mask_sep, mask_type, mask_all, bits) {     \
                .type = IIO_VOLTAGE,                            \
                .indexed = 1,                                   \
                .channel = num,                                 \
                .scan_index = num,                              \
                .scan_type = {                                  \
                        .sign = 's',                            \
-                       .realbits = 16,                         \
-                       .storagebits = 16,                      \
+                       .realbits = (bits),                     \
+                       .storagebits = (bits) > 16 ? 32 : 16,   \
                        .endianness = IIO_CPU,                  \
                },                                              \
 }
 
 #define AD7605_CHANNEL(num)                            \
        AD760X_CHANNEL(num, BIT(IIO_CHAN_INFO_RAW),     \
-               BIT(IIO_CHAN_INFO_SCALE), 0)
+               BIT(IIO_CHAN_INFO_SCALE), 0, 16)
 
-#define AD7606_CHANNEL(num)                            \
+#define AD7606_CHANNEL(num, bits)                      \
        AD760X_CHANNEL(num, BIT(IIO_CHAN_INFO_RAW),     \
                BIT(IIO_CHAN_INFO_SCALE),               \
-               BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO))
+               BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), bits)
 
-#define AD7616_CHANNEL(num)    \
+#define AD7606_SW_CHANNEL(num, bits)   \
        AD760X_CHANNEL(num, BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),\
-               0, BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO))
+               0, BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), bits)
+
+#define AD7616_CHANNEL(num)    AD7606_SW_CHANNEL(num, 16)
 
 /**
  * struct ad7606_chip_info - chip specific information
index 62ec121953079944210563c2e8e618615148bf17..e00f58a6a0e966fd9febd116ae7c8cd6babf7251 100644 (file)
@@ -67,14 +67,14 @@ static const struct iio_chan_spec ad7616_sw_channels[] = {
 
 static const struct iio_chan_spec ad7606b_sw_channels[] = {
        IIO_CHAN_SOFT_TIMESTAMP(8),
-       AD7616_CHANNEL(0),
-       AD7616_CHANNEL(1),
-       AD7616_CHANNEL(2),
-       AD7616_CHANNEL(3),
-       AD7616_CHANNEL(4),
-       AD7616_CHANNEL(5),
-       AD7616_CHANNEL(6),
-       AD7616_CHANNEL(7),
+       AD7606_SW_CHANNEL(0, 16),
+       AD7606_SW_CHANNEL(1, 16),
+       AD7606_SW_CHANNEL(2, 16),
+       AD7606_SW_CHANNEL(3, 16),
+       AD7606_SW_CHANNEL(4, 16),
+       AD7606_SW_CHANNEL(5, 16),
+       AD7606_SW_CHANNEL(6, 16),
+       AD7606_SW_CHANNEL(7, 16),
 };
 
 static const unsigned int ad7606B_oversampling_avail[9] = {