Skip to contentSkip to conversation

Add maxim max34408/34409 ADC driver and yaml

PATCH Superseded Ivan Mikhaylov 6 participants 15 messages Oct 7, 2023 – Oct 13, 2023

Subsystems (2)

v5 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

v5 cover Add maxim max34408/34409 ADC driver and yaml

Add Maxim max34408/34409 ADC driver and yaml for it. Until now it supports only current monitioring function without overcurrent threshold/delay, shutdown delay configuration, alert interrupt.

Changes from v1:
- minor changes from Rob's comments for yaml
- add ena, shtdn and make 4 inputs for R sense from Jonathan's comments for yaml
- add _REG suffix and make prefix for bitmasks and statuses
- add SCALE/OFFSET instead of AVG/PROCESSED from Jonathan and Lars-Peter comments
- add chip data from Jonathan and Lars-Peter comments
- minor changes from Lars-Peter and Jonathan comments for driver

Changes from v2:
- add channels into hardware description into yaml
- add rsense property per channel
- rename pins for shtdn and ena pins
- make one array for input_rsense values

Changes from v3:
- change *_34408_OCT3 and 4 to *_34409_OCT3 and 4
- change of_property_read_u32 to fwnode family calls
- add i2c dev table
- change of_match_device to i2c_of_match_device
- change match->data to i2c_get_match_data

Changes from v4:
- minor changes in yaml

Ivan Mikhaylov (2):
dt-bindings: adc: provide max34408/9 device tree binding document
iio: adc: Add driver support for MAX34408/9

 .../bindings/iio/adc/maxim,max34408.yaml      | 141 +++++++++
 drivers/iio/adc/Kconfig                       |  11 +
 drivers/iio/adc/Makefile                      |   1 +
 drivers/iio/adc/max34408.c                    | 278 ++++++++++++++++++
 4 files changed, 431 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml
 create mode 100644 drivers/iio/adc/max34408.c
Signature · 1 line
2.42.0
#1 lore raw

PATCH v5 1/2 dt-bindings: adc: provide max34408/9 device tree binding document

The hardware binding for i2c current monitoring device with overcurrent control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141 ++++++++++++++++++
 1 file changed, 141 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +141 -0
new file mode 100644
index 000000000000..9749f1fd1802
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Two- and four-channel current monitors with overcurrent control
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current monitors that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence through
+  two or four channels and collect the current-sense samples and average them
+  to reduce the effect of impulse noise. The raw ADC samples are compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an immediate
+  indication to shut down any necessary external circuitry.
+
+  Specifications about the devices can be found at:
+  https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output transitions to high impedance
+      when any of the digital comparator thresholds are exceeded as long as the ENA
+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:
+    description:
+      SHTDN Enable Input. CMOS digital input. Connect to GND to clear the latch and
+      unconditionally deassert (force low) the SHTDN output and reset the shutdown
+      delay. Connect to VDD to enable normal latch operation of the SHTDN output.
+    maxItems: 1
+
+  vdd-supply: true
+
+patternProperties:
+  "^channel@[0-3]$":
+    $ref: adc.yaml
+    type: object
+    description:
+      Represents the internal channels of the ADC.
+
+    properties:
+      reg:
+        items:
+          minimum: 0
+          maximum: 3
+
+      maxim,rsense-val-micro-ohms:
+        description:
+          Adjust the Rsense value to monitor higher or lower current levels for
+          input.
+        enum: [250, 500, 1000, 5000, 10000, 50000, 100000, 200000, 500000]
+        default: 1000
+
+    required:
+      - reg
+      - maxim,rsense-val-micro-ohms
+
+    unevaluatedProperties: false
+
+required:
+  - compatible
+  - reg
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: maxim,max34408
+    then:
+      patternProperties:
+        "^channel@[2-3]$": false
+        "^channel@[0-1]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 1
+    else:
+      patternProperties:
+        "^channel@[0-3]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 3
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        adc@1e {
+              compatible = "maxim,max34409";
+              reg = <0x1e>;
+              powerdown-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+              shtdn-enable-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+
+              #address-cells = <1>;
+              #size-cells = <0>;
+
+              channel@0 {
+                  reg = <0x0>;
+                  maxim,rsense-val-micro-ohms = <5000>;
+              };
+
+              channel@1 {
+                  reg = <0x1>;
+                  maxim,rsense-val-micro-ohms = <10000>;
+             };
+        };
+    };
Signature · 1 line
2.42.0
maintainer
#2 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 15 lines · Ivan Mikhaylov

The hardware binding for i2c current monitoring device with overcurrent control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141 ++++++++++++++++++
 1 file changed, 141 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +0 -0
new file mode 100644
index 000000000000..9749f1fd1802

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml line 7

Quoted 7 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +7 -0
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Two- and four-channel current monitors with overcurrent control

Maxim MAX34408/MAX34409 current monitors with overcurrent control

