diff mbox series

[v4,1/4] dt-bindings: iio: adc: adi,ad4000: Add PulSAR

Message ID 227873de1e9aa249504639da2241915541d089d5.1732660478.git.marcelo.schmitt@analog.com (mailing list archive)
State New
Headers show
Series Timestamp and PulSAR support for ad4000 | expand

Commit Message

Marcelo Schmitt Nov. 26, 2024, 11:15 p.m. UTC
Extend the AD4000 series device tree documentation to also describe
PulSAR devices.

The single-channel series of PulSAR devices is similar to the AD4000 series
except PulSAR devices sample at slower rates and don't have a
configuration register. Because PulSAR devices don't have a configuration
register, they don't support all features of AD4000 devices and thus fewer
interfaces are provided to user space. Also, while AD4000 may have their
SDI pin connected to SPI host MOSI line, PulSAR SDI pin is never connected
to MOSI.

Some devices within the PulSAR series are just faster versions of others.
From fastest to slowest, AD7980, AD7988-5, AD7686, AD7685, and AD7988-1 are
all 16-bit pseudo-differential pin-for-pin compatible ADCs. Devices that
only vary on the sample rate are documented with a common fallback
compatible.

Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
---
Change log v3 -> v4
- Sorted compatible strings in alphabetical order.
- Left only fallback compatibles in allOf check list for adi,sdi-pin property.
- Improved patch description with explanation about how the AD4000 and PulSAR
  devices are different.

Well, I didn't manage to get a dtbs_check message for all the cases I was
expecting to cover, yet. I trust the test done by maintainers while I don't
figure out what's wrong with my setup.

FWIW, here's what I tried:

Cloned dt-binding tree from git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
Fetched and checked out dt/next branch.
Applied AD4000/PulSAR patches.
- <62dd96ac9cd> ("iio: adc: ad4000: fix reading unsigned data")
- <8ebfd0925521> ("iio: adc: ad4000: Check for error code from devm_mutex_init() call")
- the patches from this patch series

Cloned dtc from git://git.kernel.org/pub/scm/utils/dtc/dtc.git into a directory
at the same level of linux kernel source dir.

Cloned dt-schema from https://github.com/devicetree-org/dt-schema.git into a
directory at the same level of linux kernel source dir.
Within dt-schema, 
mkdir venv
python3 -m venv venv/
source venv/bin/activate
python3 -m ensurepip --default-pip
python3 -m pip install --upgrade pip setuptools wheel
pip install yamllint
pip install dtschema --upgrade
pip install -e .

export ARCH=arm; export CROSS_COMPILE=arm-linux-gnueabi-
Ran `./scripts/dtc/update-dtc-source.sh` from the top level of Linux source tree.
make defconfig
Added zynq-coraz7s-ad7685.dts to arch/arm/boot/dts/xilinx/.
Added zynq-coraz7s-ad7685.dtb to arch/arm/boot/dts/xilinx/Makefile.
make -j4 dtbs_check # but it didn't print anything about adi,sdi-pin value.
Changed the compatible from "adi,ad7685" to "adi,ad7687" and dtbs_check prints
arch/arm/boot/dts/xilinx/zynq-coraz7s-ad7685.dtb: adc@0: adi,sdi-pin:0: 'sdi' is not one of ['high', 'low', 'cs']

-zynq-coraz7s-ad7685.dts file {
// SPDX-License-Identifier: GPL-2.0

/dts-v1/;
#include "zynq-7000.dtsi"

/ {
	adc_vref: regulator-vref {
		compatible = "regulator-fixed";
		regulator-name = "EVAL 5V Vref";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
	};

	adc_vdd: regulator-vdd {
		compatible = "regulator-fixed";
		regulator-name = "Eval VDD supply";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
	};

	adc_vio: regulator-vio {
		compatible = "regulator-fixed";
		regulator-name = "Eval VIO supply";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};
};

&spi0 {
	adc@0 {
		compatible = "adi,ad7685";
		reg = <0>;
		spi-max-frequency = <40000000>;
		vdd-supply = <&adc_vdd>;
		vio-supply = <&adc_vio>;
		ref-supply = <&adc_vref>;
		adi,sdi-pin = "sdi";
	};
};
-} zynq-coraz7s-ad7685.dts file

 .../bindings/iio/adc/adi,ad4000.yaml          | 56 +++++++++++++++++++
 1 file changed, 56 insertions(+)

