Skip to contentSkip to conversation

Add MAX14001/MAX14002 support

PATCH Superseded Marilene Andrade Garcia 6 participants 9 messages Aug 21, 2025 – Oct 2, 2025

Subsystems (4)

v1 of 13 Superseded Latest is v13 →

lore
Share & tools
lore

Marilene Andrade Garcia

author maintainer
#0 lore raw

cover Add MAX14001/MAX14002 support

Hello maintainers,

This patch series adds basic support for the Analog Devices MAX14001/MAX14002, configurable, isolated 10-bit ADCs for multi-range binary inputs. Besides the implemented ADC readings, these devices have more features, like a binary comparator; a filtered reading that can provide the average of the last 2, 4, or 8 ADC readings; and an inrush comparator that triggers the inrush current. There is also a fault feature that can diagnose seven possible fault conditions.

To keep the commits simple and organized, these initial driver support patches aim to upstream only the features related to reading two registers, one that contains the latest ADC reading, and another one that contains the latest filtered ADC readings. Though, _raw and _mean_raw are providing the same results in this initial version since the data averaging config interface is not implemented yet. For this, IIO_CHAN_INFO_AVERAGE_RAW was used to return the filtered average of ADC readings. An additional patch documenting the in_voltageY_mean_raw interface can be added on v2 if that would be desirable. The idea is to use in_voltageY_mean_raw to return the filtered average value, and also to set how many ADC readings (0, 2, 4, or 8) are included in the mean calculation. I would also like to know if you have any feedback on using IIO_CHAN_INFO_AVERAGE_RAW in this way.

The changes were tested using the Raspberry Pi modified kernel version rpi-6.6 on Raspberry Pi 5 hardware. For testing, the MAX14001PMB evaluation board was used, which contains two MAX14001 devices. According to the board’s circuit configuration, one device measures current and the other measures voltage. Due to the evaluation board’s circuitry, the devices also receive an offset that allows them to measure negative values. None of these evaluation board-specific characteristics were included in the driver code (neither the offset nor the current channel capability). However, they were considered in the calculation of the values read by the devices. Should the code that applies these board configuration parameters be added as an additional driver file inside the IIO subsystem, or should it remain only in a user application file?

The code was developed during the GSoC program as part of the Analog Devices Mentorship. Many thanks to my mentors Marcelo Schmitt, Ceclan Dumitru, Jonathan Santos and Dragos Bogdan for their guidance, reviews, and explanations about the IIO subsystem code.

I intend to keep sending patches to cover all the features of the device.

Thank you for your time,
Best regards,
Marilene Andrade Garcia.

Marilene Andrade Garcia (2):
dt-bindings: iio: adc: Add MAX14001
iio: adc: Add basic support for MAX14001

 .../bindings/iio/adc/adi,max14001.yaml        |  78 +++++++
 MAINTAINERS                                   |   8 +
 drivers/iio/adc/Kconfig                       |  10 +
 drivers/iio/adc/Makefile                      |   1 +
 drivers/iio/adc/max14001.c                    | 213 ++++++++++++++++++
 5 files changed, 310 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
 create mode 100644 drivers/iio/adc/max14001.c

base-commit: 7c680c4dbbb5365ad78ce661886ce1668ff40f9c

Signature · 1 line
2.34.1
author maintainer
#1 lore raw

PATCH 1/2 dt-bindings: iio: adc: Add MAX14001

Add device-tree documentation for MAX14001/MAX14002 ADCs. The MAX14001/MAX14002 are isolated, single-channel analog-to-digital converters with programmable voltage comparators and inrush current control optimized for configurable binary input applications.

---
 .../bindings/iio/adc/adi,max14001.yaml        | 78 +++++++++++++++++++
 MAINTAINERS                                   |  7 ++
 2 files changed, 85 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml new file +78 -0