Quoted 54 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +54 -0
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current monitors that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence through
+  two or four channels and collect the current-sense samples and average them
+  to reduce the effect of impulse noise. The raw ADC samples are compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an immediate
+  indication to shut down any necessary external circuitry.
+
+  Specifications about the devices can be found at:
+  https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output transitions to high impedance
+      when any of the digital comparator thresholds are exceeded as long as the ENA
+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:
+    description:
+      SHTDN Enable Input. CMOS digital input. Connect to GND to clear the latch and
+      unconditionally deassert (force low) the SHTDN output and reset the shutdown
+      delay. Connect to VDD to enable normal latch operation of the SHTDN output.
+    maxItems: 1
+
+  vdd-supply: true
+
+patternProperties:
+  "^channel@[0-3]$":

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml line 71

Quoted 10 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +10 -0
+    $ref: adc.yaml
+    type: object
+    description:
+      Represents the internal channels of the ADC.
+
+    properties:
+      reg:
+        items:
+          minimum: 0
+          maximum: 3

This allows any number of 'reg' entries. You need this instead:

items:
- minimum: 0
maximum: 3

Quoted 21 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +21 -0
+
+      maxim,rsense-val-micro-ohms:
+        description:
+          Adjust the Rsense value to monitor higher or lower current levels for
+          input.
+        enum: [250, 500, 1000, 5000, 10000, 50000, 100000, 200000, 500000]
+        default: 1000
+
+    required:
+      - reg
+      - maxim,rsense-val-micro-ohms
+
+    unevaluatedProperties: false
+
+required:
+  - compatible
+  - reg
+
+allOf:
+  - if:
+      properties:

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml line 102

Quoted 10 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +10 -0
+        compatible:
+          contains:
+            const: maxim,max34408
+    then:
+      patternProperties:
+        "^channel@[2-3]$": false
+        "^channel@[0-1]$":
+          properties:
+            reg:
+              minimum: 0

0 is already the minimum

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml line 109

Quoted 7 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +7 -0
+              maximum: 1
+    else:
+      patternProperties:
+        "^channel@[0-3]$":
+          properties:
+            reg:
+              minimum: 0

ditto

Quoted 35 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +32 -0
+              maximum: 3
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        adc@1e {
+              compatible = "maxim,max34409";
+              reg = <0x1e>;
+              powerdown-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+              shtdn-enable-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+
+              #address-cells = <1>;
+              #size-cells = <0>;
+
+              channel@0 {
+                  reg = <0x0>;
+                  maxim,rsense-val-micro-ohms = <5000>;
+              };
+
+              channel@1 {
+                  reg = <0x1>;
+                  maxim,rsense-val-micro-ohms = <10000>;
+             };
+        };
+    };
Signature · 1 line
2.42.0
maintainer
#3 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

In reply to Ivan Mikhaylov
Quoted 56 lines · On Sun, 8 Oct 2023 02:48:37 +0300 Ivan Mikhaylov <[email protected]> wrote:

The hardware binding for i2c current monitoring device with overcurrent control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141 ++++++++++++++++++
 1 file changed, 141 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +41 -0
new file mode 100644
index 000000000000..9749f1fd1802
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Two- and four-channel current monitors with overcurrent control
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current monitors that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence through
+  two or four channels and collect the current-sense samples and average them
+  to reduce the effect of impulse noise. The raw ADC samples are compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an immediate
+  indication to shut down any necessary external circuitry.
+
+  Specifications about the devices can be found at:
+  https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml line 51

Quoted 10 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +10 -0
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output transitions to high impedance
+      when any of the digital comparator thresholds are exceeded as long as the ENA
+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:

I guess the review crossed with you sending v5. There is some feedback on v4 you need to address here.

Quoted 90 lines
Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +90 -0
+    description:
+      SHTDN Enable Input. CMOS digital input. Connect to GND to clear the latch and
+      unconditionally deassert (force low) the SHTDN output and reset the shutdown
+      delay. Connect to VDD to enable normal latch operation of the SHTDN output.
+    maxItems: 1
+
+  vdd-supply: true
+
+patternProperties:
+  "^channel@[0-3]$":
+    $ref: adc.yaml
+    type: object
+    description:
+      Represents the internal channels of the ADC.
+
+    properties:
+      reg:
+        items:
+          minimum: 0
+          maximum: 3
+
+      maxim,rsense-val-micro-ohms:
+        description:
+          Adjust the Rsense value to monitor higher or lower current levels for
+          input.
+        enum: [250, 500, 1000, 5000, 10000, 50000, 100000, 200000, 500000]
+        default: 1000
+
+    required:
+      - reg
+      - maxim,rsense-val-micro-ohms
+
+    unevaluatedProperties: false
+
+required:
+  - compatible
+  - reg
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: maxim,max34408
+    then:
+      patternProperties:
+        "^channel@[2-3]$": false
+        "^channel@[0-1]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 1
+    else:
+      patternProperties:
+        "^channel@[0-3]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 3
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        adc@1e {
+              compatible = "maxim,max34409";
+              reg = <0x1e>;
+              powerdown-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+              shtdn-enable-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+
+              #address-cells = <1>;
+              #size-cells = <0>;
+
+              channel@0 {
+                  reg = <0x0>;
+                  maxim,rsense-val-micro-ohms = <5000>;
+              };
+
+              channel@1 {
+                  reg = <0x1>;
+                  maxim,rsense-val-micro-ohms = <10000>;
+             };
+        };
+    };
#4 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 82 lines · Jonathan Cameron
Quoted 79 lines · On Sun,  8 Oct 2023 02:48:37 +0300 Ivan Mikhaylov <[email protected]> wrote:

The hardware binding for i2c current monitoring device with overcurrent
control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141
++++++++++++++++++

 1 file changed, 141 insertions(+)

 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

diff --git a/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file mode 100644
index 000000000000..9749f1fd1802

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +7 -0
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Two- and four-channel current monitors with overcurrent

control

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +6 -0
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current monitors

that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence through
+  two or four channels and collect the current-sense samples and average them
+  to reduce the effect of impulse noise. The raw ADC samples are compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an immediate
+  indication to shut down any necessary external circuitry. +
+  Specifications about the devices can be found at:
+
https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +22 -0
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output transitions

to high impedance
+      when any of the digital comparator thresholds are exceeded as long as the ENA

Quoted 8 lines
Quoted 4 lines

+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other suggestions about naming of this one?

Thanks.

Quoted 97 lines
Quoted 96 lines

+    description:
+      SHTDN Enable Input. CMOS digital input. Connect to GND to clear the latch and
+      unconditionally deassert (force low) the SHTDN output and reset the shutdown
+      delay. Connect to VDD to enable normal latch operation of the SHTDN output.
+    maxItems: 1

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +19 -0
+
+  vdd-supply: true
+
+patternProperties:
+  "^channel@[0-3]$":
+    $ref: adc.yaml
+    type: object
+    description:
+      Represents the internal channels of the ADC.
+
+    properties:
+      reg:
+        items:
+          minimum: 0
+          maximum: 3
+
+      maxim,rsense-val-micro-ohms:
+        description:
+          Adjust the Rsense value to monitor higher or lower

current levels for
+          input.
+        enum: [250, 500, 1000, 5000, 10000, 50000, 100000, 200000, 500000]
+        default: 1000

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +63 -0
+
+    required:
+      - reg
+      - maxim,rsense-val-micro-ohms
+
+    unevaluatedProperties: false
+
+required:
+  - compatible
+  - reg
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: maxim,max34408
+    then:
+      patternProperties:
+        "^channel@[2-3]$": false
+        "^channel@[0-1]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 1
+    else:
+      patternProperties:
+        "^channel@[0-3]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 3
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        adc@1e {
+              compatible = "maxim,max34409";
+              reg = <0x1e>;
+              powerdown-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+              shtdn-enable-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+
+              #address-cells = <1>;
+              #size-cells = <0>;
+
+              channel@0 {
+                  reg = <0x0>;
+                  maxim,rsense-val-micro-ohms = <5000>;
+              };
+
+              channel@1 {
+                  reg = <0x1>;
+                  maxim,rsense-val-micro-ohms = <10000>;
+             };
+        };
+    };
maintainer
#5 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 92 lines · On Tue, 10 Oct 2023 23:22:48 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 82 lines · Jonathan Cameron
Quoted 79 lines · On Sun,  8 Oct 2023 02:48:37 +0300 Ivan Mikhaylov <[email protected]> wrote:

The hardware binding for i2c current monitoring device with overcurrent
control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141
++++++++++++++++++

 1 file changed, 141 insertions(+)

 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

diff --git a/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file mode 100644
index 000000000000..9749f1fd1802

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +7 -0
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Two- and four-channel current monitors with overcurrent

control

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +6 -0
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current monitors

that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence through
+  two or four channels and collect the current-sense samples and average them
+  to reduce the effect of impulse noise. The raw ADC samples are compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an immediate
+  indication to shut down any necessary external circuitry. +
+  Specifications about the devices can be found at:
+
https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +22 -0
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output transitions

to high impedance
+      when any of the digital comparator thresholds are exceeded as long as the ENA

Quoted 8 lines
Quoted 4 lines

+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Quoted 7 lines

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other suggestions about naming of this one?

Thanks.

shutdown-gpios and make the sense (active high / low) such that setting it results in teh device being shut down.
Or treat it as an enable and enable-gpios

Something that indicates both shutdown and enable is confusing ;)

Jonathan

Quoted 99 lines
Quoted 98 lines
Quoted 97 lines

+    description:
+      SHTDN Enable Input. CMOS digital input. Connect to GND to clear the latch and
+      unconditionally deassert (force low) the SHTDN output and reset the shutdown
+      delay. Connect to VDD to enable normal latch operation of the SHTDN output.
+    maxItems: 1

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +19 -0
+
+  vdd-supply: true
+
+patternProperties:
+  "^channel@[0-3]$":
+    $ref: adc.yaml
+    type: object
+    description:
+      Represents the internal channels of the ADC.
+
+    properties:
+      reg:
+        items:
+          minimum: 0
+          maximum: 3
+
+      maxim,rsense-val-micro-ohms:
+        description:
+          Adjust the Rsense value to monitor higher or lower

current levels for
+          input.
+        enum: [250, 500, 1000, 5000, 10000, 50000, 100000, 200000, 500000]
+        default: 1000

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +63 -0
+
+    required:
+      - reg
+      - maxim,rsense-val-micro-ohms
+
+    unevaluatedProperties: false
+
+required:
+  - compatible
+  - reg
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: maxim,max34408
+    then:
+      patternProperties:
+        "^channel@[2-3]$": false
+        "^channel@[0-1]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 1
+    else:
+      patternProperties:
+        "^channel@[0-3]$":
+          properties:
+            reg:
+              minimum: 0
+              maximum: 3
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        adc@1e {
+              compatible = "maxim,max34409";
+              reg = <0x1e>;
+              powerdown-gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+              shtdn-enable-gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
+
+              #address-cells = <1>;
+              #size-cells = <0>;
+
+              channel@0 {
+                  reg = <0x0>;
+                  maxim,rsense-val-micro-ohms = <5000>;
+              };
+
+              channel@1 {
+                  reg = <0x1>;
+                  maxim,rsense-val-micro-ohms = <10000>;
+             };
+        };
+    };  
#6 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 113 lines · Jonathan Cameron
Quoted 101 lines · On Tue, 10 Oct 2023 23:22:48 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 91 lines · Jonathan Cameron

On Sun,  8 Oct 2023 02:48:37 +0300
Ivan Mikhaylov <[email protected]> wrote:

Quoted 88 lines

The hardware binding for i2c current monitoring device with overcurrent
control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141
++++++++++++++++++

 1 file changed, 141 insertions(+)

 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

diff --git a/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file mode 100644
index 000000000000..9749f1fd1802
--- /dev/null
+++
b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +4 -0
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id:

http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#

(quoted diff) +2 -0
+
+title: Two- and four-channel current monitors with overcurrent

control

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +6 -0
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current

monitors
that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence
through
+  two or four channels and collect the current-sense samples and
average them
+  to reduce the effect of impulse noise. The raw ADC samples are
compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an
immediate
+  indication to shut down any necessary external circuitry. +
+  Specifications about the devices can be found at:
+
https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +22 -0
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output

transitions
to high impedance
+      when any of the digital comparator thresholds are exceeded
as long as the ENA

Quoted 8 lines
Quoted 4 lines

+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Quoted 8 lines

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other
suggestions about naming of this one?

Thanks.

Quoted 8 lines

shutdown-gpios and make the sense (active high / low) such that setting
it results in teh device being shut down.
Or treat it as an enable and enable-gpios

Something that indicates both shutdown and enable is confusing ;)

Jonathan

Jonathan, then I make these changes:

powerdown-gpios: -> output-enable:
shtdn-enable-gpios: -> enable-gpios:

Is it ok?

Thanks.

#7 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 119 lines · On Thu, 12 Oct 2023 19:27:33 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 118 lines · Jonathan Cameron
Quoted 101 lines · On Tue, 10 Oct 2023 23:22:48 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 91 lines · Jonathan Cameron

On Sun,  8 Oct 2023 02:48:37 +0300
Ivan Mikhaylov <[email protected]> wrote:

Quoted 88 lines

The hardware binding for i2c current monitoring device with overcurrent
control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141
++++++++++++++++++

 1 file changed, 141 insertions(+)

 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

diff --git a/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file mode 100644
index 000000000000..9749f1fd1802
--- /dev/null
+++
b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +4 -0
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id:

http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#

(quoted diff) +2 -0
+
+title: Two- and four-channel current monitors with overcurrent

control

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +6 -0
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current

monitors
that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence
through
+  two or four channels and collect the current-sense samples and
average them
+  to reduce the effect of impulse noise. The raw ADC samples are
compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an
immediate
+  indication to shut down any necessary external circuitry. +
+  Specifications about the devices can be found at:
+
https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +22 -0
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output

transitions
to high impedance
+      when any of the digital comparator thresholds are exceeded
as long as the ENA

Quoted 8 lines
Quoted 4 lines

+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Quoted 8 lines

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other
suggestions about naming of this one?

Thanks.

shutdown-gpios and make the sense (active high / low) such that setting
it results in teh device being shut down.
Or treat it as an enable and enable-gpios

Quoted 8 lines
Quoted 3 lines

Something that indicates both shutdown and enable is confusing ;)

Jonathan

Jonathan, then I make these changes:

powerdown-gpios: -> output-enable:

Needs to retain the gpios bit as we want the standard gpio stuff to pick them up. I'm not that keen on output-enable-gpios though. The activity here is very much 'shutdown because of error or not enabled' I think. So perhaps we flip the sense and document that it needs to be active low?

Quoted 3 lines

shtdn-enable-gpios: -> enable-gpios:

Is it ok?

Conor, Rob, Krzysztof - you probably have a better insight into this than I do.

Thanks,

Jonathan

Quoted 3 lines

Thanks.

#8 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 135 lines · Jonathan Cameron
Quoted 119 lines · On Thu, 12 Oct 2023 19:27:33 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 118 lines · Jonathan Cameron
Quoted 101 lines · On Tue, 10 Oct 2023 23:22:48 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 91 lines · Jonathan Cameron

