diff mbox series

[1/2] dt-bindings: iio: adc: Add AD4000

Message ID 81665b5f0d37d593e6d299528de8d68da8574077.1711131830.git.marcelo.schmitt@analog.com (mailing list archive)
State Changes Requested
Headers show
Series Add support for AD4000 series | expand

Commit Message

Marcelo Schmitt March 22, 2024, 10:05 p.m. UTC
Add device tree documentation for AD4000 series of ADC devices.

Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4000-4004-4008.pdf
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4001-4005.pdf
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4002-4006-4010.pdf
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4003-4007-4011.pdf
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4020-4021-4022.pdf
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4001.pdf
Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4003.pdf

Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
---
Pasting relevant comment from cover letter here to aid reviewers.

These devices have the same SPI (Strange Peripheral Interface) as AD7944
devices, which has been documented in ad7944.rst [1].
The device tree description for SPI connections and mode can be the same as of
ad7944 adi,spi-mode [2].
Because ad4000 driver does not currently support daisy-chain mode, I simplified
things a little bit. If having a more complete doc is preferred, I'm fine
changing to that.

[1]: https://lore.kernel.org/linux-iio/20240313-mainline-ad7944-doc-v1-2-7860416726e4@baylibre.com/
[2]: https://lore.kernel.org/linux-iio/20240304-ad7944-mainline-v5-1-f0a38cea8901@baylibre.com/

 .../bindings/iio/adc/adi,ad4000.yaml          | 151 ++++++++++++++++++
 MAINTAINERS                                   |   7 +
 2 files changed, 158 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml

Comments

Rob Herring (Arm) March 22, 2024, 11:28 p.m. UTC | #1
On Fri, 22 Mar 2024 19:05:08 -0300, Marcelo Schmitt wrote:
> Add device tree documentation for AD4000 series of ADC devices.
> 
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4000-4004-4008.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4001-4005.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4002-4006-4010.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4003-4007-4011.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4020-4021-4022.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4001.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4003.pdf
> 
> Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
> ---
> Pasting relevant comment from cover letter here to aid reviewers.
> 
> These devices have the same SPI (Strange Peripheral Interface) as AD7944
> devices, which has been documented in ad7944.rst [1].
> The device tree description for SPI connections and mode can be the same as of
> ad7944 adi,spi-mode [2].
> Because ad4000 driver does not currently support daisy-chain mode, I simplified
> things a little bit. If having a more complete doc is preferred, I'm fine
> changing to that.
> 
> [1]: https://lore.kernel.org/linux-iio/20240313-mainline-ad7944-doc-v1-2-7860416726e4@baylibre.com/
> [2]: https://lore.kernel.org/linux-iio/20240304-ad7944-mainline-v5-1-f0a38cea8901@baylibre.com/
> 
>  .../bindings/iio/adc/adi,ad4000.yaml          | 151 ++++++++++++++++++
>  MAINTAINERS                                   |   7 +
>  2 files changed, 158 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad4000.example.dtb: adc@0: Unevaluated properties are not allowed ('#address-cells', '#size-cells' were unexpected)
	from schema $id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad4000.example.dtb: adc@0: Unevaluated properties are not allowed ('#address-cells', '#size-cells' were unexpected)
	from schema $id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/81665b5f0d37d593e6d299528de8d68da8574077.1711131830.git.marcelo.schmitt@analog.com

The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
Marcelo Schmitt March 23, 2024, 3:29 a.m. UTC | #2
> My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
> on your patch (DT_CHECKER_FLAGS is new in v5.13):
> 
> yamllint warnings/errors:
> 
> dtschema/dtc warnings/errors:
> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad4000.example.dtb: adc@0: Unevaluated properties are not allowed ('#address-cells', '#size-cells' were unexpected)
> 	from schema $id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad4000.example.dtb: adc@0: Unevaluated properties are not allowed ('#address-cells', '#size-cells' were unexpected)
> 	from schema $id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
> 

ok, adding proper #address-cells and #size-cells fixes the warning.

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

I'm assuming missing those in v1 doesn't hurt review so will wait for some
feedback before sending a v2.

