blob: a699a17a66de908d1270b89100f8b603ca7d4537 [file] [log] [blame]
* 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_IN = 0,
QPNP_GPIO_DIR_OUT = 1,
QPNP_GPIO_DIR_BOTH = 2
@output_type: indicates gpio should be configured as CMOS or open
drain.
QPNP_GPIO_OUT_BUF_CMOS = 0
QPNP_GPIO_OUT_BUF_OPEN_DRAIN_NMOS = 1,
QPNP_GPIO_OUT_BUF_OPEN_DRAIN_PMOS = 2,
@invert: Invert the signal of the gpio line -
QPNP_GPIO_INVERT_DISABLE = 0
QPNP_GPIO_INVERT_ENABLE = 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_LOW = 1
QPNP_GPIO_OUT_STRENGTH_MED = 2,
QPNP_GPIO_OUT_STRENGTH_HIGH = 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_2 = 3,
QPNP_GPIO_DTEST1 = 4,
QPNP_GPIO_DTEST2 = 5,
QPNP_GPIO_DTEST3 = 6,
QPNP_GPIO_DTEST4 = 7
@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>;
};
};
};
};