Comments

Krzysztof Kozlowski Nov. 27, 2024, 8 a.m. UTC | #1
On Tue, Nov 26, 2024 at 08:15:05PM -0300, Marcelo Schmitt wrote:
> Extend the AD4000 series device tree documentation to also describe
> PulSAR devices.
> 
> The single-channel series of PulSAR devices is similar to the AD4000 series
> except PulSAR devices sample at slower rates and don't have a
> configuration register. Because PulSAR devices don't have a configuration
> register, they don't support all features of AD4000 devices and thus fewer
> interfaces are provided to user space. Also, while AD4000 may have their
> SDI pin connected to SPI host MOSI line, PulSAR SDI pin is never connected
> to MOSI.
> 
> Some devices within the PulSAR series are just faster versions of others.
> >From fastest to slowest, AD7980, AD7988-5, AD7686, AD7685, and AD7988-1 are
> all 16-bit pseudo-differential pin-for-pin compatible ADCs. Devices that
> only vary on the sample rate are documented with a common fallback
> compatible.
> 
> Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com>
> ---
> Change log v3 -> v4
> - Sorted compatible strings in alphabetical order.
> - Left only fallback compatibles in allOf check list for adi,sdi-pin property.
> - Improved patch description with explanation about how the AD4000 and PulSAR
>   devices are different.
> 
> Well, I didn't manage to get a dtbs_check message for all the cases I was
> expecting to cover, yet. I trust the test done by maintainers while I don't
> figure out what's wrong with my setup.
> 
> FWIW, here's what I tried:
> 
> Cloned dt-binding tree from git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
> Fetched and checked out dt/next branch.
> Applied AD4000/PulSAR patches.
> - <62dd96ac9cd> ("iio: adc: ad4000: fix reading unsigned data")
> - <8ebfd0925521> ("iio: adc: ad4000: Check for error code from devm_mutex_init() call")
> - the patches from this patch series
> 
> Cloned dtc from git://git.kernel.org/pub/scm/utils/dtc/dtc.git into a directory
> at the same level of linux kernel source dir.
> 
> Cloned dt-schema from https://github.com/devicetree-org/dt-schema.git into a
> directory at the same level of linux kernel source dir.
> Within dt-schema, 
> mkdir venv
> python3 -m venv venv/
> source venv/bin/activate
> python3 -m ensurepip --default-pip
> python3 -m pip install --upgrade pip setuptools wheel
> pip install yamllint
> pip install dtschema --upgrade
> pip install -e .
> 
> export ARCH=arm; export CROSS_COMPILE=arm-linux-gnueabi-
> Ran `./scripts/dtc/update-dtc-source.sh` from the top level of Linux source tree.
> make defconfig
> Added zynq-coraz7s-ad7685.dts to arch/arm/boot/dts/xilinx/.
> Added zynq-coraz7s-ad7685.dtb to arch/arm/boot/dts/xilinx/Makefile.
> make -j4 dtbs_check # but it didn't print anything about adi,sdi-pin value.
> Changed the compatible from "adi,ad7685" to "adi,ad7687" and dtbs_check prints
> arch/arm/boot/dts/xilinx/zynq-coraz7s-ad7685.dtb: adc@0: adi,sdi-pin:0: 'sdi' is not one of ['high', 'low', 'cs']
> 

Your process is weird. None of these are needed, especially dtc, except
pip install yamllint and dtschema. Installing dtc suggests you are
working on some old kernel and that's a mistake on its own. Plaese work
on latest mainline / maintainer / next tree.