> doc reference errors (make refcheckdocs):
> 
> See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/81665b5f0d37d593e6d299528de8d68da8574077.1711131830.git.marcelo.schmitt@analog.com
> 
> The base for the series is generally the latest rc1. A different dependency
> should be noted in *this* patch.
> 
> If you already ran 'make dt_binding_check' and didn't see the above
> error(s), then make sure 'yamllint' is installed and dt-schema is up to
> date:
> 
> pip3 install dtschema --upgrade
> 
> Please check and re-submit after running the above command yourself. Note
> that DT_SCHEMA_FILES can be set to your schema file to speed up checking
> your schema. However, it must be unset to test all examples with your schema.
>
Krzysztof Kozlowski March 23, 2024, 10:58 a.m. UTC | #3
On 23/03/2024 04:29, Marcelo Schmitt wrote:
>> My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
>> on your patch (DT_CHECKER_FLAGS is new in v5.13):
>>
>> yamllint warnings/errors:
>>
>> dtschema/dtc warnings/errors:
>> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad4000.example.dtb: adc@0: Unevaluated properties are not allowed ('#address-cells', '#size-cells' were unexpected)
>> 	from schema $id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
>> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad4000.example.dtb: adc@0: Unevaluated properties are not allowed ('#address-cells', '#size-cells' were unexpected)
>> 	from schema $id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
>>
> 
> ok, adding proper #address-cells and #size-cells fixes the warning.
> 
>   '#address-cells':
>     const: 1
> 
>   '#size-cells':
>     const: 0
> 
> I'm assuming missing those in v1 doesn't hurt review so will wait for some
> feedback before sending a v2.

Hurts in a way it is a proof you did not test your binding before
sending. Performing review on untested code might be a waste of
reviewers time. Please test your code before sending it. I am not going
to perform review of untested code.

It does not look like you tested the bindings, at least after quick
look. Please run `make dt_binding_check` (see
Documentation/devicetree/bindings/writing-schema.rst for instructions).
Maybe you need to update your dtschema and yamllint.

Best regards,
Krzysztof
Jonathan Cameron March 23, 2024, 6:44 p.m. UTC | #4
On Fri, 22 Mar 2024 19:05:08 -0300
Marcelo Schmitt <marcelo.schmitt@analog.com> wrote:

> Add device tree documentation for AD4000 series of ADC devices.
> 
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4000-4004-4008.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4001-4005.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4002-4006-4010.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4003-4007-4011.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4020-4021-4022.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4001.pdf
> Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4003.pdf
> 
> Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
> ---
> Pasting relevant comment from cover letter here to aid reviewers.
> 
> These devices have the same SPI (Strange Peripheral Interface) as AD7944
> devices, which has been documented in ad7944.rst [1].
> The device tree description for SPI connections and mode can be the same as of
> ad7944 adi,spi-mode [2].
> Because ad4000 driver does not currently support daisy-chain mode, I simplified
> things a little bit. If having a more complete doc is preferred, I'm fine
> changing to that.
> 
> [1]: https://lore.kernel.org/linux-iio/20240313-mainline-ad7944-doc-v1-2-7860416726e4@baylibre.com/
> [2]: https://lore.kernel.org/linux-iio/20240304-ad7944-mainline-v5-1-f0a38cea8901@baylibre.com/
> 
>  .../bindings/iio/adc/adi,ad4000.yaml          | 151 ++++++++++++++++++
>  MAINTAINERS                                   |   7 +
>  2 files changed, 158 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> 
> diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> new file mode 100644
> index 000000000000..9e3d6a3920ea
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> @@ -0,0 +1,151 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Analog Devices AD4000 ADC device driver
> +
> +maintainers:
> +  - Marcelo Schmitt <marcelo.schmitt@analog.com>
> +
> +description: |
> +  Analog Devices AD4000 family of Analog to Digital Converters with SPI support.
> +  Specifications can be found at:
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4000-4004-4008.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4001-4005.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4002-4006-4010.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4003-4007-4011.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4020-4021-4022.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4001.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4003.pdf
> +
> +properties:
> +  compatible:
> +    enum:
> +      - adi,ad4000
> +      - adi,ad4001
> +      - adi,ad4002
> +      - adi,ad4003
> +      - adi,ad4004
> +      - adi,ad4005
> +      - adi,ad4006
> +      - adi,ad4007
> +      - adi,ad4008
> +      - adi,ad4010
> +      - adi,ad4011
> +      - adi,ad4020
> +      - adi,ad4021
> +      - adi,ad4022
> +      - adi,adaq4001
> +      - adi,adaq4003
> +
> +  reg: true
> +  spi-max-frequency: true
> +
> +  vref-supply:
> +    description: Phandle to the regulator for ADC reference voltage.
> +
> +  adi,gain-milli:
> +    description: |
> +      The hardware gain applied to the ADC input (in milli units).
> +      The gain provided by the ADC input scaler is defined by the hardware
> +      connections between chip pins OUT+, R1K-, R1K1-, R1K+, R1K1+, and OUT-.
> +      If not present, default to 1000 (no actual gain applied).
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    enum: [454, 909, 1000, 1900]
> +    default: 1000
> +
> +  adi,spi-cs-mode:

