Qualcomm's QPNP PMIC current ADC driver

QPNP PMIC current ADC (IADC) provides interface to clients to read
current. A 16 bit ADC is used for current measurements. There are multiple
peripherals to the IADC and the scope of the driver is to provide interface
for the USR peripheral of the IADC.

IADC node

Required properties:
- compatible : should be "qcom,qpnp-iadc" for Current ADC driver.
- reg : offset and length of the PMIC Arbiter register map.
- reg-names : resource names used for the physical base address of the PMIC IADC
	      peripheral, the SMBB_BAT_IF_TRIM_CNST_RDS register.
	      Should be "iadc-base" for the PMIC IADC peripheral base register.
	      Should be "batt-id-trim-cnst-rds" for reading the
	      SMBB_BAT_IF_TRIM_CNST_RDS register.
- address-cells : Must be one.
- size-cells : Must be zero.
- interrupts : The USR bank peripheral IADC interrupt.
- interrupt-names : Should contain "eoc-int-en-set".
- qcom,adc-bit-resolution : Bit resolution of the ADC.
- qcom,adc-vdd-reference : Voltage reference used by the ADC.

Optional properties:
- qcom,rsense : Use this property when external rsense should be used
		for current calculation and specify the units in nano-ohms.
- qcom,iadc-poll-eoc: Use polling instead of interrupts for End of Conversion completion.
- qcom,use-default-rds-trim : Add this property to check if certain conditions are to be checked
			      reading the SMBB_BAT_IF_CNST_RDS, IADC_RDS trim register and
			      manufacturer type. Check the driver for conditions that each of the type.
			      0 : Select this type to read the IADC and SMBB trim register and
				  apply the default RSENSE if conditions are met.
			      1 : Select this type to read the IADC, SMBB trim register and
				  manufacturer type and apply the default RSENSE if conditions are met.

Channel node
NOTE: Atleast one Channel node is required.

Client required property:
- qcom,<consumer name>-iadc : The phandle to the corresponding iadc device.
			The consumer name passed to the driver when calling
			qpnp_get_iadc() is used to associate the client
			with the corresponding device.

Required properties:
- label : Channel name used for sysfs entry.
- reg : AMUX channel number.
- qcom,channel-num : Channel number associated to the AMUX input.
- qcom,decimation : Sampling rate to use for the individual channel measurement.
		    Select from the following unsigned int.
		    0 : 512
		    1 : 1K
		    2 : 2K
		    3 : 4K
- qcom,pre-div-channel-scaling : Pre-div used for the channel before the signal
				 is being measured.
- qcom,calibration-type : Calibration point values vary with temperature.
			  For improved accuracy fresh gain and offset point values
			  can be used for calibration. Reading fresh values for ever
			  read affects the reading time. Application can use the historic
			  values used from the trim register values.
			  Select from the following strings.
			  "absolute" : Uses TRIM gain and offset values for calibration.
			  "ratiometric" : Calculate the gain and offset calibration value when an ADC
			  	    request is issued.
- qcom,scale-function : Scaling fuction used to convert raw ADC code to units specific to
			a given channel.
			Select from the following unsigned int.
			0 : Default scaling to convert raw adc code to voltage.
			1 : Conversion to temperature based on btm parameters.
			2 : Returns result in milli degree's Centigrade.
			3 : Returns current across 0.1 ohm resistor.
			4 : Returns XO thermistor voltage in degree's Centigrade.
- qcom,hw-settle-time : Settling period for the channel before ADC read.
			Select from the following unsigned int.
			0 : 0us
			1 : 100us
			2 : 200us
			3 : 300us
			4 : 400us
			5 : 500us
			6 : 600us
			7 : 700us
			8 : 800us
			9 : 900us
			0xa : 1ms
			0xb : 2ms
			0xc : 4ms
			0xd : 6ms
			0xe : 8ms
			0xf : 10ms
- 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.
			0 : 1
			1 : 2
			2 : 4
			3 : 8
			4 : 16
			5 : 32
			6 : 64
			7 : 128
			8 : 256
- qcom,iadc-vadc : Corresponding phandle of the VADC device to read the die_temperature and set
		simultaneous voltage and current conversion requests.

Example:
	/* Main Node */
	qcom,iadc@3200 {
                        compatible = "qcom,qpnp-iadc";
                        reg = <0x3200 0x100>;
			#address-cells = <1>;
			#size-cells = <0>;
                        interrupts = <0 0x36 0>;
			interrupt-names = "eoc-int-en-set";
                        qcom,adc-bit-resolution = <16>;
                        qcom,adc-vdd-reference = <1800>;
			qcom,rsense = <1500>;
			qcom,iadc-vadc = <&pm8941_vadc>;

			/* Channel Node */
                        chan@0 = {
                                label = "rsense";
                                reg = <0>;
                                qcom,decimation = <0>;
                                qcom,pre-div-channel-scaling = <20>;
                                qcom,calibration-type = "fresh";
                                qcom,scale-function = <0>;
                                qcom,hw-settle-time = <0>;
                                qcom,fast-avg-setup = <0>;
                        };
	};

Client device example:
/* Add to the clients node that needs the IADC */
client_node {
	qcom,client-iadc = <&pm8941_iadc>;
};
