* [PATCH v13 1/2] dt-bindings: iio: adc: add max14001
@ 2025-10-15 5:11 Marilene Andrade Garcia
2025-10-15 5:12 ` [PATCH v13 2/2] iio: adc: max14001: New driver Marilene Andrade Garcia
2025-10-17 1:38 ` [PATCH v13 1/2] dt-bindings: iio: adc: add max14001 Marcelo Schmitt
0 siblings, 2 replies; 8+ messages in thread
From: Marilene Andrade Garcia @ 2025-10-15 5:11 UTC (permalink / raw)
To: linux-iio, linux-kernel, devicetree
Cc: Marilene Andrade Garcia, Kim Seer Paller, Lars-Peter Clausen,
Michael Hennerich, Jonathan Cameron, David Lechner, Nuno Sá,
Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Marcelo Schmitt, Marcelo Schmitt, Ceclan Dumitru, Jonathan Santos,
Dragos Bogdan
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.
They share the same features, but in the MAX14001 the inrush trigger
threshold, current magnitude, and current duration are all programmable,
whereas in the MAX14002 these parameters are fixed.
Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
---
Hello maintainers,
Thank you for reviewing v12.
I believe I’ve addressed the requested code changes.
Best regards,
Marilene Andrade Garcia
.../bindings/iio/adc/adi,max14001.yaml | 89 +++++++++++++++++++
MAINTAINERS | 8 ++
2 files changed, 97 insertions(+)
create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
diff --git a/Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml b/Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
new file mode 100644
index 000000000000..a2dc59c9dcd8
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
@@ -0,0 +1,89 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright 2023-2025 Analog Devices Inc.
+# Copyright 2023 Kim Seer Paller
+# 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 ADC
+
+maintainers:
+ - Kim Seer Paller <kimseer.paller@analog.com>
+ - Marilene Andrade Garcia <marilene.agarcia@gmail.com>
+
+description: |
+ Single channel 10 bit ADC with SPI interface.
+ 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:
+ oneOf:
+ - const: adi,max14002
+ - items:
+ - const: adi,max14001
+ - const: adi,max14002
+
+ reg:
+ maxItems: 1
+
+ spi-max-frequency:
+ maximum: 5000000
+
+ vdd-supply:
+ description:
+ Isolated DC-DC power supply input voltage.
+
+ vddl-supply:
+ description:
+ Logic power supply.
+
+ refin-supply:
+ description:
+ ADC voltage reference supply.
+
+ interrupts:
+ minItems: 1
+ items:
+ - description: |
+ cout: comparator output signal that asserts high on the COUT pin
+ when ADC readings exceed the upper threshold and low when readings
+ fall below the lower threshold.
+ - description: |
+ fault: when fault reporting is enabled, the FAULT pin is asserted
+ low whenever one of the monitored fault conditions occurs.
+
+ interrupt-names:
+ minItems: 1
+ items:
+ - const: cout
+ - const: fault
+
+required:
+ - compatible
+ - reg
+ - vdd-supply
+ - vddl-supply
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ spi {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ adc@0 {
+ compatible = "adi,max14001", "adi,max14002";
+ reg = <0>;
+ spi-max-frequency = <5000000>;
+ spi-lsb-first;
+ vdd-supply = <&vdd>;
+ vddl-supply = <&vddl>;
+ };
+ };
+...
diff --git a/MAINTAINERS b/MAINTAINERS
index 8082081ea742..f584196d3260 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -15174,6 +15174,14 @@ S: Orphan
F: drivers/video/fbdev/matrox/matroxfb_*
F: include/uapi/linux/matroxfb.h
+MAX14001/MAX14002 IIO ADC DRIVER
+M: Kim Seer Paller <kimseer.paller@analog.com>
+M: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
+L: linux-iio@vger.kernel.org
+S: Maintained
+W: https://ez.analog.com/linux-software-drivers
+F: Documentation/devicetree/bindings/iio/adc/adi,max14001.yaml
+
MAX15301 DRIVER
M: Daniel Nilsson <daniel.nilsson@flex.com>
L: linux-hwmon@vger.kernel.org
base-commit: 4b17a60d1e1c2d9d2ccbd58642f6f4ac2fa364ba
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v13 2/2] iio: adc: max14001: New driver
2025-10-15 5:11 [PATCH v13 1/2] dt-bindings: iio: adc: add max14001 Marilene Andrade Garcia
@ 2025-10-15 5:12 ` Marilene Andrade Garcia
2025-10-17 2:09 ` Marcelo Schmitt
2025-10-17 1:38 ` [PATCH v13 1/2] dt-bindings: iio: adc: add max14001 Marcelo Schmitt
1 sibling, 1 reply; 8+ messages in thread
From: Marilene Andrade Garcia @ 2025-10-15 5:12 UTC (permalink / raw)
To: linux-iio, linux-kernel, devicetree
Cc: Marilene Andrade Garcia, Kim Seer Paller, Lars-Peter Clausen,
Michael Hennerich, Jonathan Cameron, David Lechner, Nuno Sá,
Andy Shevchenko, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Marcelo Schmitt, Marcelo Schmitt, Ceclan Dumitru, Jonathan Santos,
Dragos Bogdan
The MAX14001/MAX14002 is configurable, isolated 10-bit ADCs for multi-range
binary inputs. In addition to 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.
MAX14001/MAX14002 features implemented so far:
- Raw ADC reading.
- MV fault disable.
- Selection of external or internal ADC voltage reference, depending on
whether it is declared in the device tree.
Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
Tested-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
---
Hello maintainers,
Thank you for reviewing v12.
I believe I have addressed the requested code changes.
As discussed, I have dropped the averaging feature from this series and I
am going to add it in a later series. Also, because of that, I am not going
to send the patch related to the in_voltageY_mean_raw ABI documentation
change, but I did take notes about your suggestion in my v12 version patch
related to that, David, thanks.
As I said before, I intend to continue sending patches to implement all the
features of the device. It will be at a low frequency, but consistently.
Thank you, Marcelo, for the code example and for testing on your end as
well. In my tests, I also got 0x80 from the FLAGS (0x02) register. I
thought it could be because I am using low voltage as power input, as I am
using the 5V provided by the Raspberry Pi. As soon as I get a proper power
supply, I am going to investigate that.
Notes:
I have returned the st->chip_info null check as requested in the v12
reviews, even though I had dropped it because of a suggestion in v11.
Best regards,
Marilene Andrade Garcia
MAINTAINERS | 1 +
drivers/iio/adc/Kconfig | 10 +
drivers/iio/adc/Makefile | 1 +
drivers/iio/adc/max14001.c | 391 +++++++++++++++++++++++++++++++++++++
4 files changed, 403 insertions(+)
create mode 100644 drivers/iio/adc/max14001.c
diff --git a/MAINTAINERS b/MAINTAINERS
index f584196d3260..940889b158eb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -15181,6 +15181,7 @@ L: linux-iio@vger.kernel.org
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
MAX15301 DRIVER
M: Daniel Nilsson <daniel.nilsson@flex.com>
diff --git a/drivers/iio/adc/Kconfig b/drivers/iio/adc/Kconfig
index b0580fcefef5..31335af6b2f1 100644
--- a/drivers/iio/adc/Kconfig
+++ b/drivers/iio/adc/Kconfig
@@ -1020,6 +1020,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 ADC 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
diff --git a/drivers/iio/adc/Makefile b/drivers/iio/adc/Makefile
index ed647a734c51..e5349b01e4d9 100644
--- a/drivers/iio/adc/Makefile
+++ b/drivers/iio/adc/Makefile
@@ -89,6 +89,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
diff --git a/drivers/iio/adc/max14001.c b/drivers/iio/adc/max14001.c
new file mode 100644
index 000000000000..90ad4cb5868d
--- /dev/null
+++ b/drivers/iio/adc/max14001.c
@@ -0,0 +1,391 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
+/*
+ * Analog Devices MAX14001/MAX14002 ADC driver
+ *
+ * Copyright (C) 2023-2025 Analog Devices Inc.
+ * Copyright (C) 2023 Kim Seer Paller <kimseer.paller@analog.com>
+ * Copyright (c) 2025 Marilene Andrade Garcia <marilene.agarcia@gmail.com>
+ *
+ * Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/MAX14001-MAX14002.pdf
+ */
+
+#include <linux/array_size.h>
+#include <linux/bitfield.h>
+#include <linux/bitrev.h>
+#include <linux/bits.h>
+#include <linux/cleanup.h>
+#include <linux/device.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+#include <linux/spi/spi.h>
+#include <linux/types.h>
+#include <linux/units.h>
+#include <asm/byteorder.h>
+
+#include <linux/iio/iio.h>
+#include <linux/iio/types.h>
+
+/* MAX14001 Registers Address */
+#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
+#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
+
+#define MAX14001_REG_VERIFICATION(x) ((x) + 0x10)
+
+#define MAX14001_REG_CFG_BIT_EXRF BIT(5)
+
+#define MAX14001_REG_WEN_VALUE_WRITE 0x294
+
+#define MAX14001_MASK_ADDR GENMASK(15, 11)
+#define MAX14001_MASK_WR BIT(10)
+#define MAX14001_MASK_DATA GENMASK(9, 0)
+
+struct max14001_state {
+ const struct max14001_chip_info *chip_info;
+ struct spi_device *spi;
+ struct regmap *regmap;
+ int vref_mV;
+ bool spi_hw_has_lsb_first;
+
+ /*
+ * The following buffers will be bit-reversed during device
+ * communication, because the device transmits and receives data
+ * LSB-first.
+ * DMA (thus cache coherency maintenance) requires the transfer
+ * buffers to live in their own cache lines.
+ */
+ union {
+ __be16 be;
+ __le16 le;
+ } spi_tx_buffer __aligned(IIO_DMA_MINALIGN);
+
+ union {
+ __be16 be;
+ __le16 le;
+ } spi_rx_buffer;
+};
+
+struct max14001_chip_info {
+ const char *name;
+};
+
+static int max14001_read(void *context, unsigned int reg, unsigned int *val)
+{
+ struct max14001_state *st = context;
+ struct spi_transfer xfers[] = {
+ {
+ .tx_buf = &st->spi_tx_buffer,
+ .len = sizeof(st->spi_tx_buffer),
+ .cs_change = 1,
+ }, {
+ .rx_buf = &st->spi_rx_buffer,
+ .len = sizeof(st->spi_rx_buffer),
+ },
+ };
+ int ret;
+ unsigned int addr, data;
+
+ /*
+ * Prepare SPI transmit buffer 16 bit-value and reverse bit order
+ * to align with the LSB-first input on SDI port in order to meet
+ * the device communication requirements. If the controller supports
+ * SPI_LSB_FIRST, this step will be handled by the SPI controller.
+ */
+ addr = FIELD_PREP(MAX14001_MASK_ADDR, reg);
+
+ if (st->spi_hw_has_lsb_first)
+ st->spi_tx_buffer.le = cpu_to_le16(addr);
+ else
+ st->spi_tx_buffer.be = cpu_to_be16(bitrev16(addr));
+
+ ret = spi_sync_transfer(st->spi, xfers, ARRAY_SIZE(xfers));
+ if (ret)
+ return ret;
+
+ /*
+ * Convert received 16-bit value to cpu-endian format and reverse
+ * bit order. If the controller supports SPI_LSB_FIRST, this step
+ * will be handled by the SPI controller.
+ */
+ if (st->spi_hw_has_lsb_first)
+ data = le16_to_cpu(st->spi_rx_buffer.le);
+ else
+ data = bitrev16(be16_to_cpu(st->spi_rx_buffer.be));
+
+ *val = FIELD_GET(MAX14001_MASK_DATA, data);
+
+ return 0;
+}
+
+static int max14001_write(struct max14001_state *st, unsigned int reg, unsigned int val)
+{
+ unsigned int addr;
+
+ /*
+ * Prepare SPI transmit buffer 16 bit-value and reverse bit order
+ * to align with the LSB-first input on SDI port in order to meet
+ * the device communication requirements. If the controller supports
+ * SPI_LSB_FIRST, this step will be handled by the SPI controller.
+ */
+ addr = FIELD_PREP(MAX14001_MASK_ADDR, reg) |
+ FIELD_PREP(MAX14001_MASK_WR, 1) |
+ FIELD_PREP(MAX14001_MASK_DATA, val);
+
+ if (st->spi_hw_has_lsb_first)
+ st->spi_tx_buffer.le = cpu_to_le16(addr);
+ else
+ st->spi_tx_buffer.be = cpu_to_be16(bitrev16(addr));
+
+ return spi_write(st->spi, &st->spi_tx_buffer, sizeof(st->spi_tx_buffer));
+}
+
+static int max14001_write_single_reg(void *context, unsigned int reg, unsigned int val)
+{
+ struct max14001_state *st = context;
+ int ret;
+
+ /* Enable writing to the SPI register. */
+ ret = max14001_write(st, MAX14001_REG_WEN, MAX14001_REG_WEN_VALUE_WRITE);
+ if (ret)
+ return ret;
+
+ /* Writing data into SPI register. */
+ ret = max14001_write(st, reg, val);
+ if (ret)
+ return ret;
+
+ /* Disable writing to the SPI register. */
+ return max14001_write(st, MAX14001_REG_WEN, 0);
+}
+
+static int max14001_write_verification_reg(struct max14001_state *st, unsigned int reg)
+{
+ unsigned int val;
+ int ret;
+
+ ret = regmap_read(st->regmap, reg, &val);
+ if (ret)
+ return ret;
+
+ return max14001_write(st, MAX14001_REG_VERIFICATION(reg), val);
+}
+
+static int max14001_disable_mv_fault(struct max14001_state *st)
+{
+ unsigned int reg;
+ int ret;
+
+ /* Enable writing to the SPI registers. */
+ ret = max14001_write(st, MAX14001_REG_WEN, MAX14001_REG_WEN_VALUE_WRITE);
+ if (ret)
+ return ret;
+
+ /*
+ * Reads all registers and writes the values to their appropriate
+ * verification registers to clear the Memory Validation fault.
+ */
+ for (reg = MAX14001_REG_FLTEN; reg <= MAX14001_REG_ENBL; reg++) {
+ ret = max14001_write_verification_reg(st, reg);
+ if (ret)
+ return ret;
+ }
+
+ /* Disable writing to the SPI registers. */
+ return max14001_write(st, MAX14001_REG_WEN, 0);
+}
+
+static int max14001_debugfs_reg_access(struct iio_dev *indio_dev,
+ unsigned int reg, unsigned int writeval,
+ unsigned int *readval)
+{
+ struct max14001_state *st = iio_priv(indio_dev);
+
+ if (readval)
+ return regmap_read(st->regmap, reg, readval);
+
+ return regmap_write(st->regmap, reg, writeval);
+}
+
+static int max14001_read_raw(struct iio_dev *indio_dev,
+ struct iio_chan_spec const *chan,
+ int *val, int *val2, long mask)
+{
+ struct max14001_state *st = iio_priv(indio_dev);
+ int ret;
+
+ switch (mask) {
+ case IIO_CHAN_INFO_RAW:
+ ret = regmap_read(st->regmap, MAX14001_REG_ADC, val);
+ if (ret)
+ return ret;
+
+ return IIO_VAL_INT;
+ case IIO_CHAN_INFO_SCALE:
+ *val = st->vref_mV;
+ *val2 = 10;
+
+ return IIO_VAL_FRACTIONAL_LOG2;
+ default:
+ return -EINVAL;
+ }
+}
+
+static const struct regmap_range max14001_regmap_rd_range[] = {
+ regmap_reg_range(MAX14001_REG_ADC, MAX14001_REG_ENBL),
+ regmap_reg_range(MAX14001_REG_WEN, MAX14001_REG_WEN),
+ regmap_reg_range(MAX14001_REG_VERIFICATION(MAX14001_REG_FLTEN),
+ MAX14001_REG_VERIFICATION(MAX14001_REG_ENBL)),
+};
+
+static const struct regmap_access_table max14001_regmap_rd_table = {
+ .yes_ranges = max14001_regmap_rd_range,
+ .n_yes_ranges = ARRAY_SIZE(max14001_regmap_rd_range),
+};
+
+static const struct regmap_range max14001_regmap_wr_range[] = {
+ regmap_reg_range(MAX14001_REG_FLTEN, MAX14001_REG_WEN),
+ regmap_reg_range(MAX14001_REG_VERIFICATION(MAX14001_REG_FLTEN),
+ MAX14001_REG_VERIFICATION(MAX14001_REG_ENBL)),
+};
+
+static const struct regmap_access_table max14001_regmap_wr_table = {
+ .yes_ranges = max14001_regmap_wr_range,
+ .n_yes_ranges = ARRAY_SIZE(max14001_regmap_wr_range),
+};
+
+static const struct regmap_config max14001_regmap_config = {
+ .reg_read = max14001_read,
+ .reg_write = max14001_write_single_reg,
+ .max_register = MAX14001_REG_VERIFICATION(MAX14001_REG_ENBL),
+ .rd_table = &max14001_regmap_rd_table,
+ .wr_table = &max14001_regmap_wr_table,
+};
+
+static const struct iio_info max14001_info = {
+ .read_raw = max14001_read_raw,
+ .debugfs_reg_access = max14001_debugfs_reg_access,
+};
+
+static const struct iio_chan_spec max14001_channel[] = {
+ {
+ .type = IIO_VOLTAGE,
+ .indexed = 1,
+ .channel = 0,
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
+ BIT(IIO_CHAN_INFO_SCALE),
+ },
+};
+
+static int max14001_probe(struct spi_device *spi)
+{
+ struct device *dev = &spi->dev;
+ struct iio_dev *indio_dev;
+ struct max14001_state *st;
+ int ret;
+ bool use_ext_vrefin = false;
+
+ indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
+ if (!indio_dev)
+ return -ENOMEM;
+
+ st = iio_priv(indio_dev);
+ st->spi = spi;
+ st->spi_hw_has_lsb_first = spi->mode & SPI_LSB_FIRST;
+ st->chip_info = spi_get_device_match_data(spi);
+ if (!st->chip_info)
+ return -EINVAL;
+
+ indio_dev->name = st->chip_info->name;
+ indio_dev->info = &max14001_info;
+ indio_dev->channels = max14001_channel;
+ indio_dev->num_channels = ARRAY_SIZE(max14001_channel);
+ indio_dev->modes = INDIO_DIRECT_MODE;
+
+ st->regmap = devm_regmap_init(dev, NULL, st, &max14001_regmap_config);
+ if (IS_ERR(st->regmap))
+ return dev_err_probe(dev, PTR_ERR(st->regmap), "Failed to initialize regmap\n");
+
+ ret = devm_regulator_get_enable(dev, "vdd");
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to enable Vdd supply\n");
+
+ ret = devm_regulator_get_enable(dev, "vddl");
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to enable Vddl supply\n");
+
+ ret = devm_regulator_get_enable_read_voltage(dev, "refin");
+ if (ret < 0 && ret != -ENODEV)
+ return dev_err_probe(dev, ret, "Failed to get REFIN voltage\n");
+
+ if (ret == -ENODEV)
+ ret = 1250000;
+ else
+ use_ext_vrefin = true;
+ st->vref_mV = ret / (MICRO / MILLI);
+
+ if (use_ext_vrefin) {
+ /*
+ * Configure the MAX14001/MAX14002 to use an external voltage
+ * reference source by setting the bit 5 of the configuration register.
+ */
+ ret = regmap_set_bits(st->regmap, MAX14001_REG_CFG,
+ MAX14001_REG_CFG_BIT_EXRF);
+ if (ret)
+ return dev_err_probe(dev, ret,
+ "Failed to set External REFIN in Configuration Register\n");
+ }
+
+ ret = max14001_disable_mv_fault(st);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to disable MV Fault\n");
+
+ return devm_iio_device_register(dev, indio_dev);
+}
+
+static struct max14001_chip_info max14001_chip_info = {
+ .name = "max14001",
+};
+
+static struct max14001_chip_info max14002_chip_info = {
+ .name = "max14002",
+};
+
+static const struct spi_device_id max14001_id_table[] = {
+ { "max14001", (kernel_ulong_t)&max14001_chip_info },
+ { "max14002", (kernel_ulong_t)&max14002_chip_info },
+ { }
+};
+
+static const struct of_device_id max14001_of_match[] = {
+ { .compatible = "adi,max14001", .data = &max14001_chip_info },
+ { .compatible = "adi,max14002", .data = &max14002_chip_info },
+ { }
+};
+MODULE_DEVICE_TABLE(of, max14001_of_match);
+
+static struct spi_driver max14001_driver = {
+ .driver = {
+ .name = "max14001",
+ .of_match_table = max14001_of_match,
+ },
+ .probe = max14001_probe,
+ .id_table = max14001_id_table,
+};
+module_spi_driver(max14001_driver);
+
+MODULE_AUTHOR("Kim Seer Paller <kimseer.paller@analog.com>");
+MODULE_AUTHOR("Marilene Andrade Garcia <marilene.agarcia@gmail.com>");
+MODULE_DESCRIPTION("Analog Devices MAX14001/MAX14002 ADCs driver");
+MODULE_LICENSE("GPL");
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v13 1/2] dt-bindings: iio: adc: add max14001
2025-10-15 5:11 [PATCH v13 1/2] dt-bindings: iio: adc: add max14001 Marilene Andrade Garcia
2025-10-15 5:12 ` [PATCH v13 2/2] iio: adc: max14001: New driver Marilene Andrade Garcia
@ 2025-10-17 1:38 ` Marcelo Schmitt
2025-10-17 2:36 ` Marilene Andrade Garcia
1 sibling, 1 reply; 8+ messages in thread
From: Marcelo Schmitt @ 2025-10-17 1:38 UTC (permalink / raw)
To: Marilene Andrade Garcia
Cc: linux-iio, linux-kernel, devicetree, Kim Seer Paller,
Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Marcelo Schmitt,
Ceclan Dumitru, Jonathan Santos, Dragos Bogdan
On 10/15, Marilene Andrade Garcia wrote:
> 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.
>
> They share the same features, but in the MAX14001 the inrush trigger
> threshold, current magnitude, and current duration are all programmable,
> whereas in the MAX14002 these parameters are fixed.
>
> Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
> Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
> Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
> ---
Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Since you've dropped the ADC node label, I think you could have picked up
Conor's review tag from v12.
If nothing else comes up, you won't need to send a v14 as Jonathan will probably
pick the latest tags when applying the patches.
Cheers,
Marcelo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v13 2/2] iio: adc: max14001: New driver
2025-10-15 5:12 ` [PATCH v13 2/2] iio: adc: max14001: New driver Marilene Andrade Garcia
@ 2025-10-17 2:09 ` Marcelo Schmitt
2025-10-18 19:30 ` Jonathan Cameron
0 siblings, 1 reply; 8+ messages in thread
From: Marcelo Schmitt @ 2025-10-17 2:09 UTC (permalink / raw)
To: Marilene Andrade Garcia
Cc: linux-iio, linux-kernel, devicetree, Kim Seer Paller,
Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Marcelo Schmitt,
Ceclan Dumitru, Jonathan Santos, Dragos Bogdan
On 10/15, Marilene Andrade Garcia wrote:
> The MAX14001/MAX14002 is configurable, isolated 10-bit ADCs for multi-range
> binary inputs. In addition to 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.
>
> MAX14001/MAX14002 features implemented so far:
> - Raw ADC reading.
> - MV fault disable.
> - Selection of external or internal ADC voltage reference, depending on
> whether it is declared in the device tree.
>
> Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
> Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
> Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
> Tested-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
> ---
Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Hmm, I don't know why, but I would have given a different order to the tags
Reviewed-by: M. S. <...> # new tag
Tested-by: M. S. <...>
Co-developed-by: K. S. P. <...>
Signed-off-by: K. S. P. <...>
Signed-off-by: M. A. G. <...>
Swapping tag lines will probably not be a reason for a v14, though.
Cheers,
Marcelo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v13 1/2] dt-bindings: iio: adc: add max14001
2025-10-17 1:38 ` [PATCH v13 1/2] dt-bindings: iio: adc: add max14001 Marcelo Schmitt
@ 2025-10-17 2:36 ` Marilene Andrade Garcia
2025-10-19 18:02 ` Marilene Andrade Garcia
0 siblings, 1 reply; 8+ messages in thread
From: Marilene Andrade Garcia @ 2025-10-17 2:36 UTC (permalink / raw)
To: Marcelo Schmitt
Cc: linux-iio, linux-kernel, devicetree, Kim Seer Paller,
Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Marcelo Schmitt,
Ceclan Dumitru, Jonathan Santos, Dragos Bogdan
On 16/10/2025 22:38, Marcelo Schmitt wrote:
> On 10/15, Marilene Andrade Garcia wrote:
>> 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.
>>
>> They share the same features, but in the MAX14001 the inrush trigger
>> threshold, current magnitude, and current duration are all programmable,
>> whereas in the MAX14002 these parameters are fixed.
>>
>> Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
>> Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
>> Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
>> ---
> Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
>
> Since you've dropped the ADC node label, I think you could have picked up
> Conor's review tag from v12.
>
> If nothing else comes up, you won't need to send a v14 as Jonathan will probably
> pick the latest tags when applying the patches.
>
> Cheers,
> Marcelo
I agree, I forgot to pick up Conor's review tag. Sorry about that.
Okay, thank you.
Best regards,
Marilene
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v13 2/2] iio: adc: max14001: New driver
2025-10-17 2:09 ` Marcelo Schmitt
@ 2025-10-18 19:30 ` Jonathan Cameron
0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2025-10-18 19:30 UTC (permalink / raw)
To: Marcelo Schmitt
Cc: Marilene Andrade Garcia, linux-iio, linux-kernel, devicetree,
Kim Seer Paller, Lars-Peter Clausen, Michael Hennerich,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Marcelo Schmitt,
Ceclan Dumitru, Jonathan Santos, Dragos Bogdan
On Thu, 16 Oct 2025 23:09:31 -0300
Marcelo Schmitt <marcelo.schmitt1@gmail.com> wrote:
> On 10/15, Marilene Andrade Garcia wrote:
> > The MAX14001/MAX14002 is configurable, isolated 10-bit ADCs for multi-range
> > binary inputs. In addition to 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.
> >
> > MAX14001/MAX14002 features implemented so far:
> > - Raw ADC reading.
> > - MV fault disable.
> > - Selection of external or internal ADC voltage reference, depending on
> > whether it is declared in the device tree.
> >
> > Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
> > Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
> > Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
> > Tested-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
> > ---
> Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
>
> Hmm, I don't know why, but I would have given a different order to the tags
> Reviewed-by: M. S. <...> # new tag
> Tested-by: M. S. <...>
> Co-developed-by: K. S. P. <...>
> Signed-off-by: K. S. P. <...>
> Signed-off-by: M. A. G. <...>
>
> Swapping tag lines will probably not be a reason for a v14, though.
There have been many debates on this but no clear rules wrt to whether
review / testing tags should go earlier (on basis the sign off occurs
after them if they were on a previous version) or just put them all at the end.
Meh. All the right info is here so I'll just leave it be.
Series applied to the togreg branch of iio.git. Initially pushed out as
testing to let the autobuilders play with it.
Thanks,
Jonathan
>
> Cheers,
> Marcelo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v13 1/2] dt-bindings: iio: adc: add max14001
2025-10-17 2:36 ` Marilene Andrade Garcia
@ 2025-10-19 18:02 ` Marilene Andrade Garcia
2025-10-20 17:53 ` Jonathan Cameron
0 siblings, 1 reply; 8+ messages in thread
From: Marilene Andrade Garcia @ 2025-10-19 18:02 UTC (permalink / raw)
To: Jonathan Cameron
Cc: linux-iio, linux-kernel, devicetree, Kim Seer Paller,
Lars-Peter Clausen, Michael Hennerich, David Lechner,
Nuno Sá, Andy Shevchenko, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Marcelo Schmitt, Ceclan Dumitru, Jonathan Santos,
Dragos Bogdan, Marcelo Schmitt
>>> Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
>>> Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
>>> Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
>>> ---
>> Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
>>
>> Since you've dropped the ADC node label, I think you could have picked up
>> Conor's review tag from v12.
>>
>> If nothing else comes up, you won't need to send a v14 as Jonathan
>> will probably
>> pick the latest tags when applying the patches.
>>
>> Cheers,
>> Marcelo
>
> I agree, I forgot to pick up Conor's review tag. Sorry about that.
> Okay, thank you.
>
> Best regards,
> Marilene
Hello maintainers,
Just checking, is there any other action I should take on my end
regarding this patch series?
Jonathan, I forgot to add the following tag in v13, so I was wondering
if you could please include it when applying the patch.
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Thank you so much for all your assistance.
Best regards,
Marilene
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v13 1/2] dt-bindings: iio: adc: add max14001
2025-10-19 18:02 ` Marilene Andrade Garcia
@ 2025-10-20 17:53 ` Jonathan Cameron
0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2025-10-20 17:53 UTC (permalink / raw)
To: Marilene Andrade Garcia
Cc: Jonathan Cameron, linux-iio, linux-kernel, devicetree,
Kim Seer Paller, Lars-Peter Clausen, Michael Hennerich,
David Lechner, Nuno Sá, Andy Shevchenko, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Marcelo Schmitt,
Ceclan Dumitru, Jonathan Santos, Dragos Bogdan, Marcelo Schmitt
On Sun, 19 Oct 2025 15:02:54 -0300
Marilene Andrade Garcia <marilene.agarcia@gmail.com> wrote:
> >>> Co-developed-by: Kim Seer Paller <kimseer.paller@analog.com>
> >>> Signed-off-by: Kim Seer Paller <kimseer.paller@analog.com>
> >>> Signed-off-by: Marilene Andrade Garcia <marilene.agarcia@gmail.com>
> >>> ---
> >> Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
> >>
> >> Since you've dropped the ADC node label, I think you could have picked up
> >> Conor's review tag from v12.
> >>
> >> If nothing else comes up, you won't need to send a v14 as Jonathan
> >> will probably
> >> pick the latest tags when applying the patches.
> >>
> >> Cheers,
> >> Marcelo
> >
> > I agree, I forgot to pick up Conor's review tag. Sorry about that.
> > Okay, thank you.
> >
> > Best regards,
> > Marilene
>
>
> Hello maintainers,
>
> Just checking, is there any other action I should take on my end
> regarding this patch series?
> Jonathan, I forgot to add the following tag in v13, so I was wondering
> if you could please include it when applying the patch.
> Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
I replied to patch 2 to say I've picked the whole series up.
Fixed this up and pushed out. So you should see the result on git.kernel.org iio.git togreg
J
>
> Thank you so much for all your assistance.
> Best regards,
> Marilene
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-10-20 17:53 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-15 5:11 [PATCH v13 1/2] dt-bindings: iio: adc: add max14001 Marilene Andrade Garcia
2025-10-15 5:12 ` [PATCH v13 2/2] iio: adc: max14001: New driver Marilene Andrade Garcia
2025-10-17 2:09 ` Marcelo Schmitt
2025-10-18 19:30 ` Jonathan Cameron
2025-10-17 1:38 ` [PATCH v13 1/2] dt-bindings: iio: adc: add max14001 Marcelo Schmitt
2025-10-17 2:36 ` Marilene Andrade Garcia
2025-10-19 18:02 ` Marilene Andrade Garcia
2025-10-20 17:53 ` Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).