We've just merged a driver for the ad7944 and bindings which has a
similar 3-wire-mode.  Please share the approach used in that binding.
Whilst it seems we don't have the other mode here, I think we still want
to use a similar enum.
+CC David to take a look at this one given he went through long
discussions on how to deal with it for the driver he was working on
so probably remembers the reasoning etc better than I do :)

Jonathan



> +    type: boolean
> +    description: |
> +      This property indicates the SPI wiring configuration.
> +
> +      When this property is omitted, it indicates that the device SDI pin is
> +      connected to SPI controller CS line and device CNV pin has been connected
> +      to a GPIO. Datasheets call this "4-wire mode".
> +
> +      When this property is present, the driver must assume standard SPI
> +      connections which, for these devices, consists of connecting the
> +      controller CS line to device CNV pin. This configuration is
> +      (misleadingly) called "3-wire mode" in datasheets.
> +
> +  cnv-gpios:
> +    description: The GPIO connected to the CNV pin.
> +    maxItems: 1
> +
> +patternProperties:
> +  "^channel@([0-1])$":
> +    $ref: adc.yaml
> +    type: object
> +    description: Represents the external channel connected to the ADC.
> +
> +    properties:
> +      reg:
> +        maxItems: 1
> +
> +      diff-channels: true
> +
> +    required:
> +      - reg
> +
> +    additionalProperties: false
> +
> +required:
> +  - compatible
> +  - reg
> +  - vref-supply
> +
> +allOf:
> +  - $ref: /schemas/spi/spi-peripheral-props.yaml#
> +
> +  - if:
> +      properties:
> +        adi,spi-cs-mode: false
> +    then:
> +      required:
> +        - cnv-gpios
> +
> +unevaluatedProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/gpio/gpio.h>
> +    spi {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        /* Example for a AD4000 devices */
> +        adc@0 {
> +            compatible = "adi,ad4020";
> +            reg = <0>;
> +            spi-max-frequency = <71000000>;
> +            vref-supply = <&vref>;
> +            cnv-gpios = <&gpio0 88 GPIO_ACTIVE_HIGH>;
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +            channel@0 {
> +                reg = <0>;
> +                diff-channels = <0 1>;
> +            };
> +        };
> +    };
> +  - |
> +    spi {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +        /* Example for a ADAQ4000 devices */
> +        adc@0 {
> +            compatible = "adi,adaq4003";
> +            reg = <0>;
> +            spi-max-frequency = <80000000>;
> +            vref-supply = <&vref>;
> +            adi,spi-cs-mode;
> +            adi,gain-milli = <454>;
> +            #address-cells = <1>;
> +            #size-cells = <0>;
> +            channel@0 {
> +                reg = <0>;
> +                diff-channels = <0 1>;
> +            };
> +        };
> +    };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 2662ec49b297..3ca90f842298 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1135,6 +1135,13 @@ W:	https://ez.analog.com/linux-software-drivers
>  F:	Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml
>  F:	drivers/iio/dac/ad3552r.c
>  
> +ANALOG DEVICES INC AD4000 DRIVER
> +M:	Marcelo Schmitt <marcelo.schmitt@analog.com>
> +L:	linux-iio@vger.kernel.org
> +S:	Supported
> +W:	https://ez.analog.com/linux-software-drivers
> +F:	Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> +
>  ANALOG DEVICES INC AD4130 DRIVER
>  M:	Cosmin Tanislav <cosmin.tanislav@analog.com>
>  L:	linux-iio@vger.kernel.org
David Lechner March 23, 2024, 8:18 p.m. UTC | #5
On Sat, Mar 23, 2024 at 1:45 PM Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Fri, 22 Mar 2024 19:05:08 -0300
> Marcelo Schmitt <marcelo.schmitt@analog.com> wrote:
>
> > Add device tree documentation for AD4000 series of ADC devices.
> >
> > Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4000-4004-4008.pdf
> > Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4001-4005.pdf
> > Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4002-4006-4010.pdf
> > Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4003-4007-4011.pdf
> > Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/ad4020-4021-4022.pdf
> > Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4001.pdf
> > Datasheet: https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4003.pdf
> >
> > Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
> > ---
> > Pasting relevant comment from cover letter here to aid reviewers.
> >
> > These devices have the same SPI (Strange Peripheral Interface) as AD7944
> > devices, which has been documented in ad7944.rst [1].
> > The device tree description for SPI connections and mode can be the same as of
> > ad7944 adi,spi-mode [2].
> > Because ad4000 driver does not currently support daisy-chain mode, I simplified
> > things a little bit. If having a more complete doc is preferred, I'm fine
> > changing to that.

