hwmon: qpnp-adc-voltage: Add optional VADC property

Add option to select whether a fresh calibration
needs to be performed when performing the channel measurement.
If the property is not present the default value of
using calibration measurement collected from a timer
will be used. For most cases using a measurement collected
from a timer interval should suffice and the default value
can be used.

Change-Id: I632a9466f04d5d0712de436fc3e1251f7e2e7ad2
Signed-off-by: Siddartha Mohanadoss <smohanad@codeaurora.org>
This commit is contained in:
Siddartha Mohanadoss 2016-06-16 17:22:48 -07:00 committed by Kyle Yan
parent 3213a9e52a
commit 3e39d1775a
2 changed files with 32 additions and 5 deletions

View file

@ -8,8 +8,8 @@ for the USR peripheral of the VADC.
VADC node
Required properties:
- compatible : should be "qcom,qpnp-vadc" for Voltage ADC driver and
"qcom,qpnp-vadc-hc" for VADC_HC voltage ADC driver.
- compatible : should be "qcom,qpnp-vadc" for Voltage ADC device driver and
"qcom,qpnp-vadc-hc" for VADC_HC voltage ADC device driver.
- reg : offset and length of the PMIC Aribter register map.
- address-cells : Must be one.
- size-cells : Must be zero.
@ -40,6 +40,12 @@ Optional properties:
by the thermal framework.
- hkadc_ldo-supply : Add this property if VADC needs to perform a Software Vote for the HKADC.
- hkadc_ok-supply : Add this property if the VADC needs to perform a Software vote for the HKADC VREG_OK.
- qcom,cal-val : Add this property for VADC_HC voltage ADC device to select from the following
unsigned int. If the property is not present the default calibration value of
using the timer value is chosen.
0 : The calibration values used for measurement are from a timer.
1 : Forces a fresh measurement for calibration values at the same time
measurement is taken.
Client required property:
- qcom,<consumer name>-vadc : The phandle to the corresponding vadc device.
@ -51,11 +57,15 @@ Required properties:
- label : Channel name used for sysfs entry.
- reg : AMUX channel number.
- qcom,decimation : Sampling rate to use for the individual channel measurement.
Select from following unsigned int.
Select from following unsigned int for Voltage ADC device.
0 : 512
1 : 1K
2 : 2K
3 : 4K
Select from following unsigned int for VADC_HC voltage ADC device.
0 : 256
1 : 512
2 : 1024
- qcom,pre-div-channel-scaling : Pre-div used for the channel before the signal
is being measured. Some of the AMUX channels
support dividing the signal from a predetermined
@ -109,7 +119,7 @@ Required properties:
- qcom,fast-avg-setup : Average number of samples to be used for measurement. Fast 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)
Select from the following unsigned int.
Select from the following unsigned int for Voltage ADC device.
0 : 1
1 : 2
2 : 4
@ -119,6 +129,12 @@ Required properties:
6 : 64
7 : 128
8 : 256
Select from the following unsigned int for VADC_HC ADC device.
0 : 1
1 : 2
2 : 4
3 : 8
4 : 16
Example:
/* Main Node */

View file

@ -1789,7 +1789,7 @@ int32_t qpnp_adc_get_devicetree_data(struct platform_device *pdev,
struct qpnp_adc_properties *adc_prop;
struct qpnp_adc_amux_properties *amux_prop;
int count_adc_channel_list = 0, decimation, rc = 0, i = 0;
int decimation_tm_hc = 0, fast_avg_setup_tm_hc = 0;
int decimation_tm_hc = 0, fast_avg_setup_tm_hc = 0, cal_val_hc = 0;
bool adc_hc;
if (!node)
@ -1948,6 +1948,17 @@ int32_t qpnp_adc_get_devicetree_data(struct platform_device *pdev,
fast_avg_setup = fast_avg_setup_tm_hc;
}
if (of_device_is_compatible(node, "qcom,qpnp-vadc-hc")) {
rc = of_property_read_u32(child, "qcom,cal-val",
&cal_val_hc);
if (rc) {
pr_debug("Use calibration value from timer\n");
adc_channel_list[i].cal_val = ADC_TIMER_CAL;
} else {
adc_channel_list[i].cal_val = cal_val_hc;
}
}
/* Individual channel properties */
adc_channel_list[i].name = (char *)channel_name;
adc_channel_list[i].channel_num = channel_num;