Re: [PATCH v3 1/3] dt-bindings: iio: adc: Add DT binding document for PMIC5 ADC

Jonathan Cameron
2018-07-28T11:11:38Z

On Wed, 25 Jul 2018 16:44:08 -0700
Siddartha Mohanadoss <smohanad@codeaurora.org> wrote:

> PMIC5 ADC has support for clients to measure voltage and current
> on inputs connected to the PMIC. Clients include reading voltage
> phone power and on board system thermistors for thermal management.
> ADC5 on certain PMIC has support to read battery current.
>
> This change adds documentation.
>
> Signed-off-by: Siddartha Mohanadoss <smohanad@codeaurora.org>
I think this is all fairly straight forward, but it's sheer size makes
me wary that I might have missed something. Hence I'll definitely be
wanting a DT ack on this one!

Thanks,

Jonathan

> ---
> .../devicetree/bindings/iio/adc/qcom,spmi-vadc.txt | 77 ++++++++++----
> include/dt-bindings/iio/qcom,spmi-vadc.h | 115 ++++++++++++++++++++-
> 2 files changed, 172 insertions(+), 20 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt
> index 0fb4613..8498f11 100644
> --- a/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt
> +++ b/Documentation/devicetree/bindings/iio/adc/qcom,spmi-vadc.txt
> @@ -1,7 +1,9 @@
> -Qualcomm's SPMI PMIC voltage ADC
> +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 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:
>
> @@ -9,6 +11,8 @@ VADC node:
> 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.
>
> - reg:
> Usage: required
> @@ -45,13 +49,26 @@ Channel node properties:
> 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.
> - Valid values are 512, 1024, 2048, 4096.
> - If property is not found, default value of 512 will be used.
> + - 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
> @@ -66,21 +83,38 @@ Channel node properties:
> - qcom,ratiometric:
> Usage: optional
> Value type: <empty>
> - Definition: Channel calibration type. 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.
> + 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. Delay = 100us * (value) for value < 11, and
> - 2ms * (value - 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.
> + 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
> @@ -89,13 +123,18 @@ Channel node properties:
> 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).
> - 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-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:
>
> -Following channels, also known as reference point channels, are used for
> -result calibration and their channel configuration nodes should be defined:
> +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.
>
> diff --git a/include/dt-bindings/iio/qcom,spmi-vadc.h b/include/dt-bindings/iio/qcom,spmi-vadc.h
> index 42121fa..bf54b5a 100644
> --- a/include/dt-bindings/iio/qcom,spmi-vadc.h
> +++ b/include/dt-bindings/iio/qcom,spmi-vadc.h
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
> + * Copyright (c) 2012-2014,2018 The Linux Foundation. All rights reserved.
> *
> * This program is free software; you can redistribute it and/or modify
> * it under the terms of the GNU General Public License version 2 and
> @@ -116,4 +116,117 @@
> #define VADC_LR_MUX10_PU1_PU2_AMUX_USB_ID 0xf9
> #define VADC_LR_MUX3_BUF_PU1_PU2_XO_THERM 0xfc
>
> +/* ADC channels for SPMI PMIC5 */
> +
> +#define ADC5_REF_GND 0x00
> +#define ADC5_1P25VREF 0x01
> +#define ADC5_VREF_VADC 0x02
> +#define ADC5_VREF_VADC5_DIV_3 0x82
> +#define ADC5_VPH_PWR 0x83
> +#define ADC5_VBAT_SNS 0x84
> +#define ADC5_VCOIN 0x85
> +#define ADC5_DIE_TEMP 0x06
> +#define ADC5_USB_IN_I 0x07
> +#define ADC5_USB_IN_V_16 0x08
> +#define ADC5_CHG_TEMP 0x09
> +#define ADC5_BAT_THERM 0x0a
> +#define ADC5_BAT_ID 0x0b
> +#define ADC5_XO_THERM 0x0c
> +#define ADC5_AMUX_THM1 0x0d
> +#define ADC5_AMUX_THM2 0x0e
> +#define ADC5_AMUX_THM3 0x0f
> +#define ADC5_AMUX_THM4 0x10
> +#define ADC5_AMUX_THM5 0x11
> +#define ADC5_GPIO1 0x12
> +#define ADC5_GPIO2 0x13
> +#define ADC5_GPIO3 0x14
> +#define ADC5_GPIO4 0x15
> +#define ADC5_GPIO5 0x16
> +#define ADC5_GPIO6 0x17
> +#define ADC5_GPIO7 0x18
> +#define ADC5_SBUx 0x99
> +#define ADC5_MID_CHG_DIV6 0x1e
> +#define ADC5_OFF 0xff
> +
> +/* 30k pull-up1 */
> +#define ADC5_BAT_THERM_30K_PU 0x2a
> +#define ADC5_BAT_ID_30K_PU 0x2b
> +#define ADC5_XO_THERM_30K_PU 0x2c
> +#define ADC5_AMUX_THM1_30K_PU 0x2d
> +#define ADC5_AMUX_THM2_30K_PU 0x2e
> +#define ADC5_AMUX_THM3_30K_PU 0x2f
> +#define ADC5_AMUX_THM4_30K_PU 0x30
> +#define ADC5_AMUX_THM5_30K_PU 0x31
> +#define ADC5_GPIO1_30K_PU 0x32
> +#define ADC5_GPIO2_30K_PU 0x33
> +#define ADC5_GPIO3_30K_PU 0x34
> +#define ADC5_GPIO4_30K_PU 0x35
> +#define ADC5_GPIO5_30K_PU 0x36
> +#define ADC5_GPIO6_30K_PU 0x37
> +#define ADC5_GPIO7_30K_PU 0x38
> +#define ADC5_SBUx_30K_PU 0x39
> +
> +/* 100k pull-up2 */
> +#define ADC5_BAT_THERM_100K_PU 0x4a
> +#define ADC5_BAT_ID_100K_PU 0x4b
> +#define ADC5_XO_THERM_100K_PU 0x4c
> +#define ADC5_AMUX_THM1_100K_PU 0x4d
> +#define ADC5_AMUX_THM2_100K_PU 0x4e
> +#define ADC5_AMUX_THM3_100K_PU 0x4f
> +#define ADC5_AMUX_THM4_100K_PU 0x50
> +#define ADC5_AMUX_THM5_100K_PU 0x51
> +#define ADC5_GPIO1_100K_PU 0x52
> +#define ADC5_GPIO2_100K_PU 0x53
> +#define ADC5_GPIO3_100K_PU 0x54
> +#define ADC5_GPIO4_100K_PU 0x55
> +#define ADC5_GPIO5_100K_PU 0x56
> +#define ADC5_GPIO6_100K_PU 0x57
> +#define ADC5_GPIO7_100K_PU 0x58
> +#define ADC5_SBUx_100K_PU 0x59
> +
> +/* 400k pull-up3 */
> +#define ADC5_BAT_THERM_400K_PU 0x6a
> +#define ADC5_BAT_ID_400K_PU 0x6b
> +#define ADC5_XO_THERM_400K_PU 0x6c
> +#define ADC5_AMUX_THM1_400K_PU 0x6d
> +#define ADC5_AMUX_THM2_400K_PU 0x6e
> +#define ADC5_AMUX_THM3_400K_PU 0x6f
> +#define ADC5_AMUX_THM4_400K_PU 0x70
> +#define ADC5_AMUX_THM5_400K_PU 0x71
> +#define ADC5_GPIO1_400K_PU 0x72
> +#define ADC5_GPIO2_400K_PU 0x73
> +#define ADC5_GPIO3_400K_PU 0x74
> +#define ADC5_GPIO4_400K_PU 0x75
> +#define ADC5_GPIO5_400K_PU 0x76
> +#define ADC5_GPIO6_400K_PU 0x77
> +#define ADC5_GPIO7_400K_PU 0x78
> +#define ADC5_SBUx_400K_PU 0x79
> +
> +/* 1/3 Divider */
> +#define ADC5_GPIO1_DIV3 0x92
> +#define ADC5_GPIO2_DIV3 0x93
> +#define ADC5_GPIO3_DIV3 0x94
> +#define ADC5_GPIO4_DIV3 0x95
> +#define ADC5_GPIO5_DIV3 0x96
> +#define ADC5_GPIO6_DIV3 0x97
> +#define ADC5_GPIO7_DIV3 0x98
> +#define ADC5_SBUx_DIV3 0x99
> +
> +/* Current and combined current/voltage channels */
> +#define ADC5_INT_EXT_ISENSE 0xa1
> +#define ADC5_PARALLEL_ISENSE 0xa5
> +#define ADC5_CUR_REPLICA_VDS 0xa7
> +#define ADC5_CUR_SENS_BATFET_VDS_OFFSET 0xa9
> +#define ADC5_CUR_SENS_REPLICA_VDS_OFFSET 0xab
> +#define ADC5_EXT_SENS_OFFSET 0xad
> +
> +#define ADC5_INT_EXT_ISENSE_VBAT_VDATA 0xb0
> +#define ADC5_INT_EXT_ISENSE_VBAT_IDATA 0xb1
> +#define ADC5_EXT_ISENSE_VBAT_VDATA 0xb2
> +#define ADC5_EXT_ISENSE_VBAT_IDATA 0xb3
> +#define ADC5_PARALLEL_ISENSE_VBAT_VDATA 0xb4
> +#define ADC5_PARALLEL_ISENSE_VBAT_IDATA 0xb5
> +
> +#define ADC5_MAX_CHANNEL 0xc0
> +
> #endif /* _DT_BINDINGS_QCOM_SPMI_VADC_H */