Yes, having a complete binding is always preferred [1]. Bindings
should never omit anything just because it isn't implemented in the
driver.

[1]: https://www.kernel.org/doc/html/latest/devicetree/bindings/writing-bindings.html

...

> > +
> > +  adi,spi-cs-mode:
>
> We've just merged a driver for the ad7944 and bindings which has a
> similar 3-wire-mode.  Please share the approach used in that binding.
> Whilst it seems we don't have the other mode here, I think we still want
> to use a similar enum.

The ad40xx chips actually do have the same daisy chain mode. So the
exact same property and all enum values apply.

> +CC David to take a look at this one given he went through long
> discussions on how to deal with it for the driver he was working on
> so probably remembers the reasoning etc better than I do :)
>

In addition to the SPI wiring modes, the proposed bindings are also
missing power supplies and the busy interrupt.

Also, since the ADAQ chips are quite different from the AD chips, it
would be very helpful for reviewers (and git history) to split out
adding those chips to the DT bindings and driver into separate
patches. This way we can clearly see which features only apply to the
ADAQ chips.

Here is what I would consider a reasonably complete binding for the
AD40XX chips (excluding ADAQ for now as I suggested).


---
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Analog Devices AD4000 and similar Analog to Digital Converters

maintainers:
  - Marcelo Schmitt <marcelo.schmitt@analog.com>

description: |
  Analog Devices AD4000 family of Analog to Digital Converters with SPI support.
  Specifications can be found at:
    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4000-4004-4008.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4001-4005.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4002-4006-4010.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4003-4007-4011.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4020-4021-4022.pdf

$ref: /schemas/spi/spi-peripheral-props.yaml#

properties:
  compatible:
    enum:
      - adi,ad4000
      - adi,ad4001
      - adi,ad4002
      - adi,ad4003
      - adi,ad4004
      - adi,ad4005
      - adi,ad4006
      - adi,ad4007
      - adi,ad4008
      - adi,ad4010
      - adi,ad4011
      - adi,ad4020
      - adi,ad4021
      - adi,ad4022

  reg:
    maxItems: 1

  spi-max-frequency:
    maximum: 102040816 # for VIO > 2.7 V, 81300813 for VIO > 1.7 V

  spi-cpha: true

  adi,spi-mode:
    $ref: /schemas/types.yaml#/definitions/string
    enum: [ single, chain ]
    description: |
      This property indicates the SPI wiring configuration.

      When this property is omitted, it is assumed that the device is using what
      the datasheet calls "4-wire mode". This is the conventional SPI mode used
      when there are multiple devices on the same bus. In this mode, the CNV
      line is used to initiate the conversion and the SDI line is connected to
      CS on the SPI controller.

      When this property is present, it indicates that the device is using one
      of the following alternative wiring configurations:

      * single: The datasheet calls this "3-wire mode". (NOTE: The datasheet's
        definition of 3-wire mode is NOT at all related to the standard
        spi-3wire property!) This mode is often used when the ADC is the only
        device on the bus. In this mode, SDI is tied to VIO, and the CNV line
        can be connected to the CS line of the SPI controller or to a GPIO, in
        which case the CS line of the controller is unused.
      * chain: The datasheet calls this "chain mode". This mode is used to save
        on wiring when multiple ADCs are used. In this mode, the SDI line of
        one chip is tied to the SDO of the next chip in the chain and the SDI of
        the last chip in the chain is tied to GND. Only the first chip in the
        chain is connected to the SPI bus. The CNV line of all chips are tied
        together. The CS line of the SPI controller can be used as the CNV line
        only if it is active high.

  '#daisy-chained-devices': true

  vdd-supply:
    description: A 1.8V supply that powers the chip (VDD).

  vio-supply:
    description:
      A 1.8V to 5V supply for the digital inputs and outputs (VIO).

  ref-supply:
    description:
      A 2.5 to 5V supply for the external reference voltage (REF).

  cnv-gpios:
    description:
      The Convert Input (CNV). This input has multiple functions. It initiates
      the conversions and selects the SPI mode of the device (chain or CS). In
      'single' mode, this property is omitted if the CNV pin is connected to the
      CS line of the SPI controller.
    maxItems: 1

  interrupts:
    description:
      The SDO pin can also function as a busy indicator. This node should be
      connected to an interrupt that is triggered when the SDO line goes low
      while the SDI line is high and the CNV line is low ('single' mode) or the
      SDI line is low and the CNV line is high ('multi' mode); or when the SDO
      line goes high while the SDI and CNV lines are high (chain mode),
    maxItems: 1