new file mode 100644
index 000000000000..3b2a2e788a17
@@ -0,0 +1,78 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright 2025 Marilene Andrade Garcia
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/adi,max14001.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices MAX14001-MAX14002 10-bit ADCs
+
+maintainers:
+  - Marilene Andrade Garcia <[email protected]>
+
+description:
+  Bindings for the Analog Devices MAX14001-MAX14002 Configurable,
+  Isolated 10-bit ADCs for Multi-Range Binary Inputs.
+
+  Datasheet can be found here
+    https://www.analog.com/media/en/technical-documentation/data-sheets/MAX14001-MAX14002.pdf
+
+$ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+  compatible:
+    enum:
+      - adi,max14001
+      - adi,max14002
+
+  reg:
+    maxItems: 1
+
+  vdd-supply:
+    description:
+      Isolated DC-DC power supply input voltage.
+
+  vddl-supply:
+    description:
+      Logic power supply.
+
+  vrefin-supply:
+    description:
+      ADC voltage reference supply.
+
+  interrupts:
+    items:
+      - description: |
+          Interrupt for signaling when conversion results exceed the configured
+          upper threshold for ADC readings or fall below the lower threshold for
+          them. Interrupt source must be attached to COUT pin.
+      - description: |
+          Alert output that asserts low during a number of different error
+          conditions. The interrupt source must be attached to FAULT pin.
+
+  spi-max-frequency:
+    maximum: 5000000
+
+required:
+  - compatible
+  - reg
+  - vdd-supply
+  - vddl-supply
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    spi {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      max14001: adc@0 {
+        compatible = "adi,max14001";
+        reg = <0>;
+        spi-max-frequency = <5000000>;
+        vdd-supply = <&vdd>;
+        vddl-supply = <&vddl>;
+      };
+    };
+...
MAINTAINERS +7 -0
index af1c8d2bfb3d..0aeab5dbd39d 100644
@@ -14984,6 +14984,13 @@ W:	https://ez.analog.com/linux-software-drivers
 F:	Documentation/devicetree/bindings/iio/adc/maxim,max11205.yaml
 F:	drivers/iio/adc/max11205.c
 
+MAXIM MAX14001/MAX14002 DRIVER
+M:	Marilene Andrade Garcia <[email protected]>
+L:	[email protected]
+S:	Maintained
+W:	https://ez.analog.com/linux-software-drivers
+F:	Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
+
 MAXIM MAX17040 FAMILY FUEL GAUGE DRIVERS
 R:	Iskren Chernev <[email protected]>
 R:	Krzysztof Kozlowski <[email protected]>
Signature · 1 line
2.34.1
#2 lore raw

Re: [PATCH v1 1/2] dt-bindings: iio: adc: Add MAX14001

The MMAALLLEEE hackers were thrown out of linux... for documentation.

Quoted 119 lines · Marilene Andrade Garcia

Add device-tree documentation for MAX14001/MAX14002 ADCs. The MAX14001/MAX14002 are isolated, single-channel analog-to-digital converters with programmable voltage comparators and inrush current control optimized for configurable binary input applications.

---
 .../bindings/iio/adc/adi,max14001.yaml        | 78 +++++++++++++++++++
 MAINTAINERS                                   |  7 ++
 2 files changed, 85 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml new file +78 -0
new file mode 100644
index 000000000000..3b2a2e788a17
@@ -0,0 +1,78 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright 2025 Marilene Andrade Garcia
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/adi,max14001.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices MAX14001-MAX14002 10-bit ADCs
+
+maintainers:
+  - Marilene Andrade Garcia <[email protected]>
+
+description:
+  Bindings for the Analog Devices MAX14001-MAX14002 Configurable,
+  Isolated 10-bit ADCs for Multi-Range Binary Inputs.
+
+  Datasheet can be found here
+    https://www.analog.com/media/en/technical-documentation/data-sheets/MAX14001-MAX14002.pdf
+
+$ref: /schemas/spi/spi-peripheral-props.yaml#
+
+properties:
+  compatible:
+    enum:
+      - adi,max14001
+      - adi,max14002
+
+  reg:
+    maxItems: 1
+
+  vdd-supply:
+    description:
+      Isolated DC-DC power supply input voltage.
+
+  vddl-supply:
+    description:
+      Logic power supply.
+
+  vrefin-supply:
+    description:
+      ADC voltage reference supply.
+
+  interrupts:
+    items:
+      - description: |
+          Interrupt for signaling when conversion results exceed the configured
+          upper threshold for ADC readings or fall below the lower threshold for
+          them. Interrupt source must be attached to COUT pin.
+      - description: |
+          Alert output that asserts low during a number of different error
+          conditions. The interrupt source must be attached to FAULT pin.
+
+  spi-max-frequency:
+    maximum: 5000000
+
+required:
+  - compatible
+  - reg
+  - vdd-supply
+  - vddl-supply
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    spi {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      max14001: adc@0 {
+        compatible = "adi,max14001";
+        reg = <0>;
+        spi-max-frequency = <5000000>;
+        vdd-supply = <&vdd>;
+        vddl-supply = <&vddl>;
+      };
+    };
+...
MAINTAINERS +7 -1
index af1c8d2bfb3d..0aeab5dbd39d 100644
@@ -14984,6 +14984,13 @@ W:     https://ez.analog.com/linux-software-drivers
 F:     Documentation/devicetree/bindings/iio/adc/maxim,max11205.yaml
 F:     drivers/iio/adc/max11205.c
 