> -zynq-coraz7s-ad7685.dts file {
> // SPDX-License-Identifier: GPL-2.0
> 
> /dts-v1/;
> #include "zynq-7000.dtsi"
> 
> / {
> 	adc_vref: regulator-vref {
> 		compatible = "regulator-fixed";
> 		regulator-name = "EVAL 5V Vref";
> 		regulator-min-microvolt = <5000000>;
> 		regulator-max-microvolt = <5000000>;
> 		regulator-always-on;
> 	};
> 
> 	adc_vdd: regulator-vdd {
> 		compatible = "regulator-fixed";
> 		regulator-name = "Eval VDD supply";
> 		regulator-min-microvolt = <5000000>;
> 		regulator-max-microvolt = <5000000>;
> 		regulator-always-on;
> 	};
> 
> 	adc_vio: regulator-vio {
> 		compatible = "regulator-fixed";
> 		regulator-name = "Eval VIO supply";
> 		regulator-min-microvolt = <3300000>;
> 		regulator-max-microvolt = <3300000>;
> 		regulator-always-on;
> 	};
> };
> 
> &spi0 {
> 	adc@0 {
> 		compatible = "adi,ad7685";
> 		reg = <0>;
> 		spi-max-frequency = <40000000>;
> 		vdd-supply = <&adc_vdd>;
> 		vio-supply = <&adc_vio>;
> 		ref-supply = <&adc_vref>;
> 		adi,sdi-pin = "sdi";
> 	};
> };
> -} zynq-coraz7s-ad7685.dts file
> 
>  .../bindings/iio/adc/adi,ad4000.yaml          | 56 +++++++++++++++++++
>  1 file changed, 56 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> index e413a9d8d2a2..3c1171c7f0e1 100644
> --- a/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
> @@ -19,6 +19,20 @@ description: |
>      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
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7685.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7686.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7687.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7688.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7690.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7691.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7693.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7942.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7946.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7980.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7982.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7983.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7984.pdf
> +    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7988-1_7988-5.pdf
>  
>  $ref: /schemas/spi/spi-peripheral-props.yaml#
>  
> @@ -63,6 +77,32 @@ properties:
>  
>        - const: adi,adaq4003
>  
> +      - items:
> +          - enum:
> +              - adi,ad7685
> +              - adi,ad7686
> +              - adi,ad7980
> +              - adi,ad7988-1
> +              - adi,ad7988-5
> +          - const: adi,ad7983
> +
> +      - items:
> +          - enum:
> +              - adi,ad7688
> +              - adi,ad7693
> +          - const: adi,ad7687

I don't see where you allow adi,ad7687 alone. Same problem with other
cases.

> +
> +      - items:
> +          - enum:
> +              - adi,ad7690
> +              - adi,ad7982
> +              - adi,ad7984
> +          - const: adi,ad7691

Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
index e413a9d8d2a2..3c1171c7f0e1 100644
--- a/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
+++ b/Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml
@@ -19,6 +19,20 @@  description: |
     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
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7685.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7686.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7687.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7688.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7690.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7691.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7693.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7942.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7946.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7980.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7982.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7983.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7984.pdf
+    https://www.analog.com/media/en/technical-documentation/data-sheets/ad7988-1_7988-5.pdf
 
 $ref: /schemas/spi/spi-peripheral-props.yaml#
 
@@ -63,6 +77,32 @@  properties:
 
       - const: adi,adaq4003
 
+      - items:
+          - enum:
+              - adi,ad7685
+              - adi,ad7686
+              - adi,ad7980
+              - adi,ad7988-1
+              - adi,ad7988-5
+          - const: adi,ad7983
+
+      - items:
+          - enum:
+              - adi,ad7688
+              - adi,ad7693
+          - const: adi,ad7687
+
+      - items:
+          - enum:
+              - adi,ad7690
+              - adi,ad7982
+              - adi,ad7984
+          - const: adi,ad7691
+
+      - enum:
+          - adi,ad7942
+          - adi,ad7946
+
   reg:
     maxItems: 1
 
@@ -133,6 +173,22 @@  required:
   - ref-supply
 
 allOf:
+  # Single-channel PulSAR devices have SDI either tied to VIO, GND, or host CS.
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - adi,ad7687
+              - adi,ad7691
+              - adi,ad7942
+              - adi,ad7946
+              - adi,ad7983
+    then:
+      properties:
+        adi,sdi-pin:
+          enum: [ high, low, cs ]
+          default: cs
   # The configuration register can only be accessed if SDI is connected to MOSI
   - if:
       required: