diff mbox series

[v4,1/2] dt-bindings: adc: add AD7173

Message ID 20231116134655.21052-1-user@HYB-hhAwRlzzMZb
State Changes Requested
Headers show
Series [v4,1/2] dt-bindings: adc: add AD7173 | expand

Checks

Context Check Description
robh/checkpatch success
robh/patch-applied success
robh/dt-meta-schema fail build log

Commit Message

Ceclan, Dumitru Nov. 16, 2023, 1:46 p.m. UTC
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

Comments

Rob Herring (Arm) Nov. 16, 2023, 2:47 p.m. UTC | #1
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.
Krzysztof Kozlowski Nov. 16, 2023, 2:54 p.m. UTC | #2
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
Conor Dooley Nov. 16, 2023, 5:54 p.m. UTC | #3
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
>
Yujie Liu Nov. 20, 2023, 3:17 a.m. UTC | #4
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
Andy Shevchenko Nov. 20, 2023, 1 p.m. UTC | #5
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, &reg);
> +		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);
Ceclan, Dumitru Nov. 20, 2023, 3:55 p.m. UTC | #6
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.
Andy Shevchenko Nov. 20, 2023, 4:21 p.m. UTC | #7
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.
Ceclan, Dumitru Nov. 21, 2023, 5:17 p.m. UTC | #8
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 mbox series

Patch

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>;
+        };
+      };
+    };