Message ID | 20220908144924.205547-3-Ibrahim.Tilki@analog.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | iio: adc: add max11410 adc driver | expand |
On Thu, 8 Sep 2022 17:49:23 +0300 Ibrahim Tilki <Ibrahim.Tilki@analog.com> wrote: > Adding devicetree binding documentation for max11410 adc. > > Signed-off-by: Ibrahim Tilki <Ibrahim.Tilki@analog.com> > --- > .../bindings/iio/adc/adi,max11410.yaml | 174 ++++++++++++++++++ > 1 file changed, 174 insertions(+) > create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > > diff --git a/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml b/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > new file mode 100644 > index 000000000..3ffab284b > --- /dev/null > +++ b/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > @@ -0,0 +1,174 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +# Copyright 2022 Analog Devices Inc. > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/iio/adc/adi,max11410.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Analog Devices MAX11410 ADC device driver > + > +maintainers: > + - Ibrahim Tilki <ibrahim.tilki@analog.com> > + > +description: | > + Bindings for the Analog Devices MAX11410 ADC device. Datasheet can be > + found here: > + https://datasheets.maximintegrated.com/en/ds/MAX11410.pdf > + > +properties: > + compatible: > + enum: > + - adi,max11410 > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 Why? If someone wants to wire both lines, they can do so. Then it will be up to the driver to pick which one to use. Given we have names, we will know which is which and be able to pick our favourite line to use. > + > + interrupt-names: > + description: Name of the gpio pin of max11410 used for IRQ > + maxItems: 1 > + items: > + enum: > + - gpio0 > + - gpio1 > + > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > + avdd-supply: > + description: Necessarry avdd supply. Used as reference when no explicit reference supplied. > + > + vref0p-supply: > + description: vref0p supply can be used as reference for conversion. > + > + vref1p-supply: > + description: vref1p supply can be used as reference for conversion. > + > + vref2p-supply: > + description: vref2p supply can be used as reference for conversion. > + > + vref0n-supply: > + description: vref0n supply can be used as reference for conversion. > + > + vref1n-supply: > + description: vref1n supply can be used as reference for conversion. > + > + vref2n-supply: > + description: vref2n supply can be used as reference for conversion. > + > + spi-max-frequency: > + maximum: 8000000 > + > +required: > + - compatible > + - reg > + - avdd-supply hmm. If explicit references are supplied and used, then will we query the voltage of the avdd supply? If not, it doesn't need to be supplied. Power is needed but it might be coming from a fixed regulator no one bothered to put in the device tree. Perhaps we just don't care about that corner case? > + > +patternProperties: > + "^channel(@[0-9a-f]+)?$": name isn't that flexible as we only allow reg 0-9 > + $ref: "adc.yaml" > + type: object > + description: Represents the external channels which are connected to the ADC. > + > + properties: > + reg: > + description: The channel number in single-ended mode. > + minimum: 0 > + maximum: 9 > + > + adi,reference: > + description: | > + Select the reference source to use when converting on > + the specific channel. Valid values are: > + 0: VREF0P/VREF0N > + 1: VREF1P/VREF1N > + 2: VREF2P/VREF2N > + 3: AVDD/AGND > + 4: VREF0P/AGND > + 5: VREF1P/AGND > + 6: VREF2P/AGND > + If this field is left empty, AVDD/AGND is selected. > + $ref: /schemas/types.yaml#/definitions/uint32 > + enum: [0, 1, 2, 3, 4, 5, 6] > + default: 3 > + > + adi,input-mode: > + description: | > + Select signal path of input channels. Valid values are: > + 0: Buffered, low-power, unity-gain path (default) > + 1: Bypass path > + 2: PGA path > + $ref: /schemas/types.yaml#/definitions/uint32 > + enum: [0, 1, 2] > + default: 0 > + > + diff-channels: true > + > + bipolar: true > + > + settling-time-us: true > + > + adi,buffered-vrefp: > + description: Enable buffered mode for positive reference. > + type: boolean > + > + adi,buffered-vrefn: > + description: Enable buffered mode for negative reference. > + type: boolean > + > + required: > + - reg > + > + additionalProperties: false > + > +additionalProperties: false This now needs to use the new spi-peripheral-props.yaml https://lore.kernel.org/all/20220816124321.67817-1-krzysztof.kozlowski@linaro.org/ Your series crossed with that cleanup / binding documentation refactor. > + > +examples: > + - | > + spi { > + #address-cells = <1>; > + #size-cells = <0>; > + > + adc@0 { > + reg = <0>; > + compatible = "adi,max11410"; > + spi-max-frequency = <8000000>; > + > + interrupt-parent = <&gpio>; > + interrupts = <25 2>; > + interrupt-names = "gpio1"; > + > + avdd-supply = <&adc_avdd>; > + > + vref1p-supply = <&adc_vref1p>; > + vref1n-supply = <&adc_vref1n>; > + > + #address-cells = <1>; > + #size-cells = <0>; > + > + channel@0 { > + reg = <0>; > + }; > + > + channel@1 { > + reg = <1>; > + diff-channels = <2 3>; > + adi,reference = <1>; > + bipolar; > + settling-time-us = <100000>; > + }; > + > + channel@2 { > + reg = <2>; > + diff-channels = <7 9>; > + adi,reference = <5>; > + adi,input-mode = <2>; > + settling-time-us = <50000>; > + }; > + }; > + };
> On Thu, 8 Sep 2022 17:49:23 +0300 > Ibrahim Tilki <Ibrahim.Tilki@analog.com> wrote: > > > Adding devicetree binding documentation for max11410 adc. > > > > Signed-off-by: Ibrahim Tilki <Ibrahim.Tilki@analog.com> > > --- > > .../bindings/iio/adc/adi,max11410.yaml | 174 ++++++++++++++++++ > > 1 file changed, 174 insertions(+) > > create mode 100644 > > Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > > > > diff --git > > a/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > > b/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > > new file mode 100644 > > index 000000000..3ffab284b > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > > @@ -0,0 +1,174 @@ > > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) # Copyright 2022 > > +Analog Devices Inc. > > +%YAML 1.2 > > +--- > > +$id: > > +https://urldefense.com/v3/__http://devicetree.org/schemas/iio/adc/adi > > +,max11410.yaml*__;Iw!!A3Ni8CS0y2Y!9LhA6Qy9HXqdtKQfrUEeHtQ7xhm_bIEYwWU > > +8CyFFP9qvWNxJ5EE2jJ90UG_gph6M7EecEx_r5PuFIsbL$ > > +$schema: > > +https://urldefense.com/v3/__http://devicetree.org/meta-schemas/core.y > > +aml*__;Iw!!A3Ni8CS0y2Y!9LhA6Qy9HXqdtKQfrUEeHtQ7xhm_bIEYwWU8CyFFP9qvWN > > +xJ5EE2jJ90UG_gph6M7EecEx_r5ClUIiuZ$ > > + > > +title: Analog Devices MAX11410 ADC device driver > > + > > +maintainers: > > + - Ibrahim Tilki <ibrahim.tilki@analog.com> > > + > > +description: | > > + Bindings for the Analog Devices MAX11410 ADC device. Datasheet can > > +be > > + found here: > > + https://datasheets.maximintegrated.com/en/ds/MAX11410.pdf > > + > > +properties: > > + compatible: > > + enum: > > + - adi,max11410 > > + > > + reg: > > + maxItems: 1 > > + > > + interrupts: > > + maxItems: 1 > > Why? If someone wants to wire both lines, they can do so. > Then it will be up to the driver to pick which one to use. > Given we have names, we will know which is which and be able to pick our favourite line to use. > Done > > + > > + interrupt-names: > > + description: Name of the gpio pin of max11410 used for IRQ > > + maxItems: 1 > > + items: > > + enum: > > + - gpio0 > > + - gpio1 > > + > > + '#address-cells': > > + const: 1 > > + > > + '#size-cells': > > + const: 0 > > + > > + avdd-supply: > > + description: Necessarry avdd supply. Used as reference when no explicit reference supplied. > > + > > + vref0p-supply: > > + description: vref0p supply can be used as reference for conversion. > > + > > + vref1p-supply: > > + description: vref1p supply can be used as reference for conversion. > > + > > + vref2p-supply: > > + description: vref2p supply can be used as reference for conversion. > > + > > + vref0n-supply: > > + description: vref0n supply can be used as reference for conversion. > > + > > + vref1n-supply: > > + description: vref1n supply can be used as reference for conversion. > > + > > + vref2n-supply: > > + description: vref2n supply can be used as reference for conversion. > > + > > + spi-max-frequency: > > + maximum: 8000000 > > + > > +required: > > + - compatible > > + - reg > > + - avdd-supply > hmm. > > If explicit references are supplied and used, then will we query the voltage of the avdd supply? If not, it doesn't need to be supplied. Power is needed but it might be coming from a fixed regulator no one bothered to put in the device tree. Perhaps we just don't care about that corner case? > That is correct. If all of the channels use external vref, then avdd-supply is no longer required. It is fine by me if we ignore this corner case. Current driver checks for avdd-supply unconditionally. Maybe we can change the driver so that it results in error only if one of the channels use avdd as reference in the absence of avdd-supply? > > + > > +patternProperties: > > + "^channel(@[0-9a-f]+)?$": > > name isn't that flexible as we only allow reg 0-9 > I changed it to "^channel(@[0-9])?$" in v5 but will this allow us to define more than 10 channels? Sharing analog inputs accross multiple channels is supported by driver. But I don't know how to correctly specify it here. For example following configuration is valid: channel@0 { reg = <0>; }; channel@1 { reg = <1>; }; channel@2 { reg = <2>; }; channel@3 { reg = <3>; }; channel@4 { reg = <4>; }; channel@5 { reg = <5>; }; channel@6 { reg = <6>; }; channel@7 { reg = <7>; }; channel@8 { reg = <8>; }; channel@9 { reg = <9>; }; channel@a { diff-channels = <1 2>; }; channel@b { diff-channels = <7 9>; }; > > + $ref: "adc.yaml" > > + type: object > > + description: Represents the external channels which are connected to the ADC. > > + > > + properties: > > + reg: > > + description: The channel number in single-ended mode. > > + minimum: 0 > > + maximum: 9 > > + > > + adi,reference: > > + description: | > > + Select the reference source to use when converting on > > + the specific channel. Valid values are: > > + 0: VREF0P/VREF0N > > + 1: VREF1P/VREF1N > > + 2: VREF2P/VREF2N > > + 3: AVDD/AGND > > + 4: VREF0P/AGND > > + 5: VREF1P/AGND > > + 6: VREF2P/AGND > > + If this field is left empty, AVDD/AGND is selected. > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + enum: [0, 1, 2, 3, 4, 5, 6] > > + default: 3 > > + > > + adi,input-mode: > > + description: | > > + Select signal path of input channels. Valid values are: > > + 0: Buffered, low-power, unity-gain path (default) > > + 1: Bypass path > > + 2: PGA path > > + $ref: /schemas/types.yaml#/definitions/uint32 > > + enum: [0, 1, 2] > > + default: 0 > > + > > + diff-channels: true > > + > > + bipolar: true > > + > > + settling-time-us: true > > + > > + adi,buffered-vrefp: > > + description: Enable buffered mode for positive reference. > > + type: boolean > > + > > + adi,buffered-vrefn: > > + description: Enable buffered mode for negative reference. > > + type: boolean > > + > > + required: > > + - reg > > + > > + additionalProperties: false > > + > > +additionalProperties: false > > This now needs to use the new spi-peripheral-props.yaml > https://lore.kernel.org/all/20220816124321.67817-1-krzysztof.kozlowski@linaro.org/ > > Your series crossed with that cleanup / binding documentation refactor. > Updated in v5 > > + > > +examples: > > + - | > > + spi { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + adc@0 { > > + reg = <0>; > > + compatible = "adi,max11410"; > > + spi-max-frequency = <8000000>; > > + > > + interrupt-parent = <&gpio>; > > + interrupts = <25 2>; > > + interrupt-names = "gpio1"; > > + > > + avdd-supply = <&adc_avdd>; > > + > > + vref1p-supply = <&adc_vref1p>; > > + vref1n-supply = <&adc_vref1n>; > > + > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + channel@0 { > > + reg = <0>; > > + }; > > + > > + channel@1 { > > + reg = <1>; > > + diff-channels = <2 3>; > > + adi,reference = <1>; > > + bipolar; > > + settling-time-us = <100000>; > > + }; > > + > > + channel@2 { > > + reg = <2>; > > + diff-channels = <7 9>; > > + adi,reference = <5>; > > + adi,input-mode = <2>; > > + settling-time-us = <50000>; > > + }; > > + }; > > + };
On Tue, 20 Sep 2022 15:27:23 +0000 "Tilki, Ibrahim" <Ibrahim.Tilki@analog.com> wrote: > > On Thu, 8 Sep 2022 17:49:23 +0300 > > Ibrahim Tilki <Ibrahim.Tilki@analog.com> wrote: > > > > > Adding devicetree binding documentation for max11410 adc. > > > > > > Signed-off-by: Ibrahim Tilki <Ibrahim.Tilki@analog.com> > > > --- > > > .../bindings/iio/adc/adi,max11410.yaml | 174 ++++++++++++++++++ > > > 1 file changed, 174 insertions(+) > > > create mode 100644 > > > Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > > > > > > diff --git > > > a/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml > > > b/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml ... > > > + > > > + interrupt-names: > > > + description: Name of the gpio pin of max11410 used for IRQ > > > + maxItems: 1 > > > + items: > > > + enum: > > > + - gpio0 > > > + - gpio1 > > > + > > > + '#address-cells': > > > + const: 1 > > > + > > > + '#size-cells': > > > + const: 0 > > > + > > > + avdd-supply: > > > + description: Necessarry avdd supply. Used as reference when no explicit reference supplied. > > > + > > > + vref0p-supply: > > > + description: vref0p supply can be used as reference for conversion. > > > + > > > + vref1p-supply: > > > + description: vref1p supply can be used as reference for conversion. > > > + > > > + vref2p-supply: > > > + description: vref2p supply can be used as reference for conversion. > > > + > > > + vref0n-supply: > > > + description: vref0n supply can be used as reference for conversion. > > > + > > > + vref1n-supply: > > > + description: vref1n supply can be used as reference for conversion. > > > + > > > + vref2n-supply: > > > + description: vref2n supply can be used as reference for conversion. > > > + > > > + spi-max-frequency: > > > + maximum: 8000000 > > > + > > > +required: > > > + - compatible > > > + - reg > > > + - avdd-supply > > hmm. > > > > If explicit references are supplied and used, then will we query the voltage of the avdd supply? If not, it doesn't need to be supplied. Power is needed but it might be coming from a fixed regulator no one bothered to put in the device tree. Perhaps we just don't care about that corner case? > > > > That is correct. If all of the channels use external vref, then avdd-supply > is no longer required. It is fine by me if we ignore this corner case. > > Current driver checks for avdd-supply unconditionally. Maybe we can change the > driver so that it results in error only if one of the channels use avdd as reference > in the absence of avdd-supply? Does it query the voltage in this corner case? I don't think it does. If that's the case, you are fine getting it and if not supplied (and various other conditions are met) the regulator core will provide a stub regulator that will work fine here. All we might want to do is remove the required line from the binding. > > > > > + > > > +patternProperties: > > > + "^channel(@[0-9a-f]+)?$": > > > > name isn't that flexible as we only allow reg 0-9 > > > > I changed it to "^channel(@[0-9])?$" in v5 but will this allow us to define > more than 10 channels? Sharing analog inputs accross multiple channels is > supported by driver. But I don't know how to correctly specify it here. > For example following configuration is valid: Ah. I'd not understood this correctly. The adc.yaml binding requires the @X number to match with reg. It doesn't provide a way to not have an @reg. Interesting corner case if you have overlap of single ended and differential channels. I guess we could specify reg as have no meaning for differential channels other than as an index. Not sure what the DT maintainers would think of that though. It isn't obvious what we should set reg to for differential channels. Ah. That meant I just checked if this had gone to the right people. For all dt-bindings you need to +CC the list and maintainers listed in MAINTAINERS. They aren't going to see the binding otherwise and I won't take a new binding without their review. > > channel@0 { > reg = <0>; > }; > channel@1 { > reg = <1>; > }; > channel@2 { > reg = <2>; > }; > channel@3 { > reg = <3>; > }; > channel@4 { > reg = <4>; > }; > channel@5 { > reg = <5>; > }; > channel@6 { > reg = <6>; > }; > channel@7 { > reg = <7>; > }; > channel@8 { > reg = <8>; > }; > channel@9 { > reg = <9>; > }; > channel@a { > diff-channels = <1 2>; > }; > channel@b { > diff-channels = <7 9>; > }; > Thanks, Joanthan
diff --git a/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml b/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml new file mode 100644 index 000000000..3ffab284b --- /dev/null +++ b/Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml @@ -0,0 +1,174 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +# Copyright 2022 Analog Devices Inc. +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/adc/adi,max11410.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Analog Devices MAX11410 ADC device driver + +maintainers: + - Ibrahim Tilki <ibrahim.tilki@analog.com> + +description: | + Bindings for the Analog Devices MAX11410 ADC device. Datasheet can be + found here: + https://datasheets.maximintegrated.com/en/ds/MAX11410.pdf + +properties: + compatible: + enum: + - adi,max11410 + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + + interrupt-names: + description: Name of the gpio pin of max11410 used for IRQ + maxItems: 1 + items: + enum: + - gpio0 + - gpio1 + + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + avdd-supply: + description: Necessarry avdd supply. Used as reference when no explicit reference supplied. + + vref0p-supply: + description: vref0p supply can be used as reference for conversion. + + vref1p-supply: + description: vref1p supply can be used as reference for conversion. + + vref2p-supply: + description: vref2p supply can be used as reference for conversion. + + vref0n-supply: + description: vref0n supply can be used as reference for conversion. + + vref1n-supply: + description: vref1n supply can be used as reference for conversion. + + vref2n-supply: + description: vref2n supply can be used as reference for conversion. + + spi-max-frequency: + maximum: 8000000 + +required: + - compatible + - reg + - avdd-supply + +patternProperties: + "^channel(@[0-9a-f]+)?$": + $ref: "adc.yaml" + type: object + description: Represents the external channels which are connected to the ADC. + + properties: + reg: + description: The channel number in single-ended mode. + minimum: 0 + maximum: 9 + + adi,reference: + description: | + Select the reference source to use when converting on + the specific channel. Valid values are: + 0: VREF0P/VREF0N + 1: VREF1P/VREF1N + 2: VREF2P/VREF2N + 3: AVDD/AGND + 4: VREF0P/AGND + 5: VREF1P/AGND + 6: VREF2P/AGND + If this field is left empty, AVDD/AGND is selected. + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1, 2, 3, 4, 5, 6] + default: 3 + + adi,input-mode: + description: | + Select signal path of input channels. Valid values are: + 0: Buffered, low-power, unity-gain path (default) + 1: Bypass path + 2: PGA path + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1, 2] + default: 0 + + diff-channels: true + + bipolar: true + + settling-time-us: true + + adi,buffered-vrefp: + description: Enable buffered mode for positive reference. + type: boolean + + adi,buffered-vrefn: + description: Enable buffered mode for negative reference. + type: boolean + + required: + - reg + + additionalProperties: false + +additionalProperties: false + +examples: + - | + spi { + #address-cells = <1>; + #size-cells = <0>; + + adc@0 { + reg = <0>; + compatible = "adi,max11410"; + spi-max-frequency = <8000000>; + + interrupt-parent = <&gpio>; + interrupts = <25 2>; + interrupt-names = "gpio1"; + + avdd-supply = <&adc_avdd>; + + vref1p-supply = <&adc_vref1p>; + vref1n-supply = <&adc_vref1n>; + + #address-cells = <1>; + #size-cells = <0>; + + channel@0 { + reg = <0>; + }; + + channel@1 { + reg = <1>; + diff-channels = <2 3>; + adi,reference = <1>; + bipolar; + settling-time-us = <100000>; + }; + + channel@2 { + reg = <2>; + diff-channels = <7 9>; + adi,reference = <5>; + adi,input-mode = <2>; + settling-time-us = <50000>; + }; + }; + };
Adding devicetree binding documentation for max11410 adc. Signed-off-by: Ibrahim Tilki <Ibrahim.Tilki@analog.com> --- .../bindings/iio/adc/adi,max11410.yaml | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,max11410.yaml