Message ID | 20231116134655.21052-1-user@HYB-hhAwRlzzMZb |
---|---|
State | Changes Requested |
Headers | show |
Series | [v4,1/2] dt-bindings: adc: add AD7173 | expand |
Context | Check | Description |
---|---|---|
robh/checkpatch | success | |
robh/patch-applied | success | |
robh/dt-meta-schema | fail | build log |
On Thu, 16 Nov 2023 15:46:54 +0200, mitrutzceclan wrote: > From: Dumitru Ceclan <mitrutzceclan@gmail.com> > > The AD7173 family offer a complete integrated Sigma-Delta ADC solution > which can be used in high precision, low noise single channel applications > or higher speed multiplexed applications. The Sigma-Delta ADC is intended > primarily for measurement of signals close to DC but also delivers > outstanding performance with input bandwidths out to ~10kHz. > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com> # except reference_select > Signed-off-by: Dumitru Ceclan <mitrutzceclan@gmail.com> > --- > V3 -> V4 > - include supply attributes > - add channel attribute for selecting conversion reference > > .../bindings/iio/adc/adi,ad7173.yaml | 166 ++++++++++++++++++ > 1 file changed, 166 insertions(+) > create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad7173.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: ./Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml:109:10: [error] empty value in block mapping (empty-values) dtschema/dtc warnings/errors: /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties:required: ['compatible', 'reg', 'interrupts'] is not of type 'object', 'boolean' from schema $id: http://json-schema.org/draft-07/schema# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:then: None is not of type 'object', 'boolean' from schema $id: http://json-schema.org/draft-07/schema# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:else:patternProperties:^channel@[0-9a-f]$:properties:enum: [0, 2, 3] is not of type 'object', 'boolean' from schema $id: http://json-schema.org/draft-07/schema# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:else:patternProperties:^channel@[0-9a-f]$:properties: 'enum' should not be valid under {'$ref': '#/definitions/json-schema-prop-names'} hint: A json-schema keyword was found instead of a DT property name. from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:else:patternProperties:^channel@[0-9a-f]$:properties:enum: [0, 2, 3] is not of type 'object', 'boolean' from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties: 'dependencies' should not be valid under {'$ref': '#/definitions/json-schema-prop-names'} hint: A json-schema keyword was found instead of a DT property name. from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties: 'required' should not be valid under {'$ref': '#/definitions/json-schema-prop-names'} hint: A json-schema keyword was found instead of a DT property name. from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties:dependencies: 'anyOf' conditional failed, one must be fixed: 'refin2-supply' is not one of ['$ref', 'additionalItems', 'additionalProperties', 'allOf', 'anyOf', 'const', 'contains', 'default', 'dependencies', 'dependentRequired', 'dependentSchemas', 'deprecated', 'description', 'else', 'enum', 'exclusiveMaximum', 'exclusiveMinimum', 'items', 'if', 'minItems', 'minimum', 'maxItems', 'maximum', 'multipleOf', 'not', 'oneOf', 'pattern', 'patternProperties', 'properties', 'required', 'then', 'typeSize', 'unevaluatedProperties', 'uniqueItems'] 'type' was expected from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties:required: ['compatible', 'reg', 'interrupts'] is not of type 'object', 'boolean' from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: dependencies: missing type definition Traceback (most recent call last): File "/usr/local/bin/dt-validate", line 8, in <module> sys.exit(main()) ^^^^^^ File "/usr/local/lib/python3.11/dist-packages/dtschema/dtb_validate.py", line 144, in main sg.check_dtb(filename) File "/usr/local/lib/python3.11/dist-packages/dtschema/dtb_validate.py", line 89, in check_dtb self.check_subtree(dt, subtree, False, "/", "/", filename) File "/usr/local/lib/python3.11/dist-packages/dtschema/dtb_validate.py", line 82, in check_subtree self.check_subtree(tree, value, disabled, name, fullname + name, filename) File "/usr/local/lib/python3.11/dist-packages/dtschema/dtb_validate.py", line 82, in check_subtree self.check_subtree(tree, value, disabled, name, fullname + name, filename) File "/usr/local/lib/python3.11/dist-packages/dtschema/dtb_validate.py", line 82, in check_subtree self.check_subtree(tree, value, disabled, name, fullname + name, filename) File "/usr/local/lib/python3.11/dist-packages/dtschema/dtb_validate.py", line 77, in check_subtree self.check_node(tree, subtree, disabled, nodename, fullname, filename) File "/usr/local/lib/python3.11/dist-packages/dtschema/dtb_validate.py", line 33, in check_node for error in self.validator.iter_errors(node, filter=match_schema_file): File "/usr/local/lib/python3.11/dist-packages/dtschema/validator.py", line 393, in iter_errors for error in self.DtValidator(sch, File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 288, in iter_errors for error in errors: File "/usr/local/lib/python3.11/dist-packages/jsonschema/_validators.py", line 414, in if_ yield from validator.descend(instance, then, schema_path="then") File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 305, in descend for error in self.evolve(schema=schema).iter_errors(instance): File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 288, in iter_errors for error in errors: File "/usr/local/lib/python3.11/dist-packages/jsonschema/_validators.py", line 362, in allOf yield from validator.descend(instance, subschema, schema_path=index) File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 305, in descend for error in self.evolve(schema=schema).iter_errors(instance): File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 288, in iter_errors for error in errors: File "/usr/local/lib/python3.11/dist-packages/jsonschema/_validators.py", line 414, in if_ yield from validator.descend(instance, then, schema_path="then") File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 305, in descend for error in self.evolve(schema=schema).iter_errors(instance): ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 239, in evolve NewValidator = validator_for(schema, default=cls) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/dist-packages/jsonschema/validators.py", line 1148, in validator_for if schema is True or schema is False or "$schema" not in schema: ^^^^^^^^^^^^^^^^^^^^^^^ TypeError: argument of type 'NoneType' is not iterable doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20231116134655.21052-1-user@HYB-hhAwRlzzMZb 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.
On 16/11/2023 14:46, mitrutzceclan wrote: > From: Dumitru Ceclan <mitrutzceclan@gmail.com> > > The AD7173 family offer a complete integrated Sigma-Delta ADC solution > which can be used in high precision, low noise single channel applications > or higher speed multiplexed applications. The Sigma-Delta ADC is intended > primarily for measurement of signals close to DC but also delivers > outstanding performance with input bandwidths out to ~10kHz. > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com> # except reference_select Please drop the tag. You clearly did not test it, so it must be re-reviewed. Do not send code which was not tested. > Signed-off-by: Dumitru Ceclan <mitrutzceclan@gmail.com> > --- > V3 -> V4 > - include supply attributes > - add channel attribute for selecting conversion reference > > .../bindings/iio/adc/adi,ad7173.yaml | 166 ++++++++++++++++++ > 1 file changed, 166 insertions(+) > create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml > > diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml > new file mode 100644 > index 000000000000..92aa352b6653 > --- /dev/null > +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml > @@ -0,0 +1,166 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +# Copyright 2023 Analog Devices Inc. > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/iio/adc/adi,ad7173.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Analog Devices AD7173 ADC device driver Drop: device driver Bindings are for hardware. > + > +maintainers: > + - Ceclan Dumitru <dumitru.ceclan@analog.com> > + > +description: | > + Bindings for the Analog Devices AD717X ADC's. Datasheets for supported chips: > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7173-8.pdf > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7175-2.pdf > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7176-2.pdf > + > +properties: > + compatible: > + enum: > + - adi,ad7172-2 > + - adi,ad7173-8 > + - adi,ad7175-2 > + - adi,ad7176-2 > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > + spi-max-frequency: > + maximum: 20000000 > + > + refin-supply: > + description: external reference supply, can be used as reference for conversion. > + > + refin2-supply: > + description: external reference supply, can be used as reference for conversion. > + > + avdd-supply: > + description: avdd supply, can be used as reference for conversion. > + > + dependencies: Nope, needs testing... See also example-schema. > + refin2-supply: > + properties: > + compatible: > + adi,ad7173-8 > + > + required: Please open example schema and put it in similar place. > + - compatible > + - reg > + - interrupts > + > +patternProperties: > + "^channel@[0-9a-f]$": > + type: object > + $ref: adc.yaml > + unevaluatedProperties: false > + > + properties: > + reg: > + minimum: 0 > + maximum: 15 > + > + diff-channels: > + items: > + minimum: 0 > + maximum: 31 > + > + adi,reference-select: > + description: | > + Select the reference source to use when converting on > + the specific channel. Valid values are: > + 0: REFIN(+)/REFIN(−). > + 1: REFIN2(+)/REFIN2(−) > + 2: REFOUT/AVSS (Internal reference) > + 3: AVDD > + > + External reference 2 only available on ad7173-8. > + If not specified, internal reference used. > + $ref: /schemas/types.yaml#/definitions/uint32 > + enum: [0, 1, 2, 3] > + default: 2 > + > + bipolar: > + type: boolean > + > + required: > + - reg > + - diff-channels > + > +allOf: > + - $ref: /schemas/spi/spi-peripheral-props.yaml# > + > + - if: > + properties: > + compatible: > + contains: > + const: adi,ad7173-8 > + then: ??? Maybe you want to use "not"? > + else: > + patternProperties: > + "^channel@[0-9a-f]$": > + properties: > + enum: [0, 2, 3] > + > +unevaluatedProperties: false > + Best regards, Krzysztof
On Thu, Nov 16, 2023 at 03:54:13PM +0100, Krzysztof Kozlowski wrote: > On 16/11/2023 14:46, mitrutzceclan wrote: > > From: Dumitru Ceclan <mitrutzceclan@gmail.com> > > > > The AD7173 family offer a complete integrated Sigma-Delta ADC solution > > which can be used in high precision, low noise single channel applications > > or higher speed multiplexed applications. The Sigma-Delta ADC is intended > > primarily for measurement of signals close to DC but also delivers > > outstanding performance with input bandwidths out to ~10kHz. > > > > Reviewed-by: Conor Dooley <conor.dooley@microchip.com> # except reference_select > > Please drop the tag. You clearly did not test it, so it must be > re-reviewed. Do not send code which was not tested. yeah, this is vastly different from what I reviewed. I suppose if someone finds it necessary to add a "# except foo" to the end of a tag it is very good signifier that the tag should in fact be removed. > > > Signed-off-by: Dumitru Ceclan <mitrutzceclan@gmail.com> > > --- > > V3 -> V4 > > - include supply attributes > > - add channel attribute for selecting conversion reference > > > > .../bindings/iio/adc/adi,ad7173.yaml | 166 ++++++++++++++++++ > > 1 file changed, 166 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml > > > > diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml > > new file mode 100644 > > index 000000000000..92aa352b6653 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml > > @@ -0,0 +1,166 @@ > > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > > +# Copyright 2023 Analog Devices Inc. > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/iio/adc/adi,ad7173.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Analog Devices AD7173 ADC device driver > > Drop: device driver > > Bindings are for hardware. > > > + > > +maintainers: > > + - Ceclan Dumitru <dumitru.ceclan@analog.com> > > + > > +description: | > > + Bindings for the Analog Devices AD717X ADC's. Datasheets for supported chips: > > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf > > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7173-8.pdf > > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7175-2.pdf > > + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7176-2.pdf > > + > > +properties: > > + compatible: > > + enum: > > + - adi,ad7172-2 > > + - adi,ad7173-8 > > + - adi,ad7175-2 > > + - adi,ad7176-2 > > + > > + reg: > > + maxItems: 1 > > + > > + interrupts: > > + maxItems: 1 > > + > > + '#address-cells': > > + const: 1 > > + > > + '#size-cells': > > + const: 0 > > + > > + spi-max-frequency: > > + maximum: 20000000 > > + > > + refin-supply: > > + description: external reference supply, can be used as reference for conversion. > > + > > + refin2-supply: > > + description: external reference supply, can be used as reference for conversion. > > + > > + avdd-supply: > > + description: avdd supply, can be used as reference for conversion. > > + > > + dependencies: > > Nope, needs testing... See also example-schema. > > > > + refin2-supply: > > + properties: > > + compatible: > > + adi,ad7173-8 > > + > > + required: > > Please open example schema and put it in similar place. > > > + - compatible > > + - reg > > + - interrupts > > + > > +patternProperties: > > + "^channel@[0-9a-f]$": > > + type: object > > + $ref: adc.yaml > > + unevaluatedProperties: false > > + > > + properties: > > + reg: > > + minimum: 0 > > + maximum: 15 > > + > > + diff-channels: > > + items: > > + minimum: 0 > > + maximum: 31 > > + > > + adi,reference-select: > > + description: | > > + Select the reference source to use when converting on > > + the specific channel. Valid values are: > > + 0: REFIN(+)/REFIN(−). > > + 1: REFIN2(+)/REFIN2(−) > > + 2: REFOUT/AVSS (Internal reference) > > + 3: AVDD > > + > > + External reference 2 only available on ad7173-8. > > + If not specified, internal reference used. > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + enum: [0, 1, 2, 3] > > + default: 2 I really don't like these properties where integers are mapped to functionalities like this. I'd much rather see a enum of strings where the meaning for these things can be put in & there's no need to look up the binding to figure out what "adi,reference-select = <3>" means. For example having "refin", "refin2", "refout-avss" & "avdd" as the options and therefore "adi,reference-select = "avdd" in a devicetree is a lot more understandable IMO. Cheers, Conor. > > + > > + bipolar: > > + type: boolean > > + > > + required: > > + - reg > > + - diff-channels > > + > > +allOf: > > + - $ref: /schemas/spi/spi-peripheral-props.yaml# > > + > > + - if: > > + properties: > > + compatible: > > + contains: > > + const: adi,ad7173-8 > > + then: > > ??? Maybe you want to use "not"? > > > + else: > > > + patternProperties: > > + "^channel@[0-9a-f]$": > > + properties: > > + enum: [0, 2, 3] > > + > > +unevaluatedProperties: false > > + > > Best regards, > Krzysztof >
Hi Dumitru, kernel test robot noticed the following build warnings: [auto build test WARNING on jic23-iio/togreg] [also build test WARNING on linus/master v6.7-rc1 next-20231117] [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/mitrutzceclan/iio-adc-ad7173-add-AD7173-driver/20231116-214919 base: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git togreg patch link: https://lore.kernel.org/r/20231116134655.21052-1-user%40HYB-hhAwRlzzMZb patch subject: [PATCH v4 1/2] dt-bindings: adc: add AD7173 compiler: loongarch64-linux-gcc (GCC) 13.2.0 reproduce: (https://download.01.org/0day-ci/archive/20231117/202311172002.BPSsTFRY-lkp@intel.com/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 <yujie.liu@intel.com> | Closes: https://lore.kernel.org/r/202311172002.BPSsTFRY-lkp@intel.com/ dtcheck warnings: (new ones prefixed by >>) >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml:109:10: [error] empty value in block mapping (empty-values) -- >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties:required: ['compatible', 'reg', 'interrupts'] is not of type 'object', 'boolean' from schema $id: http://json-schema.org/draft-07/schema# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:then: None is not of type 'object', 'boolean' from schema $id: http://json-schema.org/draft-07/schema# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:else:patternProperties:^channel@[0-9a-f]$:properties:enum: [0, 2, 3] is not of type 'object', 'boolean' from schema $id: http://json-schema.org/draft-07/schema# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:else:patternProperties:^channel@[0-9a-f]$:properties: 'enum' should not be valid under {'$ref': '#/definitions/json-schema-prop-names'} hint: A json-schema keyword was found instead of a DT property name. from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: allOf:1:else:patternProperties:^channel@[0-9a-f]$:properties:enum: [0, 2, 3] is not of type 'object', 'boolean' from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties: 'dependencies' should not be valid under {'$ref': '#/definitions/json-schema-prop-names'} hint: A json-schema keyword was found instead of a DT property name. from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties: 'required' should not be valid under {'$ref': '#/definitions/json-schema-prop-names'} hint: A json-schema keyword was found instead of a DT property name. from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties:dependencies: 'anyOf' conditional failed, one must be fixed: 'refin2-supply' is not one of ['$ref', 'additionalItems', 'additionalProperties', 'allOf', 'anyOf', 'const', 'contains', 'default', 'dependencies', 'dependentRequired', 'dependentSchemas', 'deprecated', 'description', 'else', 'enum', 'exclusiveMaximum', 'exclusiveMinimum', 'items', 'if', 'minItems', 'minimum', 'maxItems', 'maximum', 'multipleOf', 'not', 'oneOf', 'pattern', 'patternProperties', 'properties', 'required', 'then', 'typeSize', 'unevaluatedProperties', 'uniqueItems'] 'type' was expected from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: properties:required: ['compatible', 'reg', 'interrupts'] is not of type 'object', 'boolean' from schema $id: http://devicetree.org/meta-schemas/keywords.yaml# -- /usr/local/lib/python3.11/dist-packages/dtschema/schemas/reserved-memory/framebuffer.yaml: warning: ignoring duplicate '$id' value 'http://devicetree.org/schemas/reserved-memory/framebuffer.yaml#' /usr/local/lib/python3.11/dist-packages/dtschema/schemas/reserved-memory/memory-region.yaml: warning: ignoring duplicate '$id' value 'http://devicetree.org/schemas/reserved-memory/memory-region.yaml#' /usr/local/lib/python3.11/dist-packages/dtschema/schemas/reserved-memory/reserved-memory.yaml: warning: ignoring duplicate '$id' value 'http://devicetree.org/schemas/reserved-memory/reserved-memory.yaml#' /usr/local/lib/python3.11/dist-packages/dtschema/schemas/reserved-memory/shared-dma-pool.yaml: warning: ignoring duplicate '$id' value 'http://devicetree.org/schemas/reserved-memory/shared-dma-pool.yaml#' Documentation/devicetree/bindings/media/i2c/ti,ds90ub960.yaml: i2c-alias: missing type definition >> Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml: dependencies: missing type definition Documentation/devicetree/bindings/sound/audio-graph.yaml: convert-sample-format: missing type definition Documentation/devicetree/bindings/serial/8250_omap.yaml: rs485-rts-active-high: missing type definition Documentation/devicetree/bindings/display/panel/advantech,idk-2121wr.yaml: dual-lvds-odd-pixels: missing type definition Documentation/devicetree/bindings/display/panel/advantech,idk-2121wr.yaml: dual-lvds-even-pixels: missing type definition vim +109 Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 @1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 2 # Copyright 2023 Analog Devices Inc. 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 3 %YAML 1.2 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 4 --- 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 5 $id: http://devicetree.org/schemas/iio/adc/adi,ad7173.yaml# 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 6 $schema: http://devicetree.org/meta-schemas/core.yaml# 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 7 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 8 title: Analog Devices AD7173 ADC device driver 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 9 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 10 maintainers: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 11 - Ceclan Dumitru <dumitru.ceclan@analog.com> 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 12 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 13 description: | 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 14 Bindings for the Analog Devices AD717X ADC's. Datasheets for supported chips: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 15 https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 16 https://www.analog.com/media/en/technical-documentation/data-sheets/AD7173-8.pdf 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 17 https://www.analog.com/media/en/technical-documentation/data-sheets/AD7175-2.pdf 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 18 https://www.analog.com/media/en/technical-documentation/data-sheets/AD7176-2.pdf 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 19 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 20 properties: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 21 compatible: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 22 enum: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 23 - adi,ad7172-2 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 24 - adi,ad7173-8 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 25 - adi,ad7175-2 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 26 - adi,ad7176-2 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 27 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 28 reg: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 29 maxItems: 1 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 30 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 31 interrupts: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 32 maxItems: 1 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 33 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 34 '#address-cells': 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 35 const: 1 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 36 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 37 '#size-cells': 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 38 const: 0 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 39 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 40 spi-max-frequency: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 41 maximum: 20000000 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 42 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 43 refin-supply: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 44 description: external reference supply, can be used as reference for conversion. 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 45 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 46 refin2-supply: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 47 description: external reference supply, can be used as reference for conversion. 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 48 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 49 avdd-supply: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 50 description: avdd supply, can be used as reference for conversion. 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 51 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 52 dependencies: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 53 refin2-supply: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 54 properties: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 55 compatible: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 56 adi,ad7173-8 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 57 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 58 required: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 59 - compatible 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 60 - reg 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 61 - interrupts 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 62 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 63 patternProperties: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 64 "^channel@[0-9a-f]$": 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 65 type: object 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 66 $ref: adc.yaml 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 67 unevaluatedProperties: false 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 68 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 69 properties: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 70 reg: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 71 minimum: 0 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 72 maximum: 15 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 73 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 74 diff-channels: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 75 items: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 76 minimum: 0 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 77 maximum: 31 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 78 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 79 adi,reference-select: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 80 description: | 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 81 Select the reference source to use when converting on 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 82 the specific channel. Valid values are: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 83 0: REFIN(+)/REFIN(−). 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 84 1: REFIN2(+)/REFIN2(−) 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 85 2: REFOUT/AVSS (Internal reference) 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 86 3: AVDD 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 87 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 88 External reference 2 only available on ad7173-8. 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 89 If not specified, internal reference used. 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 90 $ref: /schemas/types.yaml#/definitions/uint32 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 91 enum: [0, 1, 2, 3] 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 92 default: 2 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 93 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 94 bipolar: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 95 type: boolean 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 96 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 97 required: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 98 - reg 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 99 - diff-channels 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 100 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 101 allOf: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 102 - $ref: /schemas/spi/spi-peripheral-props.yaml# 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 103 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 104 - if: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 105 properties: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 106 compatible: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 107 contains: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 108 const: adi,ad7173-8 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 @109 then: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 110 else: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 111 patternProperties: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 112 "^channel@[0-9a-f]$": 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 113 properties: 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 114 enum: [0, 2, 3] 6817f96dd6ee22 Dumitru Ceclan 2023-11-16 115
On Thu, Nov 16, 2023 at 03:46:55PM +0200, mitrutzceclan wrote: > From: Dumitru Ceclan <mitrutzceclan@gmail.com> > > The AD7173 family offer a complete integrated Sigma-Delta ADC solution > which can be used in high precision, low noise single channel > applications or higher speed multiplexed applications. The Sigma-Delta > ADC is intended primarily for measurement of signals close to DC but also > delivers outstanding performance with input bandwidths out to ~10kHz. ... > + help > + Say yes here to build support for Analog Devices AD7173 and similar ADC > + (currently supported: AD7172-2, AD7173-8, AD7175-2, AD7176-2). This is hard to maintain, list it one model per a single line. > + To compile this driver as a module, choose M here: the module will be > + called ad7173. ... + array_size.h > +#include <linux/bitfield.h> > +#include <linux/bitmap.h> > +#include <linux/bits.h> This is guaranteed to be included by one from the above (don't remember by heart which one or even both). + container_of.h > +#include <linux/delay.h> > +#include <linux/device.h> > +#include <linux/err.h> > +#include <linux/gpio/driver.h> > +#include <linux/interrupt.h> > +#include <linux/kernel.h> How is this being used (as not a proxy)? > +#include <linux/module.h> > +#include <linux/mod_devicetable.h> > +#include <linux/property.h> > +#include <linux/regmap.h> > +#include <linux/gpio/regmap.h> > +#include <linux/regulator/consumer.h> > +#include <linux/slab.h> > +#include <linux/spi/spi.h> > +#include <linux/units.h> ... > +#define AD7173_CH_ADDRESS(pos, neg) \ > + (FIELD_PREP(AD7173_CH_SETUP_AINPOS_MASK, pos) |\ Space before \ here and everywhere else in multi-line definitions. > + FIELD_PREP(AD7173_CH_SETUP_AINNEG_MASK, neg)) ... > +#define AD7173_VOLTAGE_INT_REF_MICROV 2500000 MICROV --> uV (yes, with small letter), it's a common use for Amperes, Volts, etc. ... > +struct ad7173_channel_config { > + bool live; > + u8 cfg_slot; > + /* Following fields are used to compare equality. Bipolar must be first */ > + bool bipolar; > + bool input_buf; > + u8 odr; > + u8 ref_sel; If you group better by types, it might save a few bytes on the architectures / compilers where bool != byte. > +}; ... > + st->reg_gpiocon_regmap = devm_regmap_init_spi(st->sd.spi, &ad7173_regmap_config); > + if (IS_ERR(st->reg_gpiocon_regmap)) { > + return dev_err_probe(dev, PTR_ERR(st->reg_gpiocon_regmap), > + "Unable to init regmap\n"); > + } {} are not needed, can also be written as st->reg_gpiocon_regmap = devm_regmap_init_spi(st->sd.spi, &ad7173_regmap_config); ret = PTR_ERR_OR_ZERO(st->reg_gpiocon_regmap); if (ret) return dev_err_probe(dev, ret, "Unable to init regmap\n"); ... > + st->gpio_regmap = devm_gpio_regmap_register(dev, &gpio_regmap); > + if (IS_ERR(st->gpio_regmap)) { > + return dev_err_probe(dev, PTR_ERR(st->gpio_regmap), > + "Unable to init gpio-regmap\n"); > + } Ditto. ... > +static struct ad7173_channel_config *ad7173_find_live_config > + (struct ad7173_state *st, struct ad7173_channel_config *cfg) This is strange indentation. Perhaps static struct ad7173_channel_config * ad7173_find_live_config(struct ad7173_state *st, struct ad7173_channel_config *cfg) ? ... > + offset = offsetof(struct ad7173_channel_config, cfg_slot) + > + sizeof(cfg->cfg_slot); Isn't it a offsetofend() from stddef.h? > + cmp_size = sizeof(*cfg) - offset; sizeof_field() from the above mentioned header? ... > + for (i = 0; i < st->num_channels; i++) { > + cfg_aux = &st->channels[i].cfg; > + > + if (cfg_aux->live && !memcmp(&cfg->bipolar, &cfg_aux->bipolar, > + cmp_size)) I would split this on logic operator, it will be easier to read. > + return cfg_aux; > + } ... > + free_cfg_slot = find_first_zero_bit(st->cfg_slots_status, > + st->info->num_configs); > + if (free_cfg_slot == st->info->num_configs) > + free_cfg_slot = ad7173_free_config_slot_lru(st); > + > + set_bit(free_cfg_slot, st->cfg_slots_status); > + cfg->cfg_slot = free_cfg_slot; Looks like reinvention of IDA. ... > + struct ad7173_state *st = iio_priv(indio_dev); > + unsigned int id; > + u8 buf[AD7173_RESET_LENGTH]; > + int ret; Reversed xmas tree order? struct ad7173_state *st = iio_priv(indio_dev); u8 buf[AD7173_RESET_LENGTH]; unsigned int id; int ret; ... > + return vref / (MICRO/MILLI); What does the denominator mean and why you can't simply use MILL? ... > + if (ch->cfg.bipolar) > + /* (1<<31) is UB for a 32bit channel */ > + *val = (chan->scan_type.realbits == 32) ? > + INT_MIN : > + -(1 << (chan->scan_type.realbits - 1)); So, what's the issue to use BIT() which has no such issue with UB? > + else > + *val = 0; ... > + *val = st->info->sinc5_data_rates[reg] / (MICRO/MILLI); > + *val2 = (st->info->sinc5_data_rates[reg] % MILLI) * (MICRO/MILLI); Same Q about denominator. ... > + case IIO_CHAN_INFO_SAMP_FREQ: > + freq = val * MILLI + val2 / MILLI; > + Unneeded blank line. > + for (i = 0; i < st->info->num_sinc5_data_rates - 1; i++) { > + if (freq >= st->info->sinc5_data_rates[i]) > + break; > + } > + > + cfg = &st->channels[chan->address].cfg; > + cfg->odr = i; > + > + if (!cfg->live) > + break; > + > + ret = ad_sd_read_reg(&st->sd, AD7173_REG_FILTER(cfg->cfg_slot), 2, ®); > + if (ret) > + break; > + reg &= ~AD7173_FILTER_ODR0_MASK; > + reg |= FIELD_PREP(AD7173_FILTER_ODR0_MASK, i); > + ret = ad_sd_write_reg(&st->sd, AD7173_REG_FILTER(cfg->cfg_slot), 2, reg); > + break; ... > +static int ad7173_update_scan_mode(struct iio_dev *indio_dev, > + const unsigned long *scan_mask) > +{ > + struct ad7173_state *st = iio_priv(indio_dev); > + int i, ret = 0; Use the 0 directly... > + > + for (i = 0; i < indio_dev->num_channels; i++) { > + if (test_bit(i, scan_mask)) > + ret = ad7173_set_channel(&st->sd, i); > + else > + ret = ad_sd_write_reg(&st->sd, AD7173_REG_CH(i), 2, 0); > + > + if (ret < 0) > + return ret; > + } > + > + return ret; ...here. > +} > + chan_arr = devm_kcalloc(dev, sizeof(*chan_arr), num_channels, > + GFP_KERNEL); One line. > + if (!chan_arr) > + return -ENOMEM; ... > + if (fwnode_property_read_u32(child, "adi,reference-select", &ref_sel)) > + ref_sel = AD7173_SETUP_REF_SEL_INT_REF; if is redundant. ref_sel = AD7173_SETUP_REF_SEL_INT_REF; fwnode_property_read_u32(child, "adi,reference-select", &ref_sel);
On 11/20/23 15:00, Andy Shevchenko wrote: > On Thu, Nov 16, 2023 at 03:46:55PM +0200, mitrutzceclan wrote: >> +struct ad7173_channel_config { >> + bool live; >> + u8 cfg_slot; >> + /* Following fields are used to compare equality. Bipolar must be first */ >> + bool bipolar; >> + bool input_buf; >> + u8 odr; >> + u8 ref_sel; > > If you group better by types, it might save a few bytes on the architectures / > compilers where bool != byte. > Grouping by type will result in not being able to use memcmp() for comparing configs. But then there is the issue that I was under the assumption that bool=byte. If that is not the case, the config equality check might be comparing padding bytes. In this case what do you suggest: - using the packed attribute - using only u8 - drop memcmp, manually compare fields ... >> + cmp_size = sizeof(*cfg) - offset; > > sizeof_field() from the above mentioned header? This computes the size of multiple fields, following cfg_slot. Better to group the fields that need to be compared into another struct then use sizeof_field()? ... > >> + return vref / (MICRO/MILLI); > > What does the denominator mean and why you can't simply use MILL? > Original vref values are in micro, I considered that it was adequate to represent the conversion from MICRO to MILLI as a fraction. >> + *val = st->info->sinc5_data_rates[reg] / (MICRO/MILLI); >> + *val2 = (st->info->sinc5_data_rates[reg] % MILLI) * (MICRO/MILLI); > > Same Q about denominator. > Here, a misunderstanding on my part of a suggestion from Jonathan in V2, will be removed.
On Mon, Nov 20, 2023 at 05:55:12PM +0200, Ceclan Dumitru wrote: > On 11/20/23 15:00, Andy Shevchenko wrote: > > On Thu, Nov 16, 2023 at 03:46:55PM +0200, mitrutzceclan wrote: ... > >> +struct ad7173_channel_config { > >> + bool live; > >> + u8 cfg_slot; > >> + /* Following fields are used to compare equality. Bipolar must be first */ > >> + bool bipolar; > >> + bool input_buf; > >> + u8 odr; > >> + u8 ref_sel; > > > > If you group better by types, it might save a few bytes on the architectures / > > compilers where bool != byte. > > > Grouping by type will result in not being able to use memcmp() for > comparing configs. But then there is the issue that I was under the > assumption that bool=byte. If that is not the case, the config equality > check might be comparing padding bytes. It's most likely the case, BUT... it is not guaranteed by the C standard. > In this case what do you suggest: > - using the packed attribute > - using only u8 > - drop memcmp, manually compare fields Use struct_group() to show explicitly the group of members. If it's not an ABI in any sense, then memcmp() is fine. ... > >> + cmp_size = sizeof(*cfg) - offset; > > > > sizeof_field() from the above mentioned header? > > This computes the size of multiple fields, following cfg_slot. Better to > group the fields that need to be compared into another struct then use > sizeof_field()? See above. ... > >> + return vref / (MICRO/MILLI); > > > > What does the denominator mean and why you can't simply use MILL? > > Original vref values are in micro, I considered that it was adequate to > represent the conversion from MICRO to MILLI as a fraction. > > >> + *val = st->info->sinc5_data_rates[reg] / (MICRO/MILLI); > >> + *val2 = (st->info->sinc5_data_rates[reg] % MILLI) * (MICRO/MILLI); > > > > Same Q about denominator. > > > Here, a misunderstanding on my part of a suggestion from Jonathan in V2, > will be removed. You need to clarify with him that.
On 11/20/23 18:21, Andy Shevchenko wrote:> On Mon, Nov 20, 2023 at 05:55:12PM +0200, Ceclan Dumitru wrote: >> On 11/20/23 15:00, Andy Shevchenko wrote: >>> On Thu, Nov 16, 2023 at 03:46:55PM +0200, mitrutzceclan wrote: > > Use struct_group() to show explicitly the group of members. If it's not an ABI in any sense, then memcmp() is fine. > Alright >>>> + return vref / (MICRO/MILLI); >>> >>> What does the denominator mean and why you can't simply use MILL? >> >> Original vref values are in micro, I considered that it was adequate >> to represent the conversion from MICRO to MILLI as a fraction. >> >>>> + *val = st->info->sinc5_data_rates[reg] / (MICRO/MILLI); >>>> + *val2 = (st->info->sinc5_data_rates[reg] % MILLI) * >>>> +(MICRO/MILLI); >>> >>> Same Q about denominator. >>> >> Here, a misunderstanding on my part of a suggestion from Jonathan in >> V2, will be removed. > > You need to clarify with him that. > My misunderstanding was that he only referred to the multiplication, not the denominator. *val has a conversion from MILLI to no metric prefix while *val2 converts from MILLI to MICRO.
diff --git a/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml b/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml new file mode 100644 index 000000000000..92aa352b6653 --- /dev/null +++ b/Documentation/devicetree/bindings/iio/adc/adi,ad7173.yaml @@ -0,0 +1,166 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +# Copyright 2023 Analog Devices Inc. +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/adc/adi,ad7173.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Analog Devices AD7173 ADC device driver + +maintainers: + - Ceclan Dumitru <dumitru.ceclan@analog.com> + +description: | + Bindings for the Analog Devices AD717X ADC's. Datasheets for supported chips: + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7173-8.pdf + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7175-2.pdf + https://www.analog.com/media/en/technical-documentation/data-sheets/AD7176-2.pdf + +properties: + compatible: + enum: + - adi,ad7172-2 + - adi,ad7173-8 + - adi,ad7175-2 + - adi,ad7176-2 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + spi-max-frequency: + maximum: 20000000 + + refin-supply: + description: external reference supply, can be used as reference for conversion. + + refin2-supply: + description: external reference supply, can be used as reference for conversion. + + avdd-supply: + description: avdd supply, can be used as reference for conversion. + + dependencies: + refin2-supply: + properties: + compatible: + adi,ad7173-8 + + required: + - compatible + - reg + - interrupts + +patternProperties: + "^channel@[0-9a-f]$": + type: object + $ref: adc.yaml + unevaluatedProperties: false + + properties: + reg: + minimum: 0 + maximum: 15 + + diff-channels: + items: + minimum: 0 + maximum: 31 + + adi,reference-select: + description: | + Select the reference source to use when converting on + the specific channel. Valid values are: + 0: REFIN(+)/REFIN(−). + 1: REFIN2(+)/REFIN2(−) + 2: REFOUT/AVSS (Internal reference) + 3: AVDD + + External reference 2 only available on ad7173-8. + If not specified, internal reference used. + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1, 2, 3] + default: 2 + + bipolar: + type: boolean + + required: + - reg + - diff-channels + +allOf: + - $ref: /schemas/spi/spi-peripheral-props.yaml# + + - if: + properties: + compatible: + contains: + const: adi,ad7173-8 + then: + else: + patternProperties: + "^channel@[0-9a-f]$": + properties: + enum: [0, 2, 3] + +unevaluatedProperties: false + +examples: + - | + #include <dt-bindings/gpio/gpio.h> + #include <dt-bindings/interrupt-controller/irq.h> + + spi { + #address-cells = <1>; + #size-cells = <0>; + + adc@0 { + compatible = "adi,ad7173-8"; + reg = <0>; + + #address-cells = <1>; + #size-cells = <0>; + + interrupts = <25 IRQ_TYPE_EDGE_FALLING>; + interrupt-parent = <&gpio>; + spi-max-frequency = <5000000>; + + channel@0 { + reg = <0>; + bipolar; + diff-channels = <0 1>; + }; + + channel@1 { + reg = <1>; + diff-channels = <2 3>; + }; + + channel@2 { + reg = <2>; + bipolar; + diff-channels = <4 5>; + }; + + channel@3 { + reg = <3>; + bipolar; + diff-channels = <6 7>; + }; + + channel@4 { + reg = <4>; + diff-channels = <8 9>; + }; + }; + };