On Sun,  8 Oct 2023 02:48:37 +0300
Ivan Mikhaylov <[email protected]> wrote:

Quoted 88 lines

The hardware binding for i2c current monitoring device with overcurrent
control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141
++++++++++++++++++

 1 file changed, 141 insertions(+)

 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

diff --git a/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file mode 100644
index 000000000000..9749f1fd1802
--- /dev/null
+++
b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +4 -0
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id:

http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#

(quoted diff) +2 -0
+
+title: Two- and four-channel current monitors with overcurrent

control

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +6 -0
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current

monitors
that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence
through
+  two or four channels and collect the current-sense samples and
average them
+  to reduce the effect of impulse noise. The raw ADC samples are
compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an
immediate
+  indication to shut down any necessary external circuitry. +
+  Specifications about the devices can be found at:
+
https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf

Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file +22 -0
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output

transitions
to high impedance
+      when any of the digital comparator thresholds are exceeded
as long as the ENA

Quoted 8 lines
Quoted 4 lines

+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Quoted 8 lines

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other
suggestions about naming of this one?

Thanks.

shutdown-gpios and make the sense (active high / low) such that setting
it results in teh device being shut down.
Or treat it as an enable and enable-gpios

Quoted 8 lines
Quoted 3 lines

Something that indicates both shutdown and enable is confusing ;)

Jonathan

Jonathan, then I make these changes:

powerdown-gpios: -> output-enable:

Needs to retain the gpios bit as we want the standard gpio stuff to pick them up. I'm not that keen on output-enable-gpios though. The activity here is very much 'shutdown because of error or not enabled' I think. So perhaps we flip the sense and document that it needs to be active low?

Quoted 7 lines
Quoted 3 lines

shtdn-enable-gpios: -> enable-gpios:

Is it ok?

Conor, Rob, Krzysztof - you probably have a better insight into this than I do.

"enable-gpios" are for turning on a specific feature, not powering on/off entire device. For example to enable regulator output.

"powerdown-gpios" are for turning device on/off.

I don't know what do you have in your device.

Best regards,
Krzysztof

#9 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 144 lines · On Fri, 13 Oct 2023 10:35:49 +0200 Krzysztof Kozlowski…
Quoted 135 lines · Jonathan Cameron
Quoted 119 lines · On Thu, 12 Oct 2023 19:27:33 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 118 lines · Jonathan Cameron
Quoted 101 lines · On Tue, 10 Oct 2023 23:22:48 +0300 Ivan Mikhaylov <[email protected]> wrote:
Quoted 91 lines · Jonathan Cameron

On Sun,  8 Oct 2023 02:48:37 +0300
Ivan Mikhaylov <[email protected]> wrote:

Quoted 88 lines

The hardware binding for i2c current monitoring device with overcurrent
control.

---
 .../bindings/iio/adc/maxim,max34408.yaml      | 141
++++++++++++++++++

 1 file changed, 141 insertions(+)

 create mode 100644 Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

diff --git a/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml new file mode 100644
index 000000000000..9749f1fd1802
--- /dev/null
+++
b/Documentation/devicetree/bindings/iio/adc/maxim,max34408.yaml

(quoted diff) +4 -0
@@ -0,0 +1,141 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id:

http://devicetree.org/schemas/iio/adc/maxim,max34408.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#

(quoted diff) +2 -0
+
+title: Two- and four-channel current monitors with overcurrent

control

(quoted diff) +6 -0
+
+maintainers:
+  - Ivan Mikhaylov <[email protected]>
+
+description: |
+  The MAX34408/MAX34409 are two- and four-channel current

monitors
that are
+  configured and monitored with a standard I2C/SMBus serial interface. Each
+  unidirectional current sensor offers precision high-side operation with a
+  low full-scale sense voltage. The devices automatically sequence
through
+  two or four channels and collect the current-sense samples and
average them
+  to reduce the effect of impulse noise. The raw ADC samples are
compared to
+  user-programmable digital thresholds to indicate overcurrent conditions.
+  Overcurrent conditions trigger a hardware output to provide an
immediate
+  indication to shut down any necessary external circuitry. +
+  Specifications about the devices can be found at:
+
https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf

(quoted diff) +22 -0
+
+properties:
+  compatible:
+    enum:
+      - maxim,max34408
+      - maxim,max34409
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  powerdown-gpios:
+    description:
+      Shutdown Output. Open-drain output. This output

transitions
to high impedance
+      when any of the digital comparator thresholds are exceeded
as long as the ENA

Quoted 8 lines
Quoted 4 lines

+      pin is high.
+    maxItems: 1
+
+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Quoted 8 lines

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other
suggestions about naming of this one?

Thanks.

shutdown-gpios and make the sense (active high / low) such that setting
it results in teh device being shut down.
Or treat it as an enable and enable-gpios

Quoted 8 lines
Quoted 3 lines

Something that indicates both shutdown and enable is confusing ;)

Jonathan

Jonathan, then I make these changes:

powerdown-gpios: -> output-enable:

Needs to retain the gpios bit as we want the standard gpio stuff to pick them up. I'm not that keen on output-enable-gpios though. The activity here is very much 'shutdown because of error or not enabled' I think. So perhaps we flip the sense and document that it needs to be active low?

