Message ID | 1585064650-16235-2-git-send-email-jprakash@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | iio: adc: Add support for QCOM SPMI PMIC7 ADC | expand |
On Tue, 24 Mar 2020 21:14:08 +0530 Jishnu Prakash <jprakash@codeaurora.org> wrote: > Convert the adc bindings from .txt to .yaml format. > > Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org> Hi Jishnu, Looks to me like we can tighten the checks a fair bit in here rather than just using uint32s Now, my yaml isn't great so I won't try to say how, but there are plenty of examples in tree. Thanks, Jonathan > --- > .../devicetree/bindings/iio/adc/qcom,spmi-vadc.txt | 173 -------------------- > .../bindings/iio/adc/qcom,spmi-vadc.yaml | 178 +++++++++++++++++++++ > 2 files changed, 178 insertions(+), 173 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt > create mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml > > diff --git a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt > deleted file mode 100644 > index c878768..0000000 > --- a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt > +++ /dev/null > @@ -1,173 +0,0 @@ > -Qualcomm's SPMI PMIC ADC > - > -- SPMI PMIC voltage ADC (VADC) provides interface to clients to read > - voltage. The VADC is a 15-bit sigma-delta ADC. > -- SPMI PMIC5 voltage ADC (ADC) provides interface to clients to read > - voltage. The VADC is a 16-bit sigma-delta ADC. > - > -VADC node: > - > -- compatible: > - Usage: required > - Value type: <string> > - Definition: Should contain "qcom,spmi-vadc". > - Should contain "qcom,spmi-adc5" for PMIC5 ADC driver. > - Should contain "qcom,spmi-adc-rev2" for PMIC rev2 ADC driver. > - Should contain "qcom,pms405-adc" for PMS405 PMIC > - > -- reg: > - Usage: required > - Value type: <prop-encoded-array> > - Definition: VADC base address in the SPMI PMIC register map. > - > -- #address-cells: > - Usage: required > - Value type: <u32> > - Definition: Must be one. Child node 'reg' property should define ADC > - channel number. > - > -- #size-cells: > - Usage: required > - Value type: <u32> > - Definition: Must be zero. > - > -- #io-channel-cells: > - Usage: required > - Value type: <u32> > - Definition: Must be one. For details about IIO bindings see: > - Documentation/devicetree/bindings/iio/iio-bindings.txt > - > -- interrupts: > - Usage: optional > - Value type: <prop-encoded-array> > - Definition: End of conversion interrupt. > - > -Channel node properties: > - > -- reg: > - Usage: required > - Value type: <u32> > - Definition: ADC channel number. > - See include/dt-bindings/iio/qcom,spmi-vadc.h > - > -- label: > - Usage: required for "qcom,spmi-adc5" and "qcom,spmi-adc-rev2" > - Value type: <empty> > - Definition: ADC input of the platform as seen in the schematics. > - For thermistor inputs connected to generic AMUX or GPIO inputs > - these can vary across platform for the same pins. Hence select > - the platform schematics name for this channel. > - > -- qcom,decimation: > - Usage: optional > - Value type: <u32> > - Definition: This parameter is used to decrease ADC sampling rate. > - Quicker measurements can be made by reducing decimation ratio. > - - For compatible property "qcom,spmi-vadc", valid values are > - 512, 1024, 2048, 4096. If property is not found, default value > - of 512 will be used. > - - For compatible property "qcom,spmi-adc5", valid values are 250, 420 > - and 840. If property is not found, default value of 840 is used. > - - For compatible property "qcom,spmi-adc-rev2", valid values are 256, > - 512 and 1024. If property is not present, default value is 1024. > - > -- qcom,pre-scaling: > - Usage: optional > - Value type: <u32 array> > - Definition: Used for scaling the channel input signal before the signal is > - fed to VADC. The configuration for this node is to know the > - pre-determined ratio and use it for post scaling. Select one from > - the following options. > - <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> > - If property is not found default value depending on chip will be used. > - > -- qcom,ratiometric: > - Usage: optional > - Value type: <empty> > - Definition: Channel calibration type. > - - For compatible property "qcom,spmi-vadc", if this property is > - specified VADC will use the VDD reference (1.8V) and GND for > - channel calibration. If property is not found, channel will be > - calibrated with 0.625V and 1.25V reference channels, also > - known as absolute calibration. > - - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", > - if this property is specified VADC will use the VDD reference > - (1.875V) and GND for channel calibration. If property is not found, > - channel will be calibrated with 0V and 1.25V reference channels, > - also known as absolute calibration. > - > -- qcom,hw-settle-time: > - Usage: optional > - Value type: <u32> > - Definition: Time between AMUX getting configured and the ADC starting > - conversion. The 'hw_settle_time' is an index used from valid values > - and programmed in hardware to achieve the hardware settling delay. > - - For compatible property "qcom,spmi-vadc" and "qcom,spmi-adc-rev2", > - Delay = 100us * (hw_settle_time) for hw_settle_time < 11, > - and 2ms * (hw_settle_time - 10) otherwise. > - Valid values are: 0, 100, 200, 300, 400, 500, 600, 700, 800, > - 900 us and 1, 2, 4, 6, 8, 10 ms. > - If property is not found, channel will use 0us. > - - For compatible property "qcom,spmi-adc5", delay = 15us for > - value 0, 100us * (value) for values < 11, > - and 2ms * (value - 10) otherwise. > - Valid values are: 15, 100, 200, 300, 400, 500, 600, 700, 800, > - 900 us and 1, 2, 4, 6, 8, 10 ms > - Certain controller digital versions have valid values of > - 15, 100, 200, 300, 400, 500, 600, 700, 1, 2, 4, 8, 16, 32, 64, 128 ms > - If property is not found, channel will use 15us. > - > -- qcom,avg-samples: > - Usage: optional > - Value type: <u32> > - Definition: Number of samples to be used for measurement. > - Averaging provides the option to obtain a single measurement > - from the ADC that is an average of multiple samples. The value > - selected is 2^(value). > - - For compatible property "qcom,spmi-vadc", valid values > - are: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 > - If property is not found, 1 sample will be used. > - - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", > - valid values are: 1, 2, 4, 8, 16 > - If property is not found, 1 sample will be used. > - > -NOTE: > - > -For compatible property "qcom,spmi-vadc" following channels, also known as > -reference point channels, are used for result calibration and their channel > -configuration nodes should be defined: > -VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, > -VADC_GND_REF and VADC_VDD_VADC. > - > -Example: > - > -#include <dt-bindings/iio/qcom,spmi-vadc.h> > -#include <linux/irq.h> > -/* ... */ > - > - /* VADC node */ > - pmic_vadc: vadc@3100 { > - compatible = "qcom,spmi-vadc"; > - reg = <0x3100>; > - interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>; > - #address-cells = <1>; > - #size-cells = <0>; > - #io-channel-cells = <1>; > - io-channel-ranges; > - > - /* Channel node */ > - adc-chan@VADC_LR_MUX10_USB_ID { > - reg = <VADC_LR_MUX10_USB_ID>; > - qcom,decimation = <512>; > - qcom,ratiometric; > - qcom,hw-settle-time = <200>; > - qcom,avg-samples = <1>; > - qcom,pre-scaling = <1 3>; > - }; > - }; > - > - /* IIO client node */ > - usb { > - io-channels = <&pmic_vadc VADC_LR_MUX10_USB_ID>; > - io-channel-names = "vadc"; > - }; > diff --git a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml > new file mode 100644 > index 0000000..72db14c > --- /dev/null > +++ b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml > @@ -0,0 +1,178 @@ > +# SPDX-License-Identifier: GPL-2.0-only > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/iio/adc/qcom,spmi-vadc.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Qualcomm's SPMI PMIC ADC > + > +maintainers: > + - Andy Gross <agross@kernel.org> > + - Bjorn Andersson <bjorn.andersson@linaro.org> > + > +description: | > + SPMI PMIC voltage ADC (VADC) provides interface to clients to read > + voltage. The VADC is a 15-bit sigma-delta ADC. > + SPMI PMIC5 voltage ADC (ADC) provides interface to clients to read > + voltage. The VADC is a 16-bit sigma-delta ADC. > + > +properties: > + compatible: > + enum: > + - qcom,spmi-vadc > + - qcom,spmi-adc5 > + - qcom,spmi-adc-rev2 > + - qcom,pms405-adc > + > + reg: > + description: VADC base address in the SPMI PMIC register map > + maxItems: 1 > + > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > + '#io-channel-cells': > + const: 1 > + > + interrupts: > + maxItems: 1 > + description: > + End of conversion interrupt. > + > +required: > + - compatible > + - reg > + - '#address-cells' > + - '#size-cells' > + - '#io-channel-cells' > + > +patternProperties: > + "^[a-z0-9-_@]$": > + type: object > + description: | > + Represents the external channels which are connected to the ADC. > + For compatible property "qcom,spmi-vadc" following channels, also known as > + reference point channels, are used for result calibration and their channel > + configuration nodes should be defined: > + VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, > + VADC_GND_REF and VADC_VDD_VADC. > + > + properties: > + reg: > + description: | > + ADC channel number. > + See include/dt-bindings/iio/qcom,spmi-vadc.h > + > + label: > + description: | > + ADC input of the platform as seen in the schematics. > + For thermistor inputs connected to generic AMUX or GPIO inputs > + these can vary across platform for the same pins. Hence select > + the platform schematics name for this channel. It is required > + for "qcom,spmi-adc5" and "qcom,spmi-adc-rev2". > + allOf: > + - $ref: /schemas/types.yaml#/definitions/string > + > + qcom,decimation: > + description: | > + This parameter is used to decrease ADC sampling rate. > + Quicker measurements can be made by reducing decimation ratio. > + - For compatible property "qcom,spmi-vadc", valid values are > + 512, 1024, 2048, 4096. If property is not found, default value > + of 512 will be used. > + - For compatible property "qcom,spmi-adc5", valid values are 250, 420 > + and 840. If property is not found, default value of 840 is used. > + - For compatible property "qcom,spmi-adc-rev2", valid values are 256, > + 512 and 1024. If property is not present, default value is 1024. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 Should ideally verify all the values against models etc rather than a uint32 binding. > + > + qcom,pre-scaling: > + description: | > + Used for scaling the channel input signal before the signal is > + fed to VADC. The configuration for this node is to know the > + pre-determined ratio and use it for post scaling. Select one from > + the following options. > + <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> Can we not provide this list as something that can be verified? > + If property is not found default value depending on chip will be used. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > + > + qcom,ratiometric: > + description: | > + Channel calibration type. > + - For compatible property "qcom,spmi-vadc", if this property is > + specified VADC will use the VDD reference (1.8V) and GND for > + channel calibration. If property is not found, channel will be > + calibrated with 0.625V and 1.25V reference channels, also > + known as absolute calibration. > + - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", > + if this property is specified VADC will use the VDD reference (1.875V) > + and GND for channel calibration. If property is not found, channel > + will be calibrated with 0V and 1.25V reference channels, also known > + as absolute calibration. > + type: boolean > + > + qcom,hw-settle-time: > + description: | > + Time between AMUX getting configured and the ADC starting > + conversion. The 'hw_settle_time' is an index used from valid values > + and programmed in hardware to achieve the hardware settling delay. > + - For compatible property "qcom,spmi-vadc" and "qcom,spmi-adc-rev2", > + Delay = 100us * (hw_settle_time) for hw_settle_time < 11, > + and 2ms * (hw_settle_time - 10) otherwise. > + Valid values are: 0, 100, 200, 300, 400, 500, 600, 700, 800, > + 900 us and 1, 2, 4, 6, 8, 10 ms. > + If property is not found, channel will use 0us. > + - For compatible property "qcom,spmi-adc5", delay = 15us for > + value 0, 100us * (value) for values < 11, > + and 2ms * (value - 10) otherwise. > + Valid values are: 15, 100, 200, 300, 400, 500, 600, 700, 800, > + 900 us and 1, 2, 4, 6, 8, 10 ms > + Certain controller digital versions have valid values of > + 15, 100, 200, 300, 400, 500, 600, 700, 1, 2, 4, 8, 16, 32, 64, 128 ms > + If property is not found, channel will use 15us. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 Can we verify those values. > + > + qcom,avg-samples: > + description: | > + Number of samples to be used for measurement. > + Averaging provides the option to obtain a single measurement > + from the ADC that is an average of multiple samples. The value > + selected is 2^(value). > + - For compatible property "qcom,spmi-vadc", valid values > + are: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 > + If property is not found, 1 sample will be used. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 Verify the values if possible. > + > + required: > + - reg > + - diff-channels > + > +examples: > + - | > + /* VADC node */ > + pmic_vadc: vadc@3100 { Should really be using generic names, so adc@3100 preferred. > + compatible = "qcom,spmi-vadc"; > + reg = <0x3100>; > + interrupts = <0x0 0x31 0x0 0x1>; > + #address-cells = <1>; > + #size-cells = <0>; > + #io-channel-cells = <1>; > + io-channel-ranges; > + > + /* Channel node */ > + adc-chan@0x39 { > + reg = <0x39>; > + qcom,decimation = <512>; > + qcom,ratiometric; > + qcom,hw-settle-time = <200>; > + qcom,avg-samples = <1>; > + qcom,pre-scaling = <1 3>; > + }; > + };
On Tue, 24 Mar 2020 21:14:08 +0530, Jishnu Prakash wrote: > Convert the adc bindings from .txt to .yaml format. > > Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org> > --- > .../devicetree/bindings/iio/adc/qcom,spmi-vadc.txt | 173 -------------------- > .../bindings/iio/adc/qcom,spmi-vadc.yaml | 178 +++++++++++++++++++++ > 2 files changed, 178 insertions(+), 173 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt > create mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml > My bot found errors running 'make dt_binding_check' on your patch: Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dts:20.11-26: Warning (reg_format): /example-0/vadc@3100:reg: property has invalid length (4 bytes) (#address-cells == 1, #size-cells == 1) Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: Warning (pci_device_bus_num): Failed prerequisite 'reg_format' Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: Warning (i2c_bus_reg): Failed prerequisite 'reg_format' Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: Warning (spi_bus_reg): Failed prerequisite 'reg_format' /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: vadc@3100: 'adc-chan@0x39' does not match any of the regexes: '.*-names$', '.*-supply$', '^#.*-cells$', '^#[a-zA-Z0-9,+\\-._]{0,63}$', '^[a-zA-Z][a-zA-Z0-9,+\\-._]{0,63}$', '^[a-zA-Z][a-zA-Z0-9,+\\-._]{0,63}@[0-9a-fA-F]+(,[0-9a-fA-F]+)*$', '^__.*__$', 'pinctrl-[0-9]+' See https://patchwork.ozlabs.org/patch/1260800 If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure dt-schema is up to date: pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade Please check and re-submit.
On Tue, Mar 24, 2020 at 9:15 PM Jishnu Prakash <jprakash@codeaurora.org> wrote: > > Convert the adc bindings from .txt to .yaml format. > > Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org> > --- > .../devicetree/bindings/iio/adc/qcom,spmi-vadc.txt | 173 -------------------- > .../bindings/iio/adc/qcom,spmi-vadc.yaml | 178 +++++++++++++++++++++ > 2 files changed, 178 insertions(+), 173 deletions(-) > delete mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt > create mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml > > diff --git a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt > deleted file mode 100644 > index c878768..0000000 > --- a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt > +++ /dev/null > @@ -1,173 +0,0 @@ > -Qualcomm's SPMI PMIC ADC > - > -- SPMI PMIC voltage ADC (VADC) provides interface to clients to read > - voltage. The VADC is a 15-bit sigma-delta ADC. > -- SPMI PMIC5 voltage ADC (ADC) provides interface to clients to read > - voltage. The VADC is a 16-bit sigma-delta ADC. > - > -VADC node: > - > -- compatible: > - Usage: required > - Value type: <string> > - Definition: Should contain "qcom,spmi-vadc". > - Should contain "qcom,spmi-adc5" for PMIC5 ADC driver. > - Should contain "qcom,spmi-adc-rev2" for PMIC rev2 ADC driver. > - Should contain "qcom,pms405-adc" for PMS405 PMIC > - > -- reg: > - Usage: required > - Value type: <prop-encoded-array> > - Definition: VADC base address in the SPMI PMIC register map. > - > -- #address-cells: > - Usage: required > - Value type: <u32> > - Definition: Must be one. Child node 'reg' property should define ADC > - channel number. > - > -- #size-cells: > - Usage: required > - Value type: <u32> > - Definition: Must be zero. > - > -- #io-channel-cells: > - Usage: required > - Value type: <u32> > - Definition: Must be one. For details about IIO bindings see: > - Documentation/devicetree/bindings/iio/iio-bindings.txt > - > -- interrupts: > - Usage: optional > - Value type: <prop-encoded-array> > - Definition: End of conversion interrupt. > - > -Channel node properties: > - > -- reg: > - Usage: required > - Value type: <u32> > - Definition: ADC channel number. > - See include/dt-bindings/iio/qcom,spmi-vadc.h > - > -- label: > - Usage: required for "qcom,spmi-adc5" and "qcom,spmi-adc-rev2" > - Value type: <empty> > - Definition: ADC input of the platform as seen in the schematics. > - For thermistor inputs connected to generic AMUX or GPIO inputs > - these can vary across platform for the same pins. Hence select > - the platform schematics name for this channel. > - > -- qcom,decimation: > - Usage: optional > - Value type: <u32> > - Definition: This parameter is used to decrease ADC sampling rate. > - Quicker measurements can be made by reducing decimation ratio. > - - For compatible property "qcom,spmi-vadc", valid values are > - 512, 1024, 2048, 4096. If property is not found, default value > - of 512 will be used. > - - For compatible property "qcom,spmi-adc5", valid values are 250, 420 > - and 840. If property is not found, default value of 840 is used. > - - For compatible property "qcom,spmi-adc-rev2", valid values are 256, > - 512 and 1024. If property is not present, default value is 1024. > - > -- qcom,pre-scaling: > - Usage: optional > - Value type: <u32 array> > - Definition: Used for scaling the channel input signal before the signal is > - fed to VADC. The configuration for this node is to know the > - pre-determined ratio and use it for post scaling. Select one from > - the following options. > - <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> > - If property is not found default value depending on chip will be used. > - > -- qcom,ratiometric: > - Usage: optional > - Value type: <empty> > - Definition: Channel calibration type. > - - For compatible property "qcom,spmi-vadc", if this property is > - specified VADC will use the VDD reference (1.8V) and GND for > - channel calibration. If property is not found, channel will be > - calibrated with 0.625V and 1.25V reference channels, also > - known as absolute calibration. > - - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", > - if this property is specified VADC will use the VDD reference > - (1.875V) and GND for channel calibration. If property is not found, > - channel will be calibrated with 0V and 1.25V reference channels, > - also known as absolute calibration. > - > -- qcom,hw-settle-time: > - Usage: optional > - Value type: <u32> > - Definition: Time between AMUX getting configured and the ADC starting > - conversion. The 'hw_settle_time' is an index used from valid values > - and programmed in hardware to achieve the hardware settling delay. > - - For compatible property "qcom,spmi-vadc" and "qcom,spmi-adc-rev2", > - Delay = 100us * (hw_settle_time) for hw_settle_time < 11, > - and 2ms * (hw_settle_time - 10) otherwise. > - Valid values are: 0, 100, 200, 300, 400, 500, 600, 700, 800, > - 900 us and 1, 2, 4, 6, 8, 10 ms. > - If property is not found, channel will use 0us. > - - For compatible property "qcom,spmi-adc5", delay = 15us for > - value 0, 100us * (value) for values < 11, > - and 2ms * (value - 10) otherwise. > - Valid values are: 15, 100, 200, 300, 400, 500, 600, 700, 800, > - 900 us and 1, 2, 4, 6, 8, 10 ms > - Certain controller digital versions have valid values of > - 15, 100, 200, 300, 400, 500, 600, 700, 1, 2, 4, 8, 16, 32, 64, 128 ms > - If property is not found, channel will use 15us. > - > -- qcom,avg-samples: > - Usage: optional > - Value type: <u32> > - Definition: Number of samples to be used for measurement. > - Averaging provides the option to obtain a single measurement > - from the ADC that is an average of multiple samples. The value > - selected is 2^(value). > - - For compatible property "qcom,spmi-vadc", valid values > - are: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 > - If property is not found, 1 sample will be used. > - - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", > - valid values are: 1, 2, 4, 8, 16 > - If property is not found, 1 sample will be used. > - > -NOTE: > - > -For compatible property "qcom,spmi-vadc" following channels, also known as > -reference point channels, are used for result calibration and their channel > -configuration nodes should be defined: > -VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, > -VADC_GND_REF and VADC_VDD_VADC. > - > -Example: > - > -#include <dt-bindings/iio/qcom,spmi-vadc.h> > -#include <linux/irq.h> > -/* ... */ > - > - /* VADC node */ > - pmic_vadc: vadc@3100 { > - compatible = "qcom,spmi-vadc"; > - reg = <0x3100>; > - interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>; > - #address-cells = <1>; > - #size-cells = <0>; > - #io-channel-cells = <1>; > - io-channel-ranges; > - > - /* Channel node */ > - adc-chan@VADC_LR_MUX10_USB_ID { > - reg = <VADC_LR_MUX10_USB_ID>; > - qcom,decimation = <512>; > - qcom,ratiometric; > - qcom,hw-settle-time = <200>; > - qcom,avg-samples = <1>; > - qcom,pre-scaling = <1 3>; > - }; > - }; > - > - /* IIO client node */ > - usb { > - io-channels = <&pmic_vadc VADC_LR_MUX10_USB_ID>; > - io-channel-names = "vadc"; > - }; > diff --git a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml > new file mode 100644 > index 0000000..72db14c > --- /dev/null > +++ b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml > @@ -0,0 +1,178 @@ > +# SPDX-License-Identifier: GPL-2.0-only > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/iio/adc/qcom,spmi-vadc.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Qualcomm's SPMI PMIC ADC > + > +maintainers: > + - Andy Gross <agross@kernel.org> > + - Bjorn Andersson <bjorn.andersson@linaro.org> > + > +description: | > + SPMI PMIC voltage ADC (VADC) provides interface to clients to read > + voltage. The VADC is a 15-bit sigma-delta ADC. > + SPMI PMIC5 voltage ADC (ADC) provides interface to clients to read > + voltage. The VADC is a 16-bit sigma-delta ADC. > + > +properties: > + compatible: > + enum: > + - qcom,spmi-vadc > + - qcom,spmi-adc5 > + - qcom,spmi-adc-rev2 > + - qcom,pms405-adc > + > + reg: > + description: VADC base address in the SPMI PMIC register map > + maxItems: 1 > + > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > + '#io-channel-cells': > + const: 1 > + > + interrupts: > + maxItems: 1 > + description: > + End of conversion interrupt. > + > +required: > + - compatible > + - reg > + - '#address-cells' > + - '#size-cells' > + - '#io-channel-cells' > + > +patternProperties: > + "^[a-z0-9-_@]$": > + type: object > + description: | > + Represents the external channels which are connected to the ADC. > + For compatible property "qcom,spmi-vadc" following channels, also known as > + reference point channels, are used for result calibration and their channel > + configuration nodes should be defined: > + VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, > + VADC_GND_REF and VADC_VDD_VADC. Instead of this note for "qcom,spmi-vadc", you can enforce this through checks in YAML grammar. A simple example can be found in Documentation/devicetree/bindings/thermal/qcom-tsens.yaml. Look for the if, then, else clause which determines how many interrupts need to be defined. > + > + properties: > + reg: > + description: | > + ADC channel number. > + See include/dt-bindings/iio/qcom,spmi-vadc.h > + > + label: > + description: | > + ADC input of the platform as seen in the schematics. > + For thermistor inputs connected to generic AMUX or GPIO inputs > + these can vary across platform for the same pins. Hence select > + the platform schematics name for this channel. It is required > + for "qcom,spmi-adc5" and "qcom,spmi-adc-rev2". > + allOf: > + - $ref: /schemas/types.yaml#/definitions/string You shouldn't need allOf here. Just a "$ref: /schemas/types.yaml#/definitions/string" should be fine. And move it above the description. Same for all the uses of allOf below. > + qcom,decimation: > + description: | > + This parameter is used to decrease ADC sampling rate. > + Quicker measurements can be made by reducing decimation ratio. > + - For compatible property "qcom,spmi-vadc", valid values are > + 512, 1024, 2048, 4096. If property is not found, default value > + of 512 will be used. > + - For compatible property "qcom,spmi-adc5", valid values are 250, 420 > + and 840. If property is not found, default value of 840 is used. > + - For compatible property "qcom,spmi-adc-rev2", valid values are 256, > + 512 and 1024. If property is not present, default value is 1024. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > + As pointed out by Jonathon, please enforce these by keying off the compatible property. > + qcom,pre-scaling: > + description: | > + Used for scaling the channel input signal before the signal is > + fed to VADC. The configuration for this node is to know the > + pre-determined ratio and use it for post scaling. Select one from > + the following options. Please improve this description from the old binding. Does <1 3> mean the signal is scaled 3x or 1/3x? > + <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> > + If property is not found default value depending on chip will be used. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > + > + qcom,ratiometric: > + description: | > + Channel calibration type. > + - For compatible property "qcom,spmi-vadc", if this property is > + specified VADC will use the VDD reference (1.8V) and GND for > + channel calibration. If property is not found, channel will be > + calibrated with 0.625V and 1.25V reference channels, also > + known as absolute calibration. > + - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", > + if this property is specified VADC will use the VDD reference (1.875V) > + and GND for channel calibration. If property is not found, channel > + will be calibrated with 0V and 1.25V reference channels, also known > + as absolute calibration. > + type: boolean > + please enforce these by keying off the compatible property. > + qcom,hw-settle-time: > + description: | > + Time between AMUX getting configured and the ADC starting > + conversion. The 'hw_settle_time' is an index used from valid values > + and programmed in hardware to achieve the hardware settling delay. > + - For compatible property "qcom,spmi-vadc" and "qcom,spmi-adc-rev2", > + Delay = 100us * (hw_settle_time) for hw_settle_time < 11, > + and 2ms * (hw_settle_time - 10) otherwise. > + Valid values are: 0, 100, 200, 300, 400, 500, 600, 700, 800, > + 900 us and 1, 2, 4, 6, 8, 10 ms. > + If property is not found, channel will use 0us. > + - For compatible property "qcom,spmi-adc5", delay = 15us for > + value 0, 100us * (value) for values < 11, > + and 2ms * (value - 10) otherwise. > + Valid values are: 15, 100, 200, 300, 400, 500, 600, 700, 800, > + 900 us and 1, 2, 4, 6, 8, 10 ms > + Certain controller digital versions have valid values of > + 15, 100, 200, 300, 400, 500, 600, 700, 1, 2, 4, 8, 16, 32, 64, 128 ms > + If property is not found, channel will use 15us. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > + please enforce these by keying off the compatible property. > + qcom,avg-samples: > + description: | > + Number of samples to be used for measurement. > + Averaging provides the option to obtain a single measurement > + from the ADC that is an average of multiple samples. The value > + selected is 2^(value). > + - For compatible property "qcom,spmi-vadc", valid values > + are: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 > + If property is not found, 1 sample will be used. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > + please enforce these by keying off the compatible property. > + required: > + - reg > + - diff-channels > + > +examples: > + - | > + /* VADC node */ > + pmic_vadc: vadc@3100 { > + compatible = "qcom,spmi-vadc"; > + reg = <0x3100>; > + interrupts = <0x0 0x31 0x0 0x1>; > + #address-cells = <1>; > + #size-cells = <0>; > + #io-channel-cells = <1>; > + io-channel-ranges; > + > + /* Channel node */ > + adc-chan@0x39 { > + reg = <0x39>; > + qcom,decimation = <512>; > + qcom,ratiometric; > + qcom,hw-settle-time = <200>; > + qcom,avg-samples = <1>; > + qcom,pre-scaling = <1 3>; > + }; > + }; > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project
Hi Jonathan, On 3/28/2020 10:21 PM, Jonathan Cameron wrote: > On Tue, 24 Mar 2020 21:14:08 +0530 > Jishnu Prakash <jprakash@codeaurora.org> wrote: > >> Convert the adc bindings from .txt to .yaml format. >> >> Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org> > Hi Jishnu, > > Looks to me like we can tighten the checks a fair bit in here rather > than just using uint32s > > Now, my yaml isn't great so I won't try to say how, but there are plenty > of examples in tree. > > Thanks, > > Jonathan > > + > + qcom,decimation: > + description: | > + This parameter is used to decrease ADC sampling rate. > + Quicker measurements can be made by reducing decimation ratio. > + - For compatible property "qcom,spmi-vadc", valid values are > + 512, 1024, 2048, 4096. If property is not found, default value > + of 512 will be used. > + - For compatible property "qcom,spmi-adc5", valid values are 250, 420 > + and 840. If property is not found, default value of 840 is used. > + - For compatible property "qcom,spmi-adc-rev2", valid values are 256, > + 512 and 1024. If property is not present, default value is 1024. > + allOf: > + - $ref: /schemas/types.yaml#/definitions/uint32 > Should ideally verify all the values against models etc rather than a uint32 binding. I'll add constraints for all properties for which it's applicable in the next post. > >> + >> + qcom,pre-scaling: >> + description: | >> + Used for scaling the channel input signal before the signal is >> + fed to VADC. The configuration for this node is to know the >> + pre-determined ratio and use it for post scaling. Select one from >> + the following options. >> + <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> > >> + >> +examples: >> + - | >> + /* VADC node */ >> + pmic_vadc: vadc@3100 { > Should really be using generic names, so adc@3100 preferred. I'll change it in the next post.
Hi Rob, On 3/30/2020 9:08 PM, Rob Herring wrote: > On Tue, 24 Mar 2020 21:14:08 +0530, Jishnu Prakash wrote: >> Convert the adc bindings from .txt to .yaml format. >> >> Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org> >> --- >> .../devicetree/bindings/iio/adc/qcom,spmi-vadc.txt | 173 -------------------- >> .../bindings/iio/adc/qcom,spmi-vadc.yaml | 178 +++++++++++++++++++++ >> 2 files changed, 178 insertions(+), 173 deletions(-) >> delete mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt >> create mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml >> > My bot found errors running 'make dt_binding_check' on your patch: > > Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dts:20.11-26: Warning (reg_format): /example-0/vadc@3100:reg: property has invalid length (4 bytes) (#address-cells == 1, #size-cells == 1) > Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: Warning (pci_device_bus_num): Failed prerequisite 'reg_format' > Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: Warning (i2c_bus_reg): Failed prerequisite 'reg_format' > Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: Warning (spi_bus_reg): Failed prerequisite 'reg_format' > /builds/robherring/linux-dt-review/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.example.dt.yaml: vadc@3100: 'adc-chan@0x39' does not match any of the regexes: '.*-names$', '.*-supply$', '^#.*-cells$', '^#[a-zA-Z0-9,+\\-._]{0,63}$', '^[a-zA-Z][a-zA-Z0-9,+\\-._]{0,63}$', '^[a-zA-Z][a-zA-Z0-9,+\\-._]{0,63}@[0-9a-fA-F]+(,[0-9a-fA-F]+)*$', '^__.*__$', 'pinctrl-[0-9]+' > > See https://patchwork.ozlabs.org/patch/1260800 > > If you already ran 'make dt_binding_check' and didn't see the above > error(s), then make sure dt-schema is up to date: > > pip3 install git+https://github.com/devicetree-org/dt-schema.git@master --upgrade > > Please check and re-submit. I have checked it, I'll be fixing this in the next post.
Hi Amit, On 4/3/2020 5:34 PM, Amit Kucheria wrote: > >> +required: >> + - compatible >> + - reg >> + - '#address-cells' >> + - '#size-cells' >> + - '#io-channel-cells' >> + >> +patternProperties: >> + "^[a-z0-9-_@]$": >> + type: object >> + description: | >> + Represents the external channels which are connected to the ADC. >> + For compatible property "qcom,spmi-vadc" following channels, also known as >> + reference point channels, are used for result calibration and their channel >> + configuration nodes should be defined: >> + VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, >> + VADC_GND_REF and VADC_VDD_VADC. > Instead of this note for "qcom,spmi-vadc", you can enforce this > through checks in YAML grammar. > > A simple example can be found in > Documentation/devicetree/bindings/thermal/qcom-tsens.yaml. Look for > the if, then, else clause which determines how many interrupts need to > be defined. I have gone through tsens and other examples, but I'm not able to get a way to apply this kind of constraint, on what child nodes should be present. In this case, the constraint would have to be that for compatible property "qcom,spmi-vadc", there should be at least four child nodes and those four should have their "reg" property fixed to the channel values mentioned above. I can see how to apply constraints on a single property like interrupts in tsens, but I'm not sure if there is a way to specify a lower limit to the number of child nodes or something like "there should be at least one child node with value 0x9 for its "reg" property". I could not find any examples with constraints placed onĀ number of occurrences of a child node. Can you please share an example of such a constraint if you are aware of any or suggest some way by which this kind of constraint can be specified? > >> + >> + properties: >> + reg: >> + description: | >> + ADC channel number. >> + See include/dt-bindings/iio/qcom,spmi-vadc.h >> + >> + label: >> + description: | >> + ADC input of the platform as seen in the schematics. >> + For thermistor inputs connected to generic AMUX or GPIO inputs >> + these can vary across platform for the same pins. Hence select >> + the platform schematics name for this channel. It is required >> + for "qcom,spmi-adc5" and "qcom,spmi-adc-rev2". >> + allOf: >> + - $ref: /schemas/types.yaml#/definitions/string > You shouldn't need allOf here. > > Just a "$ref: /schemas/types.yaml#/definitions/string" should be fine. > And move it above the description. > > Same for all the uses of allOf below. I'll make the change in the next post. > > >> + qcom,decimation: >> + description: | >> + This parameter is used to decrease ADC sampling rate. >> + Quicker measurements can be made by reducing decimation ratio. >> + - For compatible property "qcom,spmi-vadc", valid values are >> + 512, 1024, 2048, 4096. If property is not found, default value >> + of 512 will be used. >> + - For compatible property "qcom,spmi-adc5", valid values are 250, 420 >> + and 840. If property is not found, default value of 840 is used. >> + - For compatible property "qcom,spmi-adc-rev2", valid values are 256, >> + 512 and 1024. If property is not present, default value is 1024. >> + allOf: >> + - $ref: /schemas/types.yaml#/definitions/uint32 >> + > As pointed out by Jonathon, please enforce these by keying off the > compatible property. I'll do this for all properties for which it's applicable in the next post. > >> + qcom,pre-scaling: >> + description: | >> + Used for scaling the channel input signal before the signal is >> + fed to VADC. The configuration for this node is to know the >> + pre-determined ratio and use it for post scaling. Select one from >> + the following options. > Please improve this description from the old binding. Does <1 3> mean > the signal is scaled 3x or 1/3x? <1 3> means it is scaled down to 1/3rd of actual value. I'll add to the description in the next post. > >> + <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> >> + If property is not found default value depending on chip will be used. >> + allOf: >> + - $ref: /schemas/types.yaml#/definitions/uint32 >> +
On Mon, Apr 6, 2020 at 5:15 PM Jishnu Prakash <jprakash@codeaurora.org> wrote: > > Hi Amit, > > On 4/3/2020 5:34 PM, Amit Kucheria wrote: > > > >> +required: > >> + - compatible > >> + - reg > >> + - '#address-cells' > >> + - '#size-cells' > >> + - '#io-channel-cells' > >> + > >> +patternProperties: > >> + "^[a-z0-9-_@]$": > >> + type: object > >> + description: | > >> + Represents the external channels which are connected to the ADC. > >> + For compatible property "qcom,spmi-vadc" following channels, also known as > >> + reference point channels, are used for result calibration and their channel > >> + configuration nodes should be defined: > >> + VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, > >> + VADC_GND_REF and VADC_VDD_VADC. > > Instead of this note for "qcom,spmi-vadc", you can enforce this > > through checks in YAML grammar. > > > > A simple example can be found in > > Documentation/devicetree/bindings/thermal/qcom-tsens.yaml. Look for > > the if, then, else clause which determines how many interrupts need to > > be defined. > > I have gone through tsens and other examples, but I'm not able to get a > way to apply this kind of constraint, on what child nodes should be present. > > In this case, the constraint would have to be that for compatible > property "qcom,spmi-vadc", there should be at least four child nodes and > those four should have their "reg" property fixed to the channel values > mentioned above. I can see how to apply constraints on a single property > like interrupts in tsens, but I'm not sure if there is a way to specify > a lower limit to the number of child nodes or something like "there > should be at least one child node with value 0x9 for its "reg" > property". I could not find any examples with constraints placed on > number of occurrences of a child node. > > Can you please share an example of such a constraint if you are aware of > any or suggest some way by which this kind of constraint can be specified? Hi Jishnu, I misread that particular property. I don't think it is possible to specify child nodes w/o splitting this binding into two, I think. Please go ahead with the rest of changes. I'll keep digging to see if this is possible. Regards, Amit
diff --git a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt deleted file mode 100644 index c878768..0000000 --- a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt +++ /dev/null @@ -1,173 +0,0 @@ -Qualcomm's SPMI PMIC ADC - -- SPMI PMIC voltage ADC (VADC) provides interface to clients to read - voltage. The VADC is a 15-bit sigma-delta ADC. -- SPMI PMIC5 voltage ADC (ADC) provides interface to clients to read - voltage. The VADC is a 16-bit sigma-delta ADC. - -VADC node: - -- compatible: - Usage: required - Value type: <string> - Definition: Should contain "qcom,spmi-vadc". - Should contain "qcom,spmi-adc5" for PMIC5 ADC driver. - Should contain "qcom,spmi-adc-rev2" for PMIC rev2 ADC driver. - Should contain "qcom,pms405-adc" for PMS405 PMIC - -- reg: - Usage: required - Value type: <prop-encoded-array> - Definition: VADC base address in the SPMI PMIC register map. - -- #address-cells: - Usage: required - Value type: <u32> - Definition: Must be one. Child node 'reg' property should define ADC - channel number. - -- #size-cells: - Usage: required - Value type: <u32> - Definition: Must be zero. - -- #io-channel-cells: - Usage: required - Value type: <u32> - Definition: Must be one. For details about IIO bindings see: - Documentation/devicetree/bindings/iio/iio-bindings.txt - -- interrupts: - Usage: optional - Value type: <prop-encoded-array> - Definition: End of conversion interrupt. - -Channel node properties: - -- reg: - Usage: required - Value type: <u32> - Definition: ADC channel number. - See include/dt-bindings/iio/qcom,spmi-vadc.h - -- label: - Usage: required for "qcom,spmi-adc5" and "qcom,spmi-adc-rev2" - Value type: <empty> - Definition: ADC input of the platform as seen in the schematics. - For thermistor inputs connected to generic AMUX or GPIO inputs - these can vary across platform for the same pins. Hence select - the platform schematics name for this channel. - -- qcom,decimation: - Usage: optional - Value type: <u32> - Definition: This parameter is used to decrease ADC sampling rate. - Quicker measurements can be made by reducing decimation ratio. - - For compatible property "qcom,spmi-vadc", valid values are - 512, 1024, 2048, 4096. If property is not found, default value - of 512 will be used. - - For compatible property "qcom,spmi-adc5", valid values are 250, 420 - and 840. If property is not found, default value of 840 is used. - - For compatible property "qcom,spmi-adc-rev2", valid values are 256, - 512 and 1024. If property is not present, default value is 1024. - -- qcom,pre-scaling: - Usage: optional - Value type: <u32 array> - Definition: Used for scaling the channel input signal before the signal is - fed to VADC. The configuration for this node is to know the - pre-determined ratio and use it for post scaling. Select one from - the following options. - <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> - If property is not found default value depending on chip will be used. - -- qcom,ratiometric: - Usage: optional - Value type: <empty> - Definition: Channel calibration type. - - For compatible property "qcom,spmi-vadc", if this property is - specified VADC will use the VDD reference (1.8V) and GND for - channel calibration. If property is not found, channel will be - calibrated with 0.625V and 1.25V reference channels, also - known as absolute calibration. - - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", - if this property is specified VADC will use the VDD reference - (1.875V) and GND for channel calibration. If property is not found, - channel will be calibrated with 0V and 1.25V reference channels, - also known as absolute calibration. - -- qcom,hw-settle-time: - Usage: optional - Value type: <u32> - Definition: Time between AMUX getting configured and the ADC starting - conversion. The 'hw_settle_time' is an index used from valid values - and programmed in hardware to achieve the hardware settling delay. - - For compatible property "qcom,spmi-vadc" and "qcom,spmi-adc-rev2", - Delay = 100us * (hw_settle_time) for hw_settle_time < 11, - and 2ms * (hw_settle_time - 10) otherwise. - Valid values are: 0, 100, 200, 300, 400, 500, 600, 700, 800, - 900 us and 1, 2, 4, 6, 8, 10 ms. - If property is not found, channel will use 0us. - - For compatible property "qcom,spmi-adc5", delay = 15us for - value 0, 100us * (value) for values < 11, - and 2ms * (value - 10) otherwise. - Valid values are: 15, 100, 200, 300, 400, 500, 600, 700, 800, - 900 us and 1, 2, 4, 6, 8, 10 ms - Certain controller digital versions have valid values of - 15, 100, 200, 300, 400, 500, 600, 700, 1, 2, 4, 8, 16, 32, 64, 128 ms - If property is not found, channel will use 15us. - -- qcom,avg-samples: - Usage: optional - Value type: <u32> - Definition: Number of samples to be used for measurement. - Averaging provides the option to obtain a single measurement - from the ADC that is an average of multiple samples. The value - selected is 2^(value). - - For compatible property "qcom,spmi-vadc", valid values - are: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 - If property is not found, 1 sample will be used. - - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", - valid values are: 1, 2, 4, 8, 16 - If property is not found, 1 sample will be used. - -NOTE: - -For compatible property "qcom,spmi-vadc" following channels, also known as -reference point channels, are used for result calibration and their channel -configuration nodes should be defined: -VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, -VADC_GND_REF and VADC_VDD_VADC. - -Example: - -#include <dt-bindings/iio/qcom,spmi-vadc.h> -#include <linux/irq.h> -/* ... */ - - /* VADC node */ - pmic_vadc: vadc@3100 { - compatible = "qcom,spmi-vadc"; - reg = <0x3100>; - interrupts = <0x0 0x31 0x0 IRQ_TYPE_EDGE_RISING>; - #address-cells = <1>; - #size-cells = <0>; - #io-channel-cells = <1>; - io-channel-ranges; - - /* Channel node */ - adc-chan@VADC_LR_MUX10_USB_ID { - reg = <VADC_LR_MUX10_USB_ID>; - qcom,decimation = <512>; - qcom,ratiometric; - qcom,hw-settle-time = <200>; - qcom,avg-samples = <1>; - qcom,pre-scaling = <1 3>; - }; - }; - - /* IIO client node */ - usb { - io-channels = <&pmic_vadc VADC_LR_MUX10_USB_ID>; - io-channel-names = "vadc"; - }; diff --git a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml new file mode 100644 index 0000000..72db14c --- /dev/null +++ b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml @@ -0,0 +1,178 @@ +# SPDX-License-Identifier: GPL-2.0-only +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/iio/adc/qcom,spmi-vadc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm's SPMI PMIC ADC + +maintainers: + - Andy Gross <agross@kernel.org> + - Bjorn Andersson <bjorn.andersson@linaro.org> + +description: | + SPMI PMIC voltage ADC (VADC) provides interface to clients to read + voltage. The VADC is a 15-bit sigma-delta ADC. + SPMI PMIC5 voltage ADC (ADC) provides interface to clients to read + voltage. The VADC is a 16-bit sigma-delta ADC. + +properties: + compatible: + enum: + - qcom,spmi-vadc + - qcom,spmi-adc5 + - qcom,spmi-adc-rev2 + - qcom,pms405-adc + + reg: + description: VADC base address in the SPMI PMIC register map + maxItems: 1 + + '#address-cells': + const: 1 + + '#size-cells': + const: 0 + + '#io-channel-cells': + const: 1 + + interrupts: + maxItems: 1 + description: + End of conversion interrupt. + +required: + - compatible + - reg + - '#address-cells' + - '#size-cells' + - '#io-channel-cells' + +patternProperties: + "^[a-z0-9-_@]$": + type: object + description: | + Represents the external channels which are connected to the ADC. + For compatible property "qcom,spmi-vadc" following channels, also known as + reference point channels, are used for result calibration and their channel + configuration nodes should be defined: + VADC_REF_625MV and/or VADC_SPARE1(based on PMIC version) VADC_REF_1250MV, + VADC_GND_REF and VADC_VDD_VADC. + + properties: + reg: + description: | + ADC channel number. + See include/dt-bindings/iio/qcom,spmi-vadc.h + + label: + description: | + ADC input of the platform as seen in the schematics. + For thermistor inputs connected to generic AMUX or GPIO inputs + these can vary across platform for the same pins. Hence select + the platform schematics name for this channel. It is required + for "qcom,spmi-adc5" and "qcom,spmi-adc-rev2". + allOf: + - $ref: /schemas/types.yaml#/definitions/string + + qcom,decimation: + description: | + This parameter is used to decrease ADC sampling rate. + Quicker measurements can be made by reducing decimation ratio. + - For compatible property "qcom,spmi-vadc", valid values are + 512, 1024, 2048, 4096. If property is not found, default value + of 512 will be used. + - For compatible property "qcom,spmi-adc5", valid values are 250, 420 + and 840. If property is not found, default value of 840 is used. + - For compatible property "qcom,spmi-adc-rev2", valid values are 256, + 512 and 1024. If property is not present, default value is 1024. + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + + qcom,pre-scaling: + description: | + Used for scaling the channel input signal before the signal is + fed to VADC. The configuration for this node is to know the + pre-determined ratio and use it for post scaling. Select one from + the following options. + <1 1>, <1 3>, <1 4>, <1 6>, <1 20>, <1 8>, <10 81>, <1 10> + If property is not found default value depending on chip will be used. + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + + qcom,ratiometric: + description: | + Channel calibration type. + - For compatible property "qcom,spmi-vadc", if this property is + specified VADC will use the VDD reference (1.8V) and GND for + channel calibration. If property is not found, channel will be + calibrated with 0.625V and 1.25V reference channels, also + known as absolute calibration. + - For compatible property "qcom,spmi-adc5" and "qcom,spmi-adc-rev2", + if this property is specified VADC will use the VDD reference (1.875V) + and GND for channel calibration. If property is not found, channel + will be calibrated with 0V and 1.25V reference channels, also known + as absolute calibration. + type: boolean + + qcom,hw-settle-time: + description: | + Time between AMUX getting configured and the ADC starting + conversion. The 'hw_settle_time' is an index used from valid values + and programmed in hardware to achieve the hardware settling delay. + - For compatible property "qcom,spmi-vadc" and "qcom,spmi-adc-rev2", + Delay = 100us * (hw_settle_time) for hw_settle_time < 11, + and 2ms * (hw_settle_time - 10) otherwise. + Valid values are: 0, 100, 200, 300, 400, 500, 600, 700, 800, + 900 us and 1, 2, 4, 6, 8, 10 ms. + If property is not found, channel will use 0us. + - For compatible property "qcom,spmi-adc5", delay = 15us for + value 0, 100us * (value) for values < 11, + and 2ms * (value - 10) otherwise. + Valid values are: 15, 100, 200, 300, 400, 500, 600, 700, 800, + 900 us and 1, 2, 4, 6, 8, 10 ms + Certain controller digital versions have valid values of + 15, 100, 200, 300, 400, 500, 600, 700, 1, 2, 4, 8, 16, 32, 64, 128 ms + If property is not found, channel will use 15us. + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + + qcom,avg-samples: + description: | + Number of samples to be used for measurement. + Averaging provides the option to obtain a single measurement + from the ADC that is an average of multiple samples. The value + selected is 2^(value). + - For compatible property "qcom,spmi-vadc", valid values + are: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 + If property is not found, 1 sample will be used. + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + + required: + - reg + - diff-channels + +examples: + - | + /* VADC node */ + pmic_vadc: vadc@3100 { + compatible = "qcom,spmi-vadc"; + reg = <0x3100>; + interrupts = <0x0 0x31 0x0 0x1>; + #address-cells = <1>; + #size-cells = <0>; + #io-channel-cells = <1>; + io-channel-ranges; + + /* Channel node */ + adc-chan@0x39 { + reg = <0x39>; + qcom,decimation = <512>; + qcom,ratiometric; + qcom,hw-settle-time = <200>; + qcom,avg-samples = <1>; + qcom,pre-scaling = <1 3>; + }; + };
Convert the adc bindings from .txt to .yaml format. Signed-off-by: Jishnu Prakash <jprakash@codeaurora.org> --- .../devicetree/bindings/iio/adc/qcom,spmi-vadc.txt | 173 -------------------- .../bindings/iio/adc/qcom,spmi-vadc.yaml | 178 +++++++++++++++++++++ 2 files changed, 178 insertions(+), 173 deletions(-) delete mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt create mode 100644 Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.yaml