Re: [PATCH v3 1/7] dt-bindings: iio: stm32-adc: add generic channel binding
From: Rob Herring
Date: Mon Oct 04 2021 - 12:57:35 EST
On Fri, Sep 24, 2021 at 10:34:04AM +0200, Olivier Moysan wrote:
> Add ADC generic channel binding. This binding should
> be used as an alternate to legacy channel properties
> whenever possible.
> ADC generic channel binding allows to identify supported
> internal channels through the following reserved label names:
> "vddcore", "vrefint" and "vbat".
> This binding also allows to set a different sampling time
> for each channel.
>
> Signed-off-by: Olivier Moysan <olivier.moysan@xxxxxxxxxxx>
> ---
> .../bindings/iio/adc/st,stm32-adc.yaml | 100 ++++++++++++++++--
> 1 file changed, 93 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/iio/adc/st,stm32-adc.yaml b/Documentation/devicetree/bindings/iio/adc/st,stm32-adc.yaml
> index a58334c3bb76..1c13921b0556 100644
> --- a/Documentation/devicetree/bindings/iio/adc/st,stm32-adc.yaml
> +++ b/Documentation/devicetree/bindings/iio/adc/st,stm32-adc.yaml
> @@ -222,6 +222,12 @@ patternProperties:
> '#io-channel-cells':
> const: 1
>
> + '#address-cells':
> + const: 1
> +
> + '#size-cells':
> + const: 0
> +
> interrupts:
> description: |
> IRQ Line for the ADC instance. Valid values are:
> @@ -256,6 +262,7 @@ patternProperties:
> - 20 channels, numbered from 0 to 19 (for in0..in19) on stm32h7 and
> stm32mp1.
> $ref: /schemas/types.yaml#/definitions/uint32-array
> + deprecated: true
>
> st,adc-diff-channels:
> description: |
> @@ -265,7 +272,9 @@ patternProperties:
> <vinp vinn>, <vinp vinn>,... vinp and vinn are numbered from 0 to 19.
>
> Note: At least one of "st,adc-channels" or "st,adc-diff-channels" is
> - required. Both properties can be used together. Some channels can be
> + required if no adc generic channel is defined. These legacy channel
> + properties are exclusive with adc generic channel bindings.
> + Both properties can be used together. Some channels can be
> used as single-ended and some other ones as differential (mixed). But
> channels can't be configured both as single-ended and differential.
> $ref: /schemas/types.yaml#/definitions/uint32-matrix
> @@ -279,6 +288,7 @@ patternProperties:
> "vinn" indicates negative input number
> minimum: 0
> maximum: 19
> + deprecated: true
>
> st,min-sample-time-nsecs:
> description:
> @@ -289,6 +299,42 @@ patternProperties:
> list, to set sample time resp. for all channels, or independently for
> each channel.
> $ref: /schemas/types.yaml#/definitions/uint32-array
> + deprecated: true
> +
> + patternProperties:
> + "^channel@([0-9]|1[0-9])$":
> + type: object
> + $ref: "adc.yaml"
You need 'additionalProperties: false' here. Or unevaluatedProperties if
there are properties used and defined in adc.yaml, but not here.
> + description: |
Don't need '|' unless you need to maintain formatting (line breaks).
> + Represents the external channels which are connected to the ADC.
> +
> + properties:
> + reg:
> + items:
> + minimum: 0
> + maximum: 19
> +
> + label:
> + description: |
> + Unique name to identify which channel this is.
> + Reserved label names "vddcore", "vrefint" and "vbat"
> + are used to identify internal channels with matching names.
> +
> + diff-channels:
> + $ref: /schemas/types.yaml#/definitions/uint32-array
> + items:
> + minimum: 0
> + maximum: 19
> +
> + st,min-sample-time-nsecs:
Use standard unit suffix (-ns).
> + $ref: /schemas/types.yaml#/definitions/uint32
And then drop this.
> + description: |
> + Minimum sampling time in nanoseconds. Depending on hardware (board)
> + e.g. high/low analog input source impedance, fine tune of ADC
> + sampling time may be recommended.
> +
> + required:
> + - reg
>
> allOf:
> - if:
> @@ -369,12 +415,6 @@ patternProperties:
>
> additionalProperties: false
>
> - anyOf:
> - - required:
> - - st,adc-channels
> - - required:
> - - st,adc-diff-channels
> -
> required:
> - compatible
> - reg
> @@ -451,4 +491,50 @@ examples:
> // other adc child node follow...
> };
>
> + - |
> + // Example 3: with stm32mp157c to setup ADC2 with:
> + // - internal channels 13, 14, 15.
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/clock/stm32mp1-clks.h>
> + adc122: adc@48003000 {
> + compatible = "st,stm32mp1-adc-core";
> + reg = <0x48003000 0x400>;
> + interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&rcc ADC12>, <&rcc ADC12_K>;
> + clock-names = "bus", "adc";
> + booster-supply = <&booster>;
> + vdd-supply = <&vdd>;
> + vdda-supply = <&vdda>;
> + vref-supply = <&vref>;
> + st,syscfg = <&syscfg>;
> + interrupt-controller;
> + #interrupt-cells = <1>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + adc@100 {
> + compatible = "st,stm32mp1-adc";
> + #io-channel-cells = <1>;
> + reg = <0x100>;
> + interrupts = <1>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + channel@13 {
> + reg = <13>;
> + label = "vrefint";
> + st,min-sample-time-nsecs = <9000>;
> + };
> + channel@14 {
> + reg = <14>;
> + label = "vddcore";
> + st,min-sample-time-nsecs = <9000>;
> + };
> + channel@15 {
> + reg = <15>;
> + label = "vbat";
> + st,min-sample-time-nsecs = <9000>;
> + };
> + };
> + };
> +
> ...
> --
> 2.17.1
>
>