329 lines
12 KiB
Text
329 lines
12 KiB
Text
|
|
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-gen3" for PMIC5 Gen3 ADC.
|
||
|
|
Should contain "qcom,spmi-adc7" for PMIC7 ADC.
|
||
|
|
Should contain "qcom,spmi-adc5" for PMIC5 ADC.
|
||
|
|
Should contain "qcom,spmi-adc-rev2" for PMIC rev2 ADC.
|
||
|
|
Should contain "qcom,pms405-adc" for PMS405 PMIC
|
||
|
|
Should contain "qcom,spmi-adc5-lite" for PMIC5 ADC-lite.
|
||
|
|
Should contain "qcom,spmi-adc7-sw-calib" for PMIC7 SW-calibrated ADC.
|
||
|
|
- reg:
|
||
|
|
Usage: required
|
||
|
|
Value type: <prop-encoded-array>
|
||
|
|
Definition: VADC base address in the SPMI PMIC register map.
|
||
|
|
|
||
|
|
- qcom,debug-base:
|
||
|
|
Usage: optional
|
||
|
|
Value type: <u32>
|
||
|
|
Definition: Debug ADC peripheral base address in the SPMI PMIC
|
||
|
|
register map. Only applicable for devices with compatible
|
||
|
|
property "qcom,spmi-adc5-gen3".
|
||
|
|
|
||
|
|
- #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.
|
||
|
|
|
||
|
|
- interrupt-names:
|
||
|
|
Usage: optional
|
||
|
|
Value type: <string-array>
|
||
|
|
Definition: Specifies the interrupt names for ADC SDAMs. Names should
|
||
|
|
be defined as "adc-sdam<N>" where <N> represents the SDAM index.
|
||
|
|
|
||
|
|
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", "qcom,spmi-adc7", "qcom,spmi-adc5-gen3"
|
||
|
|
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-adc7" and "qcom,spmi-adc5-gen3",
|
||
|
|
valid values are 85, 340 and 1360. If property is not found, default
|
||
|
|
value of 1360 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>, <1 16>,
|
||
|
|
<32 100>, <14, 100>, <28, 100>, <1000 305185>, <1000 610370>
|
||
|
|
|
||
|
|
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", "qcom,spmi-adc7",
|
||
|
|
"qcom,spmi-adc5-gen3" 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,no-cal:
|
||
|
|
Usage: optional
|
||
|
|
Value type: <empty>
|
||
|
|
Definition: Channel calibration type.
|
||
|
|
- For compatible property "qcom,spmi-adc7-sw-calib", if this property
|
||
|
|
is specified for a channel, VADC will not use any reference channels
|
||
|
|
for that channel's calibration. It is needed for the three calibration
|
||
|
|
channels alone (ADC7_REF_GND, ADC7_1P25VREF and ADC7_VREF_VADC),
|
||
|
|
mutually exclusive with ratiometric calibration and not meant for any
|
||
|
|
other compatible property. If property is not found, channel will be
|
||
|
|
calibrated with 0.625V 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.
|
||
|
|
- For compatible property "qcom,spmi-adc7" or "qcom,spmi-adc5-gen3",
|
||
|
|
delay = 15us for value 0, 100us * (value) for values < 8, 1ms for value 8
|
||
|
|
and 2ms * (value - 8) otherwise.
|
||
|
|
Valid values are: 15, 100, 200, 300, 400, 500, 600, 700, 1000, 2000,
|
||
|
|
4000, 8000, 16000, 32000, 64000, 128000 us.
|
||
|
|
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", "qcom,spmi-adc7",
|
||
|
|
"qcom,spmi-adc5-gen3" and "qcom,spmi-adc-rev2",
|
||
|
|
valid values are: 1, 2, 4, 8, 16.
|
||
|
|
If property is not found, 1 sample will be used.
|
||
|
|
|
||
|
|
- qcom,scale-fn-type:
|
||
|
|
Usage: optional
|
||
|
|
Value type: <u32>
|
||
|
|
Definition: The index of the VADC scale function used to convert raw ADC
|
||
|
|
code to physical scaled units for the channel. Defined for compatible
|
||
|
|
properties "qcom,spmi-adc5", "qcom,spmi-adc5-gen3" and "qcom,spmi-adc7".
|
||
|
|
See include/dt-bindings/iio/qcom,spmi-vadc.h.
|
||
|
|
|
||
|
|
- qcom,adc-tm-type:
|
||
|
|
Usage: optional
|
||
|
|
Value type: <u32>
|
||
|
|
Definition: Type of ADC_TM usage defined for a given channel. Valid values
|
||
|
|
are 0-3. Defined for compatible property "qcom,spmi-adc5-gen3".
|
||
|
|
- Value 0 indicates it will not be used for ADC_TM.
|
||
|
|
- Value 1 indicates it will be used for thermistors, for detecting
|
||
|
|
temperature threshold violations and temperature reads.
|
||
|
|
- Value 2 indicates it will be used for thermistors, for temperature
|
||
|
|
reads alone.
|
||
|
|
- Value 3 indicates it will be used for non-thermal clients, for
|
||
|
|
detecting threshold violations for that channel.
|
||
|
|
|
||
|
|
- qcom,rscale-type:
|
||
|
|
Usage: optional
|
||
|
|
Value type: <u32>
|
||
|
|
Definition: Type of reverse scaling function used for ADC_TM channels. Valid only
|
||
|
|
for the case of non-thermal ADC_TM client. Valid value at present is only
|
||
|
|
0 for reverse scaling of default voltage scaling function. Defined for
|
||
|
|
compatible property "qcom,spmi-adc5-gen3".
|
||
|
|
|
||
|
|
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.
|
||
|
|
|
||
|
|
For compatible property "qcom,spmi-adc7-sw-calib" following channels, also
|
||
|
|
known as reference point channels, are used for result calibration and their
|
||
|
|
channel configuration nodes should be defined:
|
||
|
|
ADC7_REF_GND, ADC7_1P25VREF and ADC7_VREF_VADC.
|
||
|
|
|
||
|
|
Example1:
|
||
|
|
|
||
|
|
#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";
|
||
|
|
};
|
||
|
|
|
||
|
|
Example2:
|
||
|
|
|
||
|
|
#include <dt-bindings/iio/qcom,spmi-adc5-gen3-pm5100.h>
|
||
|
|
#include <linux/irq.h>
|
||
|
|
/* ... */
|
||
|
|
|
||
|
|
/* VADC node */
|
||
|
|
pm5100_adc: adc@8000 {
|
||
|
|
compatible = "qcom,spmi-adc-gen3";
|
||
|
|
reg = <0x8000>;
|
||
|
|
#address-cells = <1>;
|
||
|
|
#size-cells = <0>;
|
||
|
|
interrupts = <0x0 0x80 0x0 IRQ_TYPE_EDGE_RISING>;
|
||
|
|
interrupt-names = "adc";
|
||
|
|
#io-channel-cells = <1>;
|
||
|
|
io-channel-ranges;
|
||
|
|
#thermal-sensor-cells = <1>;
|
||
|
|
|
||
|
|
pm5100_die_temp {
|
||
|
|
reg = <PM5100_ADC5_GEN3_DIE_TEMP>;
|
||
|
|
label = "pm5100_die_temp";
|
||
|
|
qcom,pre-scaling = <1 1>;
|
||
|
|
};
|
||
|
|
|
||
|
|
pm5100_xo_therm {
|
||
|
|
reg = <PM5100_ADC5_GEN3_XO_THERM>;
|
||
|
|
label = "pm5100_xo_therm";
|
||
|
|
qcom,ratiometric;
|
||
|
|
qcom,hw-settle-time = <200>;
|
||
|
|
qcom,pre-scaling = <1 1>;
|
||
|
|
qcom,adc-tm-type = <1>;
|
||
|
|
};
|
||
|
|
|
||
|
|
pm5100_vph_pwr {
|
||
|
|
reg = <PM5100_ADC5_GEN3_VPH_PWR>;
|
||
|
|
label = "pm5100_vph_pwr";
|
||
|
|
qcom,pre-scaling = <1 3>;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
/* IIO client node */
|
||
|
|
batt {
|
||
|
|
io-channels = <&pm5100_adc PM5100_ADC5_GEN3_VPH_PWR>;
|
||
|
|
io-channel-names = "vph_pwr";
|
||
|
|
};
|
||
|
|
|
||
|
|
Example3:
|
||
|
|
|
||
|
|
#include <dt-bindings/iio/qcom,spmi-vadc.h>
|
||
|
|
#include <linux/irq.h>
|
||
|
|
/* ... */
|
||
|
|
|
||
|
|
/* VADC node */
|
||
|
|
pmr735a_vadc: vadc@3600 {
|
||
|
|
compatible = "qcom,spmi-adc7-sw-calib";
|
||
|
|
reg = <0x3600>, <0x3900>;
|
||
|
|
reg-names = "adc5-sw-calib-pbs-base", "adc5-sw-calib-cmn-base";
|
||
|
|
interrupts = <0x4 0x36 0x0 IRQ_TYPE_EDGE_RISING>;
|
||
|
|
#address-cells = <1>;
|
||
|
|
#size-cells = <0>;
|
||
|
|
#io-channel-cells = <1>;
|
||
|
|
io-channel-ranges;
|
||
|
|
|
||
|
|
/* Channel node */
|
||
|
|
pmr735a_die_temp {
|
||
|
|
reg = <ADC7_DIE_TEMP>;
|
||
|
|
label = "pmr735a_die_temp";
|
||
|
|
qcom,pre-scaling = <1 1>;
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
/* IIO client node */
|
||
|
|
pmr735a_tz {
|
||
|
|
io-channels = <&pmr735a_vadc ADC7_DIE_TEMP>;
|
||
|
|
io-channel-names = "thermal";
|
||
|
|
};
|