Quoted 7 lines
Quoted 3 lines

shtdn-enable-gpios: -> enable-gpios:

Is it ok?

Conor, Rob, Krzysztof - you probably have a better insight into this than I do.

Quoted 6 lines

"enable-gpios" are for turning on a specific feature, not powering on/off entire device. For example to enable regulator output.

"powerdown-gpios" are for turning device on/off.

I don't know what do you have in your device.

Ok. Sounds like that what is enable-gpios above should be shutdown-gpios.

The other case is a device output indicating whether the device is shutdown. That can happen because it was told to do so (via the other gpio), or because it is in an error state. What's a good naming convention for that?

Thanks,

Jonathan

Quoted 5 lines

Best regards,
Krzysztof

#10 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 41 lines · Jonathan Cameron
Quoted 41 lines
Quoted 40 lines
Quoted 20 lines
Quoted 20 lines
Quoted 6 lines
Quoted 5 lines
Quoted 1 line

+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Quoted 8 lines

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other
suggestions about naming of this one?

Thanks.

shutdown-gpios and make the sense (active high / low) such that setting
it results in teh device being shut down.
Or treat it as an enable and enable-gpios

Quoted 8 lines
Quoted 3 lines

Something that indicates both shutdown and enable is confusing ;)

Jonathan

Jonathan, then I make these changes:

powerdown-gpios: -> output-enable:

Needs to retain the gpios bit as we want the standard gpio stuff to pick them up. I'm not that keen on output-enable-gpios though. The activity here is very much 'shutdown because of error or not enabled' I think. So perhaps we flip the sense and document that it needs to be active low?

Quoted 3 lines

shtdn-enable-gpios: -> enable-gpios:

Is it ok?

Conor, Rob, Krzysztof - you probably have a better insight into this than I do.

Quoted 7 lines
Quoted 6 lines

"enable-gpios" are for turning on a specific feature, not powering on/off entire device. For example to enable regulator output.

"powerdown-gpios" are for turning device on/off.

I don't know what do you have in your device.

Ok. Sounds like that what is enable-gpios above should be shutdown-gpios.

shutdown-gpios sounds exactly the same as powerdown-gpios and it is already used in exactly same context.

Quoted 3 lines

The other case is a device output indicating whether the device is shutdown. That can happen because it was told to do so (via the other gpio), or because it is in an error state. What's a good naming convention for that?

There is no convention and I did not see such case so far. powerdown-status-gpios? powerdown-state-gpios?

Best regards,
Krzysztof

maintainer
#11 lore raw

Re: [PATCH v5 1/2] dt-bindings: adc: provide max34408/9 device tree binding document

Quoted 45 lines · On Fri, 13 Oct 2023 11:53:33 +0200 Krzysztof Kozlowski…
Quoted 44 lines · Jonathan Cameron
Quoted 44 lines
Quoted 33 lines
Quoted 20 lines
Quoted 20 lines
Quoted 6 lines
Quoted 5 lines
Quoted 1 line

+  shtdn-enable-gpios:

I guess the review crossed with you sending v5.  There is some feedback on v4 you need
to address here.

Quoted 8 lines

Jonathan, I thought I did, I've changed ena to powerdown-gpios from Krzysztof's comments but about this one pin I'm still not sure, it looks like *-enable-gpios (like in *-enable-gpios pins in iio/frequency/adi,adf4377.yaml) pin or is it not? Or maybe any other
suggestions about naming of this one?

Thanks.

shutdown-gpios and make the sense (active high / low) such that setting
it results in teh device being shut down.
Or treat it as an enable and enable-gpios

Quoted 8 lines
Quoted 3 lines

Something that indicates both shutdown and enable is confusing ;)

Jonathan

Jonathan, then I make these changes:

powerdown-gpios: -> output-enable:

Needs to retain the gpios bit as we want the standard gpio stuff to pick them up. I'm not that keen on output-enable-gpios though. The activity here is very much 'shutdown because of error or not enabled' I think. So perhaps we flip the sense and document that it needs to be active low?

Quoted 7 lines
Quoted 3 lines

shtdn-enable-gpios: -> enable-gpios:

Is it ok?

Conor, Rob, Krzysztof - you probably have a better insight into this than I do.

"enable-gpios" are for turning on a specific feature, not powering on/off entire device. For example to enable regulator output.

Quoted 7 lines
Quoted 4 lines
Quoted 3 lines

"powerdown-gpios" are for turning device on/off.

I don't know what do you have in your device.

Ok. Sounds like that what is enable-gpios above should be shutdown-gpios.

shutdown-gpios sounds exactly the same as powerdown-gpios and it is already used in exactly same context.

Oops. Yup. powerdown-gpios seems appropriate.

Quoted 7 lines
Quoted 4 lines

The other case is a device output indicating whether the device is shutdown. That can happen because it was told to do so (via the other gpio), or because it is in an error state. What's a good naming convention for that?

There is no convention and I did not see such case so far. powerdown-status-gpios? powerdown-state-gpios?

Either seems reasonable.