required:
  - compatible
  - reg
  - vdd-supply
  - vio-supply
  - ref-supply

allOf:
  # in '4-wire' mode, cnv-gpios is required, for other modes it is optional
  - if:
      not:
        required:
          - adi,spi-mode
    then:
      required:
        - cnv-gpios
  # chain mode has lower SCLK max rate
  - if:
      required:
        - adi,spi-mode
      properties:
        adi,spi-mode:
          const: chain
    then:
      properties:
        spi-max-frequency:
          maximum: 50000000 # for VIO > 2.7 V, 40000000 for VIO > 1.7 V
      required:
        - '#daisy-chained-devices'
    else:
      properties:
        '#daisy-chained-devices': false

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    spi {
        #address-cells = <1>;
        #size-cells = <0>;
        adc@0 {
            compatible = "adi,ad4020";
            reg = <0>;
            spi-max-frequency = <71000000>;
            vdd-supply = <&supply_1_8V>;
            vio-supply = <&supply_1_8V>;
            ref-supply = <&supply_5V>;
            cnv-gpios = <&gpio0 88 GPIO_ACTIVE_HIGH>;
        };
    };
David Lechner March 23, 2024, 8:38 p.m. UTC | #6
On Sat, Mar 23, 2024 at 3:18 PM David Lechner <dlechner@baylibre.com> wrote:

...

> Here is what I would consider a reasonably complete binding for the
> AD40XX chips (excluding ADAQ for now as I suggested).

I missed one...

I also think it makes sense for the High-Z mode selection to be a DT
property since needing to enable it or disable it depends entirely on
what is connected to the analog input pins.

---

  adi,high-z-input:
    type: boolean
    description:
      High-Z mode allows the amplifier and RC filter in front of the ADC to be
      chosen based on the signal bandwidth of interest, rather than the settling
      requirements of the switched capacitor SAR ADC inputs.
Marcelo Schmitt March 23, 2024, 9:35 p.m. UTC | #7
On 03/23, David Lechner wrote:
> On Sat, Mar 23, 2024 at 3:18 PM David Lechner <dlechner@baylibre.com> wrote:
> 
> ...
> 
> > Here is what I would consider a reasonably complete binding for the
> > AD40XX chips (excluding ADAQ for now as I suggested).
> 
> I missed one...
> 
> I also think it makes sense for the High-Z mode selection to be a DT
> property since needing to enable it or disable it depends entirely on
> what is connected to the analog input pins.
> 
> ---
> 
>   adi,high-z-input:
>     type: boolean
>     description:
>       High-Z mode allows the amplifier and RC filter in front of the ADC to be
>       chosen based on the signal bandwidth of interest, rather than the settling
>       requirements of the switched capacitor SAR ADC inputs.

ok, will do the suggested changes, including provide AD and ADAQ in separate patches.