+MAXIM MAX14001/MAX14002 DRIVER
+M:     Marilene Andrade Garcia <[email protected]>
+L:     [email protected]
+S:     Maintained
+W:     https://ez.analog.com/linux-software-drivers
+F:     Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
+
 MAXIM MAX17040 FAMILY FUEL GAUGE DRIVERS
 R:     Iskren Chernev <[email protected]>
 R:     Krzysztof Kozlowski <[email protected]>
--

2.34.1

author maintainer
#3 lore raw

PATCH 2/2 iio: adc: Add basic support for MAX14001

In reply to Marilene Andrade Garcia

The MAX14001/MAX14002 are configurable, isolated 10-bit ADCs for multi-range binary inputs. Besides the ADC readings, the MAX14001/MAX14002 offers more features, like a binary comparator, a filtered reading that can provide the average of the last 2, 4, or 8 ADC readings, and an inrush comparator that triggers the inrush current. There is also a fault feature that can diagnose seven possible fault conditions. And an option to select an external or internal ADC voltage reference.

Add basic support for MAX14001/MAX14002 with the following features:
- Raw ADC reading.
- Filtered ADC average reading with the default configuration.

---
 MAINTAINERS                |   1 +
 drivers/iio/adc/Kconfig    |  10 ++
 drivers/iio/adc/Makefile   |   1 +
 drivers/iio/adc/max14001.c | 213 +++++++++++++++++++++++++++++++++++++
 4 files changed, 225 insertions(+)
 create mode 100644 drivers/iio/adc/max14001.c
MAINTAINERS +1 -0
index 0aeab5dbd39d..ea5d6d9ba5eb 100644
@@ -14990,6 +14990,7 @@ L:	[email protected]
 S:	Maintained
 W:	https://ez.analog.com/linux-software-drivers
 F:	Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
+F:	drivers/iio/adc/max14001.c
 
 MAXIM MAX17040 FAMILY FUEL GAUGE DRIVERS
 R:	Iskren Chernev <[email protected]>
drivers/iio/adc/Kconfig +10 -0
index 6de2abad0197..12688c9780e1 100644
@@ -976,6 +976,16 @@ config MAX1363
 	  To compile this driver as a module, choose M here: the module will be
 	  called max1363.
 
+config MAX14001
+       tristate "Analog Devices MAX14001/MAX14002 ADCs driver"
+       depends on SPI
+       help
+         Say yes here to build support for Analog Devices MAX14001/MAX14002
+         Configurable, Isolated 10-bit ADCs for Multi-Range Binary Inputs.
+
+         To compile this driver as a module, choose M here: the module will be
+         called max14001.
+
 config MAX34408
 	tristate "Maxim max34408/max344089 ADC driver"
 	depends on I2C
drivers/iio/adc/Makefile +1 -0
index 1c6ca5fd4b6d..05b930a1bce5 100644
@@ -86,6 +86,7 @@ obj-$(CONFIG_MAX11205) += max11205.o
 obj-$(CONFIG_MAX11410) += max11410.o
 obj-$(CONFIG_MAX1241) += max1241.o
 obj-$(CONFIG_MAX1363) += max1363.o
+obj-$(CONFIG_MAX14001) += max14001.o
 obj-$(CONFIG_MAX34408) += max34408.o
 obj-$(CONFIG_MAX77541_ADC) += max77541-adc.o
 obj-$(CONFIG_MAX9611) += max9611.o
drivers/iio/adc/max14001.c new file +213 -0

213 lines not on this page · raw message

Signature · 1 line
2.34.1
#4 lore raw

Re: [PATCH v1 2/2] iio: adc: Add basic support for MAX14001

kernel test robot noticed the following build errors:

Hi Marilene,

kernel test robot noticed the following build errors:

[auto build test ERROR on 7c680c4dbbb5365ad78ce661886ce1668ff40f9c]

url:    https://github.com/intel-lab-lkp/linux/commits/Marilene-Andrade-Garcia/dt-bindings-iio-adc-Add-MAX14001/20250821-225647
base:   7c680c4dbbb5365ad78ce661886ce1668ff40f9c
patch link:    https://lore.kernel.org/r/2919a00f86c1188b83446853bcb9740138d70f44.1755778212.git.marilene.agarcia%40gmail.com
patch subject: [PATCH v1 2/2] iio: adc: Add basic support for MAX14001
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20250822/[email protected]/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250822/[email protected]/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

>> drivers/iio/adc/max14001.c:10:10: fatal error: 'asm/unaligned.h' file not found
      10 | #include <asm/unaligned.h>
         |          ^~~~~~~~~~~~~~~~~

1 error generated.

vim +10 drivers/iio/adc/max14001.c

  > 10	#include <asm/unaligned.h>
    11	#include <linux/bitfield.h>
    12	#include <linux/bitrev.h>
    13	#include <linux/module.h>
    14	#include <linux/spi/spi.h>
    15	#include <linux/iio/iio.h>
    16	#include <linux/regulator/consumer.h>
    17	
Signature · 2 lines
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
maintainer
#5 lore raw

Re: [PATCH v1 2/2] iio: adc: Add basic support for MAX14001

In reply to Marilene Andrade Garcia
Quoted 8 lines · On Thu, 21 Aug 2025 10:39:07 -0300 Marilene Andrade Garcia…

The MAX14001/MAX14002 are configurable, isolated 10-bit ADCs for multi-range binary inputs. Besides the ADC readings, the MAX14001/MAX14002 offers more features, like a binary comparator, a filtered reading that can provide the average of the last 2, 4, or 8 ADC readings, and an inrush comparator that triggers the inrush current. There is also a fault feature that can diagnose seven possible fault conditions. And an option to select an external or internal ADC voltage reference.

Quoted 5 lines

Add basic support for MAX14001/MAX14002 with the following features:
- Raw ADC reading.
- Filtered ADC average reading with the default configuration.

Given the discussion on the cover letter, perhaps this will need to be merged with the earlier set. I'll do a quick review anyway!

Fairly minor comments inline. This is in a pretty good state for a v1.

Thanks,

Jonathan

Quoted 14 lines
---
 MAINTAINERS                |   1 +
 drivers/iio/adc/Kconfig    |  10 ++
 drivers/iio/adc/Makefile   |   1 +
 drivers/iio/adc/max14001.c | 213 +++++++++++++++++++++++++++++++++++++
 4 files changed, 225 insertions(+)
 create mode 100644 drivers/iio/adc/max14001.c
drivers/iio/adc/max14001.c new file +0 -0
new file mode 100644
index 000000000000..fb79f3b81e0c

drivers/iio/adc/max14001.c line 10

Quoted 10 lines
drivers/iio/adc/max14001.c new file +10 -0
@@ -0,0 +1,213 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * MAX14001/MAX14002 SPI ADC driver
+ *
+ * Copyright (c) 2025 Marilene Andrade Garcia <[email protected]>
+ *
+ * Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/MAX14001-MAX14002.pdf
+ */
+
+#include <asm/unaligned.h>

As per build bot this doesn't work on modern kernels. linux/unaligned.

drivers/iio/adc/max14001.c line 13

Quoted 3 lines
drivers/iio/adc/max14001.c new file +3 -0
+#include <linux/bitfield.h>
+#include <linux/bitrev.h>
+#include <linux/module.h>

various headers missing. Please follow approximate include what you use principles. There are some headers that are obviously going to be included by another one because they cannot stand alone, so for those you can include just the parent. E.g. mutex.h not mutex_types.h but in most other cases all includes with definitions that are used in this file should be here.

Quoted 10 lines
drivers/iio/adc/max14001.c new file +10 -0
+#include <linux/spi/spi.h>
+#include <linux/iio/iio.h>
+#include <linux/regulator/consumer.h>
+
+/* MAX14001 registers definition */
+#define MAX14001_REG_ADC				0x00
+#define MAX14001_REG_FADC				0x01
+#define MAX14001_REG_FLAGS				0x02
+#define MAX14001_REG_FLTEN				0x03
+#define MAX14001_REG_THL				0x04

drivers/iio/adc/max14001.c line 33

Quoted 10 lines
drivers/iio/adc/max14001.c new file +10 -0
+#define MAX14001_REG_THU				0x05
+#define MAX14001_REG_INRR				0x06
+#define MAX14001_REG_INRT				0x07
+#define MAX14001_REG_INRP				0x08
+#define MAX14001_REG_CFG				0x09
+#define MAX14001_REG_ENBL				0x0A
+#define MAX14001_REG_ACT				0x0B
+#define MAX14001_REG_WEN				0x0C
+
+/* MAX14001 CONTROL values*/

Missing space before */

They are going in the WR field below I'd rename that MASK_W then you can just 1 and 0 with their boolean meaning and not bother with these defines.

drivers/iio/adc/max14001.c line 37

Quoted 4 lines
drivers/iio/adc/max14001.c new file +4 -0
+#define MAX14001_REG_WRITE				0x1
+#define MAX14001_REG_READ				0x0
+
+/* MAX14001 MASKS */

The comment isn't very useful. Masks of what? These seems to be SPI message related. Also no point in prefixing comments with MAX14001 when the naming makes that clear.

Quoted 10 lines
drivers/iio/adc/max14001.c new file +10 -0
+#define MAX14001_MASK_ADDR				GENMASK(15, 11)
+#define MAX14001_MASK_WR				BIT(10)
+#define MAX14001_MASK_DATA				GENMASK(9, 0)
+
+enum max14001_chip_model {
+	max14001,
+	max14002,
+};
+
+struct max14001_chip_info {

drivers/iio/adc/max14001.c line 57

Quoted 10 lines
drivers/iio/adc/max14001.c new file +10 -0
+	const char *name;
+};
+
+struct max14001_state {
+	const struct max14001_chip_info *chip_info;
+	struct spi_device *spi;
+	int vref_mv;
+
+	__be16 rx_buffer __aligned(IIO_DMA_MINALIGN);
+	__be16 tx_buffer;

I'd add a comment on these to mention they are also bit reversed after we've flipped the bytes to be in the right order.

drivers/iio/adc/max14001.c line 69

Quoted 12 lines
drivers/iio/adc/max14001.c new file +12 -0
+};
+
+static struct max14001_chip_info max14001_chip_info_tbl[] = {
+	[max14001] = {
+		.name = "max14001",
+	},
+	[max14002] = {
+		.name = "max14002",
+	},
+};
+
+static int max14001_spi_read(struct max14001_state *st, u16 reg, int *val)

The register map is large enough I'd consider using a custom regmap as then we can take advantage of caching and the field manipulation functions that we get from regmap.

Quoted 4 lines
drivers/iio/adc/max14001.c new file +4 -0
+{
+	struct spi_transfer xfer[] = {
+		{
+			.tx_buf = &st->tx_buffer,

drivers/iio/adc/max14001.c line 83

Quoted 10 lines
drivers/iio/adc/max14001.c new file +10 -0
+			.len = sizeof(st->tx_buffer),
+			.cs_change = 1,
+		},
+		{
+			.rx_buf = &st->rx_buffer,
+			.len = sizeof(st->rx_buffer),
+		},
+	};
+	int ret;
+

No locking? Given use of shared buffers I would suggest you need a mutex here, the bus lock won't be enough.

Quoted 9 lines
drivers/iio/adc/max14001.c new file +9 -0
+	st->tx_buffer = FIELD_PREP(MAX14001_MASK_ADDR, reg) |
+			FIELD_PREP(MAX14001_MASK_WR, MAX14001_REG_READ);
+	st->tx_buffer = bitrev16(st->tx_buffer);
+
+	ret = spi_sync_transfer(st->spi, xfer, ARRAY_SIZE(xfer));
+	if (ret < 0)
+		return ret;
+
+	st->rx_buffer = bitrev16(be16_to_cpu(st->rx_buffer));

drivers/iio/adc/max14001.c

Quoted 10 lines
drivers/iio/adc/max14001.c new file +8 -0
+	*val = FIELD_GET(MAX14001_MASK_DATA, st->rx_buffer);
+
+	return 0;
+}
 
 
+static const struct spi_device_id max14001_id_table[] = {
+	{ "max14001", (kernel_ulong_t)&max14001_chip_info_tbl[max14001] },
+	{ "max14002", (kernel_ulong_t)&max14001_chip_info_tbl[max14002] },
+	{}

Trivial but for consistency

	{ }

which is the preferred style in IIO. There isn't any general agreement across the kernel so I picked a choice at random a while back as any choice is better than a mix like we have here.

Quoted 11 lines
drivers/iio/adc/max14001.c new file +11 -0
+};
+MODULE_DEVICE_TABLE(spi, max14001_id_table);
+
+static const struct of_device_id max14001_of_match[] = {
+	{ .compatible = "adi,max14001",
+	  .data = &max14001_chip_info_tbl[max14001], },
+	{ .compatible = "adi,max14002",
+	  .data = &max14001_chip_info_tbl[max14002], },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, max14001_of_match);
#6 lore raw
In reply to Marilene Andrade Garcia
Quoted 36 lines · Marilene Andrade Garcia