Thanks,

J

Quoted 6 lines

Best regards,
Krzysztof

#12 lore raw

PATCH v5 2/2 iio: adc: Add driver support for MAX34408/9

In reply to Ivan Mikhaylov

The MAX34408/MAX34409 are two- and four-channel current monitors that are configured and monitored with a standard I2C/SMBus serial interface. Each unidirectional current sensor offers precision high-side operation with a low full-scale sense voltage. The devices automatically sequence through two or four channels and collect the current-sense samples and average them to reduce the effect of impulse noise. The raw ADC samples are compared to user-programmable digital thresholds to indicate overcurrent conditions. Overcurrent conditions trigger a hardware output to provide an immediate indication to shut down any necessary external circuitry.

Add as ADC driver which only supports current monitoring for now.

---
 drivers/iio/adc/Kconfig    |  11 ++
 drivers/iio/adc/Makefile   |   1 +
 drivers/iio/adc/max34408.c | 278 +++++++++++++++++++++++++++++++++++++
 3 files changed, 290 insertions(+)
 create mode 100644 drivers/iio/adc/max34408.c
drivers/iio/adc/Kconfig +11 -0
index 517b3db114b8..c215a2861350 100644
@@ -735,6 +735,17 @@ config MAX1363
 	  To compile this driver as a module, choose M here: the module will be
 	  called max1363.
 
+config MAX34408
+	tristate "Maxim max34408/max344089 ADC driver"
+	depends on I2C
+	help
+	  Say yes here to build support for Maxim max34408/max34409 current sense
+	  monitor with 8-bits ADC interface with overcurrent delay/threshold and
+	  shutdown delay.
+
+	  To compile this driver as a module, choose M here: the module will be
+	  called max34408.
+
 config MAX77541_ADC
 	tristate "Analog Devices MAX77541 ADC driver"
 	depends on MFD_MAX77541
drivers/iio/adc/Makefile +1 -0
index 2facf979327d..46dceab85e9a 100644
@@ -67,6 +67,7 @@ obj-$(CONFIG_MAX11205) += max11205.o
 obj-$(CONFIG_MAX11410) += max11410.o
 obj-$(CONFIG_MAX1241) += max1241.o
 obj-$(CONFIG_MAX1363) += max1363.o
+obj-$(CONFIG_MAX34408) += max34408.o
 obj-$(CONFIG_MAX77541_ADC) += max77541-adc.o
 obj-$(CONFIG_MAX9611) += max9611.o
 obj-$(CONFIG_MCP320X) += mcp320x.o
drivers/iio/adc/max34408.c new file +278 -0

278 lines not on this page · raw message

Signature · 1 line
2.42.0
#13 lore raw

Re: [PATCH v5 2/2] iio: adc: Add driver support for MAX34408/9

kernel test robot noticed the following build warnings:

Hi Ivan,

kernel test robot noticed the following build warnings:

[auto build test WARNING on jic23-iio/togreg]
[also build test WARNING on robh/for-next linus/master v6.6-rc5 next-20231009] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Ivan-Mikhaylov/dt-bindings-adc-provide-max34408-9-device-tree-binding-document/20231008-074933
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg
patch link:    https://lore.kernel.org/r/20231007234838.8748-3-fr0st61te%40gmail.com
patch subject: [PATCH v5 2/2] iio: adc: Add driver support for MAX34408/9
config: powerpc-allmodconfig (https://download.01.org/0day-ci/archive/20231009/[email protected]/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231009/[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 warnings (new ones prefixed by >>):

>> drivers/iio/adc/max34408.c:240:31: warning: variable 'i' is uninitialized when used here [-Wuninitialized]
     240 |                                          &max34408->input_rsense[i]);
         |                                                                  ^
   drivers/iio/adc/max34408.c:215:11: note: initialize the variable 'i' to silence this warning
     215 |         int rc, i;
         |                  ^
         |                   = 0

1 warning generated.

vim +/i +240 drivers/iio/adc/max34408.c

205
206 static int max34408_probe(struct i2c_client *client)
207 {
208 const struct max34408_adc_model_data *model_data;
209 struct device *dev = &client->dev;
210 const struct of_device_id *match;
211 struct max34408_data *max34408;
212 struct fwnode_handle *node;
213 struct iio_dev *indio_dev;
214 struct regmap *regmap;
215 int rc, i;
216
217 match = i2c_of_match_device(max34408_of_match, client);
218 if (!match)
219 return -EINVAL;
220 model_data = i2c_get_match_data(client);
221
222 regmap = devm_regmap_init_i2c(client, &max34408_regmap_config);
223 if (IS_ERR(regmap)) {
224 dev_err_probe(dev, PTR_ERR(regmap),
225 "regmap_init failed\n");
226 return PTR_ERR(regmap);
227 }
228
229 indio_dev = devm_iio_device_alloc(dev, sizeof(*max34408));
230 if (!indio_dev)
231 return -ENOMEM;
232
233 max34408 = iio_priv(indio_dev);
234 max34408->regmap = regmap;
235 max34408->dev = dev;
236 mutex_init(&max34408->lock);
237
238 device_for_each_child_node(dev, node) {
239 fwnode_property_read_u32(node, "maxim,rsense-val-micro-ohms",

 > 240						 &max34408->input_rsense[i]);

241 i++;
242 }
243
244 /* disable ALERT and averaging */
245 rc = regmap_write(max34408->regmap, MAX34408_CONTROL_REG, 0x0);
246 if (rc)
247 return rc;
248
249 indio_dev->channels = model_data->channels;
250 indio_dev->num_channels = model_data->num_channels;
251 indio_dev->name = model_data->model_name;
252
253 indio_dev->info = &max34408_info;
254 indio_dev->modes = INDIO_DIRECT_MODE;
255
256 return devm_iio_device_register(dev, indio_dev);
257 }
258