Thanks,
Marcelo
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
new file mode 100644
index 000000000000..9e3d6a3920ea
--- /dev/null
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
@@ -0,0 +1,151 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/iio/adc/adi,ad4000.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices AD4000 ADC device driver
+
+maintainers:
+  - Marcelo Schmitt <marcelo.schmitt@analog.com>
+
+description: |
+  Analog Devices AD4000 family of Analog to Digital Converters with SPI support.
+  Specifications can be found at:
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4000-4004-4008.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4001-4005.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4002-4006-4010.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4003-4007-4011.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad4020-4021-4022.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4001.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/adaq4003.pdf
+
+properties:
+  compatible:
+    enum:
+      - adi,ad4000
+      - adi,ad4001
+      - adi,ad4002
+      - adi,ad4003
+      - adi,ad4004
+      - adi,ad4005
+      - adi,ad4006
+      - adi,ad4007
+      - adi,ad4008
+      - adi,ad4010
+      - adi,ad4011
+      - adi,ad4020
+      - adi,ad4021
+      - adi,ad4022
+      - adi,adaq4001
+      - adi,adaq4003
+
+  reg: true
+  spi-max-frequency: true
+
+  vref-supply:
+    description: Phandle to the regulator for ADC reference voltage.
+
+  adi,gain-milli:
+    description: |
+      The hardware gain applied to the ADC input (in milli units).
+      The gain provided by the ADC input scaler is defined by the hardware
+      connections between chip pins OUT+, R1K-, R1K1-, R1K+, R1K1+, and OUT-.
+      If not present, default to 1000 (no actual gain applied).
+    $ref: /schemas/types.yaml#/definitions/uint32
+    enum: [454, 909, 1000, 1900]
+    default: 1000
+
+  adi,spi-cs-mode:
+    type: boolean
+    description: |
+      This property indicates the SPI wiring configuration.
+
+      When this property is omitted, it indicates that the device SDI pin is
+      connected to SPI controller CS line and device CNV pin has been connected
+      to a GPIO. Datasheets call this "4-wire mode".
+
+      When this property is present, the driver must assume standard SPI
+      connections which, for these devices, consists of connecting the
+      controller CS line to device CNV pin. This configuration is
+      (misleadingly) called "3-wire mode" in datasheets.
+
+  cnv-gpios:
+    description: The GPIO connected to the CNV pin.
+    maxItems: 1
+
+patternProperties:
+  "^channel@([0-1])$":
+    $ref: adc.yaml
+    type: object
+    description: Represents the external channel connected to the ADC.
+
+    properties:
+      reg:
+        maxItems: 1
+
+      diff-channels: true
+
+    required:
+      - reg
+
+    additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - vref-supply
+
+allOf:
+  - $ref: /schemas/spi/spi-peripheral-props.yaml#
+
+  - if:
+      properties:
+        adi,spi-cs-mode: false
+    then:
+      required:
+        - cnv-gpios
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/gpio/gpio.h>
+    spi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        /* Example for a AD4000 devices */
+        adc@0 {
+            compatible = "adi,ad4020";
+            reg = <0>;
+            spi-max-frequency = <71000000>;
+            vref-supply = <&vref>;
+            cnv-gpios = <&gpio0 88 GPIO_ACTIVE_HIGH>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+            channel@0 {
+                reg = <0>;
+                diff-channels = <0 1>;
+            };
+        };
+    };
+  - |
+    spi {
+        #address-cells = <1>;
+        #size-cells = <0>;
+        /* Example for a ADAQ4000 devices */
+        adc@0 {
+            compatible = "adi,adaq4003";
+            reg = <0>;
+            spi-max-frequency = <80000000>;
+            vref-supply = <&vref>;
+            adi,spi-cs-mode;
+            adi,gain-milli = <454>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+            channel@0 {
+                reg = <0>;
+                diff-channels = <0 1>;
+            };
+        };
+    };
diff --git a/MAINTAINERS b/MAINTAINERS
index 2662ec49b297..3ca90f842298 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1135,6 +1135,13 @@  W:	https://ez.analog.com/linux-software-drivers
 F:	Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml
 F:	drivers/iio/dac/ad3552r.c
 
+ANALOG DEVICES INC AD4000 DRIVER
+M:	Marcelo Schmitt <marcelo.schmitt@analog.com>
+L:	linux-iio@vger.kernel.org
+S:	Supported
+W:	https://ez.analog.com/linux-software-drivers
+F:	Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
+
 ANALOG DEVICES INC AD4130 DRIVER
 M:	Cosmin Tanislav <cosmin.tanislav@analog.com>
 L:	linux-iio@vger.kernel.org