[RFC 2/2] ARM:Tegra: Device Tree Support: Initialize audio card gpio's from the device tree.
Mitch Bradley
wmb at firmworks.com
Tue May 31 06:53:25 EST 2011
Perhaps the interrupt-mapping binding is not the best model. Interrupt
hardware in general is hierarchical but is not isomorphic to the
physical addressing hierarchy of the device tree.
GPIOs share the need to "point across the tree to different nodes", but
it is unclear that there is a need for a entirely different hierarchy.
That suggests the possibility of using the device tree addressing
mechanism as much as possible. Normal device tree addresses could be
used to specify GPIO numbers.
Suppose we have:
gpio-controller1: gpio-controller {
#address-cells = <2>;
#mode-cells = <2>;
gpio1: gpio at 12,0 {
reg = <12 0>;
mode = <55 66>;
usage = "Audio Codec chip select"; /* Optional */
}
};
gpio-controller2: gpio-controller {
#address-cells = <1>;
#mode-cells = <1>;
gpio2: gpio at 4 {
reg = <4>;
#mode-cells = <1>;
}
};
[...]
chipsel-gpio = <&gpio1>,
<&gpio-controller1 13 0 55 77>,
<0>, /* holes are permitted, means no GPIO 2 */
<&gpio2 88>,
<&gpio-controller2 5 1>;
A GPIO spec consist of:
1) A reference to either a gpio-controller or a gpio device node.
2) 0 or more address cells, according to the value of #address-cells in
the referenced node. If the node has no #address-cells property, the
value is assumed to be 0.
3) 0 or more mode cells, according to the value of #mode-cells in the
referenced node.
In the example, the chipsel-gpio specs are interpreted as:
<&gpio1> - refers to a pre-bound gpio device node, in which the
address (12 0) and mode (55 66) are specified within that node.
<&gpio-controller1 13 0 55 77> - refers to a GPIO controller node,
specifing the address (13 0) and the mode (55 77) in the client's GPIO spec.
<gpio2> - another reference to a gpio node on a different controller.
In this case the address (4) is bound in the gpio node, but the mode
(88) is passed in from the client's GPIO spec.
<&gpio-controller2 5 1> - another reference to a controller node, with
a one-cell address (5) and a one-cell mode (1), according to the values
of #address-cells and #mode-cells in that controller node.
I expect that the "pre-bound gpio node" case would get a lot of use in
practice, as it lets you isolate the client from the details of the
interrupt controller addressing and modes. In my experience, GPIOs
often get reassigned between revisions of the same board, especially
early in the development cycle.
More information about the devicetree-discuss
mailing list