Krait Voltage regulators

The cpus are powered using a single supply powered by PMIC ganged regulators operating in
different phases. Individual kraits further can draw power from the single supply via
a LDO or a head switch (BHS).  The first level node represents the PMIC ganged regulator
and its properties and encompasses second level nodes that represent the individual
krait LDO/BHS control regulator.

[First Level Nodes]
Required properties:
- compatible:			Must be "qcom,krait-pdn"
- reg:				This property contains a list of physical
				addresses for Krait PDN features.  The list
				should contain the address of the APCS GCC
				register base and the address of the phase
				scaling factor eFuse.
- reg-names:			This property contains a list of strings naming
				the registers listed in the reg property.
				"apcs_gcc" is a string to identify the area
				where the APCS GCC registers reside.
				"phase-scaling-efuse" should be used to identify
				the phase scaling factor eFuse address.
- qcom,pfm-threshold		The power coeff threshold in abstract power units below which
				pmic will be made to operate in PFM mode.
- qcom,phase-scaling-factor-bits-pos	indicates bit position of scaling factor data within the efuse
					register.
- qcom,valid-scaling-factor-versions	This is an array holding four boolean values and indicates whether
					the version read from efuses is valid.
					The version is a two bit field and the value read from hardware is
					used as an index in this array to check for validity.
Optional properties:
- qcom,use-phase-switching	indicates whether the driver should add/shed phases on the PMIC
				ganged regulator as cpus are hotplugged.
- qcom,use-phase-scaling-factor	Boolean which indicates if the value stored in
				the phase scaling eFuse should be used or not.
				If this property is not specified, then worst
				case scaling will be assumed.

[Second Level Nodes]
Required properties:
- compatible:			Must be "qcom,krait-regulator"
- reg:				Specifies the address and size for this regulator device,
				also specifies the address and the size for the MDD area
				to be used along with the regulator
- reg-names:			"acs" -string to identify the area where main power control
					registers reside.
				"mdd" - string to identify the area where mdd registers reside.
- qcom,headroom-voltage:	The minimum required voltage drop between the input
			 	voltage and the output voltage for the LDO to be
			 	operational, in microvolts. Acceptable values are from
				50000uV to 250000uV
- qcom,retention-voltage:	The value for retention voltage in microvolts. Acceptable
				values are from 465000uV to 750000uV
- qcom,ldo-default-voltage:	The default value for LDO voltage in microvolts. Acceptable
				values are from 465000uV to 750000uV
- qcom,ldo-threshold-voltage:	The voltage value above which LDO is nonfunctional.
				Acceptable values are from 600000uV to 900000uV
- qcom,ldo-delta-voltage:	The delta used to reduce the requested voltage in order
				to derive the LDO output voltage while switching
				to LDO mode. Acceptable values are from 1000uV to 100000uV
- qcom,cpu-num:			Indicates what cpu this regulator controls

Optional properties:
- qcom,ldo-disable:		Indicates whether to disable using LDO mode

Any property defined as part of the core regulator
binding, defined in regulator.txt, can also be used.

Example:
	krait_pdn: krait-pdn@f9011000 {
		reg = <0xf9011000 0x1000>,
		      <0xfc4b80b0 8>;
		reg-names = "apcs_gcc", "phase-scaling-efuse";
		compatible = "qcom,krait-pdn";
		qcom,use-phase-switching;
		qcom,use-phase-scaling-factor;
		qcom,pfm-threshold = <376975>;
		qcom,phase-scaling-factor-bits-pos = <18>;
		qcom,valid-scaling-factor-versions = <0 1 1 0>;

		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		krait0_vreg: regulator@f9088000 {
			compatible = "qcom,krait-regulator";
			regulator-name = "krait0";
			reg = <0xf9088000 0x1000>, /* APCS_ALIAS0_KPSS_ACS */
				<0xf908a800 0x1000>; /* APCS_ALIAS0_KPSS_MDD */
			reg-names = "acs", "mdd";
			regulator-min-microvolt = <500000>;
			regulator-max-microvolt = <1100000>;
			qcom,headroom-voltage = <150000>;
			qcom,retention-voltage = <675000>;
			qcom,ldo-default-voltage = <750000>;
			qcom,ldo-threshold-voltage = <850000>;
			qcom,ldo-delta-voltage = <50000>;
			qcom,cpu-num = <0>;
		};
	};