Hello maintainers,

This patch series adds basic support for the Analog Devices MAX14001/MAX14002, configurable, isolated 10-bit ADCs for multi-range binary inputs. Besides the implemented ADC readings, these devices have more features, like a binary comparator; a filtered reading that can provide the average of the last 2, 4, or 8 ADC readings; and an inrush comparator that triggers the inrush current. There is also a fault feature that can diagnose seven possible fault conditions.

To keep the commits simple and organized, these initial driver support patches aim to upstream only the features related to reading two registers, one that contains the latest ADC reading, and another one that contains the latest filtered ADC readings. Though, _raw and _mean_raw are providing the same results in this initial version since the data averaging config interface is not implemented yet. For this, IIO_CHAN_INFO_AVERAGE_RAW was used to return the filtered average of ADC readings. An additional patch documenting the in_voltageY_mean_raw interface can be added on v2 if that would be desirable. The idea is to use in_voltageY_mean_raw to return the filtered average value, and also to set how many ADC readings (0, 2, 4, or 8) are included in the mean calculation. I would also like to know if you have any feedback on using IIO_CHAN_INFO_AVERAGE_RAW in this way.

The changes were tested using the Raspberry Pi modified kernel version rpi-6.6 on Raspberry Pi 5 hardware. For testing, the MAX14001PMB evaluation board was used, which contains two MAX14001 devices. According to the board’s circuit configuration, one device measures current and the other measures voltage. Due to the evaluation board’s circuitry, the devices also receive an offset that allows them to measure negative values. None of these evaluation board-specific characteristics were included in the driver code (neither the offset nor the current channel capability). However, they were considered in the calculation of the values read by the devices. Should the code that applies these board configuration parameters be added as an additional driver file inside the IIO subsystem, or should it remain only in a user application file?

Quoted 6 lines

The code was developed during the GSoC program as part of the Analog Devices Mentorship. Many thanks to my mentors Marcelo Schmitt, Ceclan Dumitru, Jonathan Santos and Dragos Bogdan for their guidance, reviews, and explanations about the IIO subsystem code.

I intend to keep sending patches to cover all the features of the device.

Something gone wrong here? There's already a v9 from another ADI employee on the list:
https://lore.kernel.org/all/[email protected]/

#7 lore raw
Quoted 5 lines · Conor Dooley
Quoted 4 lines · Marilene Andrade Garcia

Hello maintainers,

This patch series adds basic support for the Analog Devices MAX14001/MAX14002, configurable, isolated 10-bit ADCs for multi-range

...

Quoted 4 lines

Something gone wrong here? There's already a v9 from another ADI employee on the list:
https://lore.kernel.org/all/[email protected]/

Yes, my procedure for finding parts for GSoC projects failed to find that set. From quick read of v9 thread, the reason for that not being applied was lack of detailed comments about device data transfer handling?
Anyway, I guess the only thing left to do now is see what can be taken from Marilene's set and applied on top of Kim's one.

I'm sorry for this unfortunate situation.

#8 lore raw
Quoted 12 lines · Marcelo Schmitt
Quoted 5 lines · Conor Dooley
Quoted 4 lines · Marilene Andrade Garcia

Hello maintainers,

This patch series adds basic support for the Analog Devices MAX14001/MAX14002, configurable, isolated 10-bit ADCs for multi-range

...

Quoted 4 lines

Something gone wrong here? There's already a v9 from another ADI employee on the list:
https://lore.kernel.org/all/[email protected]/

Quoted 7 lines

Yes, my procedure for finding parts for GSoC projects failed to find that set. From quick read of v9 thread, the reason for that not being applied was lack of detailed comments about device data transfer handling?
Anyway, I guess the only thing left to do now is see what can be taken from Marilene's set and applied on top of Kim's one.

I'm sorry for this unfortunate situation.

Eek, saving grace I suppose is that the experience of writing the driver is the most important thing to get out of GSoC?