Signature · 2 lines
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
maintainer
#14 lore raw

Re: [PATCH v5 2/2] iio: adc: Add driver support for MAX34408/9

In reply to Ivan Mikhaylov
Quoted 10 lines · On Sun, 8 Oct 2023 02:48:38 +0300 Ivan Mikhaylov <[email protected]> wrote:

The MAX34408/MAX34409 are two- and four-channel current monitors that are configured and monitored with a standard I2C/SMBus serial interface. Each unidirectional current sensor offers precision high-side operation with a low full-scale sense voltage. The devices automatically sequence through two or four channels and collect the current-sense samples and average them to reduce the effect of impulse noise. The raw ADC samples are compared to user-programmable digital thresholds to indicate overcurrent conditions. Overcurrent conditions trigger a hardware output to provide an immediate indication to shut down any necessary external circuitry.

Quoted 4 lines

Add as ADC driver which only supports current monitoring for now.

Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/MAX34408-MAX34409.pdf

Quoted 1 line

A few other comments inline.

Jonathan

Quoted 10 lines
drivers/iio/adc/max34408.c new file +2 -0
new file mode 100644
index 000000000000..85cd7b1ec186
@@ -0,0 +1,278 @@
 
 
+static const struct of_device_id max34408_of_match[] = {
+	{

drivers/iio/adc/max34408.c line 204

Quoted 10 lines
drivers/iio/adc/max34408.c new file +10 -0
+		.compatible = "maxim,max34408",
+		.data = &max34408_model_data,
+	},
+	{
+		.compatible = "maxim,max34409",
+		.data = &max34409_model_data,
+	},
+	{}
+};
+MODULE_DEVICE_TABLE(of, max34408_of_match);

Having dropped the unnecessary check in probe, move this to next to the other tables.

drivers/iio/adc/max34408.c line 217

Quoted 13 lines
drivers/iio/adc/max34408.c new file +13 -0
+
+static int max34408_probe(struct i2c_client *client)
+{
+	const struct max34408_adc_model_data *model_data;
+	struct device *dev = &client->dev;
+	const struct of_device_id *match;
+	struct max34408_data *max34408;
+	struct fwnode_handle *node;
+	struct iio_dev *indio_dev;
+	struct regmap *regmap;
+	int rc, i;
+
+	match = i2c_of_match_device(max34408_of_match, client);

Why check this? This prevents any other firmware binding being used for no obvious purpose. Just check...

drivers/iio/adc/max34408.c line 220

Quoted 3 lines
drivers/iio/adc/max34408.c new file +3 -0
+	if (!match)
+		return -EINVAL;
+	model_data = i2c_get_match_data(client);

.. if (!model_data)

		return -EINVAL;

instead.

Quoted 11 lines
drivers/iio/adc/max34408.c new file +11 -0
+
+	regmap = devm_regmap_init_i2c(client, &max34408_regmap_config);
+	if (IS_ERR(regmap)) {
+		dev_err_probe(dev, PTR_ERR(regmap),
+			      "regmap_init failed\n");
+		return PTR_ERR(regmap);
+	}
+
+	indio_dev = devm_iio_device_alloc(dev, sizeof(*max34408));
+	if (!indio_dev)
+		return -ENOMEM;

drivers/iio/adc/max34408.c line 241

Quoted 10 lines
drivers/iio/adc/max34408.c new file +10 -0
+
+	max34408 = iio_priv(indio_dev);
+	max34408->regmap = regmap;
+	max34408->dev = dev;
+	mutex_init(&max34408->lock);
+
+	device_for_each_child_node(dev, node) {
+		fwnode_property_read_u32(node, "maxim,rsense-val-micro-ohms",
+					 &max34408->input_rsense[i]);
+		i++;

As 0-day pointed out, i isn't initialized.

Quoted 16 lines
drivers/iio/adc/max34408.c new file +16 -0
+	}
+
+	/* disable ALERT and averaging */
+	rc = regmap_write(max34408->regmap, MAX34408_CONTROL_REG, 0x0);
+	if (rc)
+		return rc;
+
+	indio_dev->channels = model_data->channels;
+	indio_dev->num_channels = model_data->num_channels;
+	indio_dev->name = model_data->model_name;
+
+	indio_dev->info = &max34408_info;
+	indio_dev->modes = INDIO_DIRECT_MODE;
+
+	return devm_iio_device_register(dev, indio_dev);
+}