Thread (54 messages) 54 messages, 7 authors, 2012-01-27

Re: Pinmux bindings proposal

From: Grant Likely <hidden>
Date: 2012-01-16 18:28:15
Also in: linux-arm-kernel, lkml

On Fri, Jan 13, 2012 at 12:39:42PM -0800, Stephen Warren wrote:
I thought a bit more about pinmux DT bindings. I came up with something
that I like well enough, and is pretty similar to the binding that Dong
posted recently. I think it'll work for both Tegra's and IMX's needs.
Please take a look!

Note: I've used named constants below just to make this easier to read.
We still don't have a solution to actually use named constants in dtc yet.

tegra20.dtsi:

/ {
        tegra_pmx: pinmux@70000000 {
                compatible = "nvidia,tegra20-pinmux";
                reg = <0x70000014 0x10   /* Tri-state registers */
                       0x70000080 0x20   /* Mux registers */
                       0x700000a0 0x14   /* Pull-up/down registers */
                       0x70000868 0xa8>; /* Pad control registers */
        };

        sdhci@c8000200 {
                compatible = "nvidia,tegra20-sdhci";
                reg = <0xc8000200 0x200>;
                interrupts = <0 15 0x04>;
        };
};

tegra-harmony.dts:

/{
        sdhci@c8000200 {
                cd-gpios = <&gpio 69 0>; /* gpio PI5 */
                wp-gpios = <&gpio 57 0>; /* gpio PH1 */
                power-gpios = <&gpio 155 0>; /* gpio PT3 */

                /*
                 * A list of named configurations that this device needs.
                 * Format is a list of <"name" &phandle_of_pmx_configuration>
                 *
                 * Multiple "name"s are needed e.g. to support active/suspend,
                 * or whatever device-defined states are appropriate. The
                 * device defines which names are needed, just like a device
                 * defines which regulators, clocks, GPIOs, interrupts, ...
                 * it needs.
                 *
                 * This example shows a 1:1 relation between name and phandle.
                 * We might want a 1:n relation, so that we can blend multiple
                 * pre-defined sets of data together, e.g. one pre-defined set
                 * for the pin mux configuration, another for the pin config
                 * settings, both being put into the single "default" setting
                 * for this one device.
                 *
                 * A pinmux controller can contain this property too, to
                 * define "hogged" or "system" pin mux configuration.
                 *
                 * Note: Mixing strings and integers in a property seems
                 * unusual. However, I have seen other bindings floating
                 * around that are starting to do this...
                 */
                pinmux =
                        <"default" &pmx_sdhci_active>
                        <"suspend" &pmx_sdhci_suspend>;

                /* 1:n example: */
                pinmux =
                        <"default" &pmx_sdhci_mux_a>
                        <"default" &pmx_sdhci_pincfg_a>
                        <"suspend" &pmx_sdhci_mux_a>
                        <"suspend" &pmx_sdhci_pincfg_a_suspend>;

Yeah, don't do this.  Mixing phandle, string and cell values in a
property gets messy and could become troublesome to parse.  I've
backed away from it in the clk binding.

pinumx-* is better, but I'm not thrilled with it and I avoided that
pattern too for the latest iteration of the clk binding.  I prefer
using a "pinmux" + "pinmux-names" pair of properties when dealing with
an array of like objects (ie. reg, interrupts, clks, etc), but that
might not fit well since each setting has multiple state nodes.
                /*
                 * Alternative: One property for each required state. But,
                 * how does pinctrl core know which properties to parse?
                 * Every property named "pinctrl*" seems a little too far-
                 * reaching. Perhaps if we used vendor-name "pinmux", that'd
                 * be OK, i.e. pinmux,default and pinmux,suspend?
It isn't actually a vendor name, so don't use a ','.  "pinmux-" prefix
is fine.

g.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help