178 lines
5.6 KiB
Plaintext
178 lines
5.6 KiB
Plaintext
|
* SPMI
|
||
|
|
||
|
The SPMI Device Tree support interprets up to three levels of Device Tree
|
||
|
topology. The first level is required and specifies only a slave address.
|
||
|
The second level is optional and allows for the specification of different
|
||
|
device nodes within the same 16-bit address space underneath a particular
|
||
|
SPMI slave ID. Within the second level, any number of address ranges can be
|
||
|
associated with a particular device within that 16-bit range. An additional
|
||
|
flag allows for the possiblity to specify that all device nodes should
|
||
|
have their resources dedicated to only one spmi_device. This flag can
|
||
|
be specified at the second level, or an optional third level. By default
|
||
|
without this flag, one spmi_device is created for each device_node.
|
||
|
|
||
|
[Root Node]
|
||
|
|
||
|
Recommended properties :
|
||
|
- interrupt-controller : Used to specify the root node as the
|
||
|
interrupt controller for SPMI devices.
|
||
|
- #interrupt-cells : The number of cells used to express one interrupt.
|
||
|
|
||
|
Notes :
|
||
|
- It is considered an error to include either spmi-container-dev or
|
||
|
spmi-slave-dev in the Root Node.
|
||
|
|
||
|
[First Level Nodes]
|
||
|
|
||
|
Required properites :
|
||
|
|
||
|
- reg: SPMI Slave ID (0-15) with no size cell.
|
||
|
- compatible : "qcom," prefixed string to match against the driver.
|
||
|
|
||
|
Recommended properties :
|
||
|
|
||
|
- interrupts : <a b c> where a is the slave ID, b is the peripheral ID,
|
||
|
c is the device interrupt number (0-7). Each device supports any arbitrary
|
||
|
number of interrupts.
|
||
|
- interrupt-parent : the phandle for the interrupt controller that
|
||
|
services interrupts for this device.
|
||
|
- reg-names : a list of strings that map in order to the list of addresses
|
||
|
specified above in the 'reg' property.
|
||
|
- interrupt-names : a list of strings that map in order to the list of
|
||
|
interrupts specified in the 'interrupts' property.
|
||
|
|
||
|
[Second Level Nodes]
|
||
|
|
||
|
Required properties :
|
||
|
- spmi-slave-container: Used by the parser to understand that this is the
|
||
|
second level of the tree that includes device nodes associated with the
|
||
|
same slave_id.
|
||
|
- reg: <a b> where a is < 65536 and b is a size. Each device supports an
|
||
|
arbitrary number of address ranges.
|
||
|
- compatible : "qcom," prefixed string to match against the driver.
|
||
|
|
||
|
Recommended properties :
|
||
|
|
||
|
- interrupts : <a b c> where a is the slave ID, b is the peripheral ID,
|
||
|
c is the device interrupt number (0-7). Each device supports any arbitrary
|
||
|
number of interrupts.
|
||
|
- interrupt-parent : the phandle for the interrupt controller that
|
||
|
services interrupts for this device.
|
||
|
|
||
|
Optional properties :
|
||
|
|
||
|
- spmi-dev-container: This specifies that all the device nodes specified for
|
||
|
this slave_id should have their resources coalesced into only one
|
||
|
spmi_device.
|
||
|
- reg-names : a list of strings that map in order to the list of addresses
|
||
|
specified above in the 'reg' property.
|
||
|
- interrupt-names : a list of strings that map in order to the list of
|
||
|
interrupts specified in the 'interrupts' property.
|
||
|
|
||
|
[Third Level Nodes]
|
||
|
|
||
|
Required properties :
|
||
|
|
||
|
- spmi-dev-container: This specifies that all the device nodes specified for
|
||
|
this slave_id should have their resources coalesced into only one
|
||
|
spmi_device.
|
||
|
- reg: <a b> where a is < 65536 and b is a size. Each device supports an
|
||
|
arbitrary number of address ranges.
|
||
|
- compatible : "qcom," prefixed string to match against the driver.
|
||
|
|
||
|
Recommended properties :
|
||
|
|
||
|
- interrupts : <a b c> where a is the slave ID, b is the peripheral ID,
|
||
|
c is the device interrupt number (0-7). Each device supports any arbitrary
|
||
|
number of interrupts.
|
||
|
- interrupt-parent : the phandle for the interrupt controller that
|
||
|
services interrupts for this device.
|
||
|
- reg-names : a list of strings that map in order to the list of addresses
|
||
|
specified above in the 'reg' property.
|
||
|
- interrupt-names : a list of strings that map in order to the list of
|
||
|
interrupts specified in the 'interrupts' property.
|
||
|
- label: A single name that names the device. This name can be looked up
|
||
|
with spmi_get_node_byname(). This is mostly useful in spmi-dev-container
|
||
|
configurations where multiple device_nodes are associated with one spmi
|
||
|
device.
|
||
|
Notes :
|
||
|
- It is considered an error to include spmi-slave-dev at this level.
|
||
|
|
||
|
[Example]
|
||
|
|
||
|
/ {
|
||
|
qpnp: qcom,spmi@fc4c0000 {
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <0>;
|
||
|
interrupt-controller;
|
||
|
#interrupt-cells = <3>;
|
||
|
|
||
|
testint@f {
|
||
|
interrupt-parent = <&qpnp>;
|
||
|
compatible = "qcom,qpnp-testint";
|
||
|
reg = <0xf>;
|
||
|
interrupts = <0x3 0x15 0x0 0x3 0x15 0x02 0x1 0x47 0x0>;
|
||
|
interrupt-names = "testint_0", "testint_1", "testint_err";
|
||
|
};
|
||
|
|
||
|
pm8941@0 {
|
||
|
spmi-slave-container;
|
||
|
reg = <0x0>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <1>;
|
||
|
|
||
|
pm8941_gpios: gpios {
|
||
|
spmi-dev-container;
|
||
|
compatible = "qcom,qpnp-pin";
|
||
|
gpio-controller;
|
||
|
#gpio-cells = <1>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <1>;
|
||
|
|
||
|
pm8941_gpio1@0xc000 {
|
||
|
compatible = "qcom,qpnp-pin";
|
||
|
reg = <0xc000 0x100>;
|
||
|
qcom,qpnp_gpio = <1>;
|
||
|
interrupt-parent = <&qpnp>;
|
||
|
interrupts = <0x3 0x15 0x02 0x1 0x47 0x0>;
|
||
|
label = "foo-dev";
|
||
|
};
|
||
|
|
||
|
pm8941_gpio2@0xc100 {
|
||
|
compatible = "qcom,qpnp-pin";
|
||
|
reg = <0xc100 0x100>;
|
||
|
qcom,qpnp_gpio = <2>;
|
||
|
interrupt-parent = <&qpnp>;
|
||
|
interrupts = <0x3 0x15 0x0>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
testgpio@0x1000 {
|
||
|
compatible = "qcom,qpnp-testgpio";
|
||
|
reg = <0x1000 0x1000 0x2000 0x1000>;
|
||
|
reg-names = "foo", "bar";
|
||
|
qpnp-gpios = <&pm8941_gpios 0x0>;
|
||
|
};
|
||
|
};
|
||
|
pm8841@2 {
|
||
|
spmi-slave-container;
|
||
|
reg = <0x2>;
|
||
|
#address-cells = <1>;
|
||
|
#size-cells = <1>;
|
||
|
spmi-dev-container;
|
||
|
compatible = "qcom,qpnp-pin";
|
||
|
|
||
|
pm8841_gpio1@0xc000 {
|
||
|
reg = <0xc000 0x100>;
|
||
|
qcom,qpnp_gpio = <1>;
|
||
|
};
|
||
|
|
||
|
pm8841_gpio2@0xc100 {
|
||
|
reg = <0xc100 0x100>;
|
||
|
qcom,qpnp_gpio = <2>;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
};
|
||
|
};
|