Re: [PATCH 1/2] dt-bindings: iio: temperature: Add ADT7604 support to adi,ltc2983
From: Conor Dooley
Date: Mon Apr 27 2026 - 15:34:48 EST
On Mon, Apr 27, 2026 at 04:25:07PM +0300, Liviu Stan wrote:
> The ADT7604 shares the same die as the LTC2984. It repurposes the
> custom RTD sensor type (18) as a copper trace resistance sensor
> and the custom thermistor type (27) as a leak detector, and
> removes thermocouple, diode and direct ADC sensor types.
I have to wonder if this is the right approach, if it's the same device
just with a different label and advertised purpose.
>
> Add adi,adt7604 to the compatible list and introduce two new
> sensor node types specific to this device:
>
> - copper-trace@: maps to the custom RTD sensor type (18). Two
> variants: sub-ohm (< 1 ohm, adi,copper-trace-sub-ohm boolean,
> no custom table) and standard (> 1 ohm, optional adi,custom-rtd
> table). Primary output is resistance in mOhm.
>
> - leak-detector@: maps to the custom thermistor sensor type (27).
> Takes an optional adi,custom-leak-detector lookup table encoding
> resistance (uOhm) against coverage data (P + 273.15 in uK).
> Primary output is resistance in Ohm; when a table is provided,
> IIO_TEMP reports coverage percentage (raw / 1024).
>
> allOf conditions are added to restrict thermocouple, diode, direct
> ADC and active temperature nodes to non-ADT7604 devices, and to
> restrict copper-trace and leak-detector nodes to the ADT7604.
>
> Signed-off-by: Liviu Stan <liviu.stan@xxxxxxxxxx>
> ---
> .../bindings/iio/temperature/adi,ltc2983.yaml | 170 +++++++++++++++++-
> 1 file changed, 167 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/iio/temperature/adi,ltc2983.yaml b/Documentation/devicetree/bindings/iio/temperature/adi,ltc2983.yaml
> index a22725f7619b..e777b37d588d 100644
> --- a/Documentation/devicetree/bindings/iio/temperature/adi,ltc2983.yaml
> +++ b/Documentation/devicetree/bindings/iio/temperature/adi,ltc2983.yaml
> @@ -4,14 +4,14 @@
> $id: http://devicetree.org/schemas/iio/temperature/adi,ltc2983.yaml#
> $schema: http://devicetree.org/meta-schemas/core.yaml#
>
> -title: Analog Devices LTC2983, LTC2986, LTM2985 Multi-sensor Temperature system
> +title: Analog Devices LTC2983, LTC2986, LTM2985, ADT7604 Multi-sensor Temperature system
>
> maintainers:
> - Nuno Sá <nuno.sa@xxxxxxxxxx>
>
> description: |
> - Analog Devices LTC2983, LTC2984, LTC2986, LTM2985 Multi-Sensor Digital
> - Temperature Measurement Systems
> + Analog Devices LTC2983, LTC2984, LTC2986, LTM2985, ADT7604 Multi-Sensor
> + Digital Temperature Measurement Systems
>
> https://www.analog.com/media/en/technical-documentation/data-sheets/2983fc.pdf
> https://www.analog.com/media/en/technical-documentation/data-sheets/2984fb.pdf
> @@ -43,6 +43,7 @@ properties:
> compatible:
> oneOf:
> - enum:
> + - adi,adt7604
> - adi,ltc2983
> - adi,ltc2986
> - adi,ltm2985
> @@ -436,6 +437,96 @@ patternProperties:
> required:
> - adi,custom-temp
>
> + '^copper-trace@':
Pedantry perhaps, but isn't this an "ohmmeter"?
> + $ref: '#/$defs/sensor-node'
> + unevaluatedProperties: false
> + description: |
> + Copper trace resistance sensor (ADT7604 only). Uses the custom RTD
> + sensor type (18). Two variants exist: sub-ohm (< 1 ohm, no custom
> + table allowed) and standard (> 1 ohm, optional custom table).
> +
> + properties:
> + reg:
> + minimum: 2
> + maximum: 20
> +
> + adi,sensor-type:
> + description: Sensor type for copper trace sensors.
> + $ref: /schemas/types.yaml#/definitions/uint32
> + const: 18
> +
> + adi,rsense-handle:
> + description: Associated sense resistor sensor.
> + $ref: /schemas/types.yaml#/definitions/phandle
> +
> + adi,copper-trace-sub-ohm:
> + description:
> + Select the sub-ohm (< 1 ohm) copper trace variant. Custom table
> + and excitation current are not allowed in this mode.
> + type: boolean
> +
> + adi,custom-rtd:
> + description:
> + Optional resistance-to-temperature table for copper trace sensors
> + with resistance > 1 ohm. See Page 62 of the datasheet.
I want to look into this property, where is the datasheet?
> + $ref: /schemas/types.yaml#/definitions/uint64-matrix
> + minItems: 3
> + maxItems: 64
> + items:
> + items:
> + - description: Resistance point in uOhms.
> + - description: Temperature point in uK.
> +
> + required:
> + - adi,rsense-handle
> +
> + allOf:
> + - if:
> + required:
> + - adi,copper-trace-sub-ohm
> + then:
> + properties:
> + adi,custom-rtd: false
> +
> + '^leak-detector@':
> + $ref: '#/$defs/sensor-node'
> + unevaluatedProperties: false
> + description: |
> + Leak detector sensor (ADT7604 only). Uses the custom thermistor sensor
> + type (27). Outputs resistance in ohms and, when a custom table is
> + provided, a coverage percentage via IIO_TEMP (raw/1024 = coverage %).
> +
> + properties:
> + reg:
> + minimum: 2
> + maximum: 20
> +
> + adi,sensor-type:
> + description: Sensor type for leak detector sensors.
> + $ref: /schemas/types.yaml#/definitions/uint32
> + const: 27
> +
> + adi,rsense-handle:
> + description: Associated sense resistor sensor.
> + $ref: /schemas/types.yaml#/definitions/phandle
> +
> + adi,custom-leak-detector:
> + description: |
> + Lookup table mapping resistance to coverage data. Entries must be
> + in ascending resistance order. The coverage data field encodes the
> + coverage percentage P as (P + 273.15) expressed in uK, i.e.
> + (P * 1000000 + 273150000).
> + $ref: /schemas/types.yaml#/definitions/uint64-matrix
> + minItems: 3
> + maxItems: 64
> + items:
> + items:
> + - description: Resistance point in uOhms.
> + - description: Coverage data point (P + 273150000) in uK.
> +
> + required:
> + - adi,rsense-handle
> +
> '^rsense@':
> $ref: '#/$defs/sensor-node'
> unevaluatedProperties: false
> @@ -477,6 +568,22 @@ allOf:
> patternProperties:
> '^temp@': false
>
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: adi,adt7604
> + then:
> + patternProperties:
> + '^thermocouple@': false
> + '^diode@': false
> + '^adc@': false
> + '^temp@': false
> + else:
> + patternProperties:
> + '^copper-trace@': false
> + '^leak-detector@': false
> +
> examples:
> - |
> #include <dt-bindings/interrupt-controller/irq.h>
> @@ -556,4 +663,61 @@ examples:
> };
> };
> };
> +
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> + spi {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + temperature-sensor@0 {
> + compatible = "adi,adt7604";
> + reg = <0>;
> + interrupt-parent = <&gpio>;
> + interrupts = <25 IRQ_TYPE_EDGE_RISING>;
> +
> + #address-cells = <1>;
> + #size-cells = <0>;
> + vdd-supply = <&supply>;
> +
> + trace_rsense: rsense@2 {
> + reg = <2>;
> + adi,sensor-type = <29>;
> + adi,rsense-val-milli-ohms = <100000>; // 100 ohm
> + };
> +
> + copper-trace@4 {
> + reg = <4>;
> + adi,sensor-type = <18>;
> + adi,rsense-handle = <&trace_rsense>;
Are these ever linked in a different way?
> + adi,copper-trace-sub-ohm;
> + };
> +
> + r_sense: rsense@12 {
> + reg = <12>;
> + adi,sensor-type = <29>;
> + adi,rsense-val-milli-ohms = <1000000>; // 1 kohm
> + };
> +
> + leak-detector@14 {
> + reg = <14>;
> + adi,sensor-type = <27>;
> + adi,rsense-handle = <&r_sense>;
Ditto here and in the rtd node. Are these fixed linkages or actually
dynamic?
Cheers,
Conor.
> + adi,custom-leak-detector =
> + /bits/ 64 < 0 373150000>,
> + /bits/ 64 < 202020000 372150000>,
> + /bits/ 64 < 1000000000 293150000>;
> + };
> +
> + rtd@18 {
> + reg = <18>;
> + adi,sensor-type = <12>; // PT100
> + adi,rsense-handle = <&r_sense>;
> + adi,number-of-wires = <2>;
> + adi,rsense-share;
> + adi,excitation-current-microamp = <500>;
> + adi,rtd-curve = <0>;
> + };
> + };
> + };
> ...
> --
> 2.43.0
>
Attachment:
signature.asc
Description: PGP signature