* msm-qpnp-gpio

msm-qpnp-gpio is a GPIO chip driver for the MSM SPMI implementation.
It creates a spmi_device for every spmi-dev-container block of device_nodes.
These device_nodes contained within specify the PMIC GPIO number associated
with each GPIO chip. The driver will map these to Linux GPIO numbers.

[PMIC GPIO Device Declarations]

-Root Node-

Required properties :
 - spmi-dev-container : Used to specify the following child nodes as part of the
   same SPMI device.
 - gpio-controller : Specify as gpio-contoller. All child nodes will belong to this
   gpio_chip.
 - #gpio-cells: We encode a PMIC GPIO number and a 32-bit flag field to
   specify the gpio configuration. This must be set to '2'.
 - #address-cells: Specify one address field. This must be set to '1'.
 - #size-cells: Specify one size-cell. This must be set to '1'.
 - compatible = "qcom,qpnp-gpio" : Specify driver matching for this driver.

-Child Nodes-

Required properties :
 - reg : Specify the spmi offset and size for this gpio device.
 - qcom,qpnp-gpio-num : Specify the PMIC GPIO number for this gpio device.

Optional properties :
 - qcom,qpnp-gpio-cfg : Specify the PMIC gpio configuration.
   The format of this configuration is specified in a tuple of 9 entries.
   These entries should be specified in the same order as the entries listed
   in this following discription.

   @direction:		indicates whether the gpio should be input, output, or
			both.
			QPNP_GPIO_DIR_OUT  = 1,
			QPNP_GPIO_DIR_IN   = 2,
			QPNP_GPIO_DIR_BOTH = 3

   @output_type:	indicates gpio should be configured as CMOS or open
			drain.
			QPNP_GPIO_OUT_BUF_OPEN_DRAIN = 1,
			QPNP_GPIO_OUT_BUF_CMOS = 0

   @output_value:	The gpio output value of the gpio line - 0 or 1
   @pull:		Indicates whether a pull up or pull down should be
			applied. If a pullup is required the current strength
			needs to be specified. Current values of 30uA, 1.5uA,
			31.5uA, 1.5uA with 30uA boost are supported.
			QPNP_GPIO_PULL_UP_30	 = 0,
			QPNP_GPIO_PULL_UP_1P5	 = 1,
			QPNP_GPIO_PULL_UP_31P5	 = 2,
			QPNP_GPIO_PULL_UP_1P5_30 = 3,
			QPNP_GPIO_PULL_DN	 = 4,
			QPNP_GPIO_PULL_NO	 = 5

  @vin_sel:		specifies the voltage level when the output is set to 1.
			For an input gpio specifies the voltage level at which
			the input is interpreted as a logical 1.
			QPNP_GPIO_VIN0 = 0,
			QPNP_GPIO_VIN1 = 1,
			QPNP_GPIO_VIN2 = 2,
			QPNP_GPIO_VIN3 = 3,
			QPNP_GPIO_VIN4 = 4,
			QPNP_GPIO_VIN5 = 5,
			QPNP_GPIO_VIN6 = 6,
			QPNP_GPIO_VIN7 = 7

  @out_strength:	the amount of current supplied for an output gpio.
			QPNP_GPIO_OUT_STRENGTH_HIGH = 1,
			QPNP_GPIO_OUT_STRENGTH_MED  = 2,
			QPNP_GPIO_OUT_STRENGTH_LOW  = 3

  @source_sel:		choose alternate function for the gpio. Certain gpios
			can be paired (shorted) with each other. Some gpio pin
			can act as alternate functions.
			QPNP_GPIO_FUNC_NORMAL   = 0,
			QPNP_GPIO_FUNC_PAIRED   = 1
			QPNP_GPIO_FUNC_1	= 2,
			QPNP_GPIO_FUNC_3	= 3,
			QPNP_GPIO_DTEST1	= 4,
			QPNP_GPIO_DTEST2	= 5,
			QPNP_GPIO_DTEST3	= 6,
			QPNP_GPIO_DTEST4	= 7

  @inv_int_pol:		Invert polarity before feeding the line to the interrupt
			module in pmic. This feature will almost be never used
			since the pm8xxx interrupt block can detect both edges
			and both levels.
  @master_en:		1 = Enable features within the GPIO block based on
			configurations.
			0 = Completely disable the GPIO block and let the pin
			float with high impedance regardless of other settings.

[PMIC GPIO clients]

Required properties :
 - gpios : Contains 3 fields of the form <&gpio_controller pmic_gpio_num flags>

[Example]

qpnp: qcom,spmi@fc4c0000 {
		#address-cells = <1>;
		#size-cells = <0>;
		interrupt-controller;
		#interrupt-cells = <3>;

		qcom,pm8941@0 {
			spmi-slave-container;
			reg = <0x0>;
			#address-cells = <1>;
			#size-cells = <1>;

			pm8941_gpios: gpios {
				spmi-dev-container;
				compatible = "qcom,qpnp-gpio";
				gpio-controller;
				#gpio-cells = <2>;
				#address-cells = <1>;
				#size-cells = <1>;

				qcom,pm8941_gpio1@0xc000 {
					reg = <0xc000 0x100>;
					qcom,qpnp-gpio-num = <62>;
				};

				qcom,pm8941_gpio2@0xc100 {
					reg = <0xc100 0x100>;
					qcom,qpnp-gpio-num = <20>;
					qcom,qpnp-gpio-cfg = <0x1 0x1 0x1 0x2 0x3 0x2 0x0 0x0 0x1>;
				};
			};

			qcom,testgpio@1000 {
				compatible = "qcom,qpnp-testgpio";
				reg = <0x1000 0x1000>;
				gpios = <&pm8941_gpios 62 0x0 &pm8941_gpios 20 0x1>;
			};
		};
	};
};
