RE: [RFC PATCH v2 00/13] arm/tegra: Initialize GPIO & pinmux from DT
From: Stephen Warren <hidden>
Date: 2011-08-18 06:23:18
Also in:
linux-arm-kernel, linux-tegra, lkml
Arnd Bergmann wrote at Wednesday, August 17, 2011 5:24 AM:
On Tuesday 16 August 2011, Stephen Warren wrote:quoted
One issue here: There isn't always a single gpio/pinmux parent; as a concrete example, the ALSA/ASoC driver for Tegra+WM8903 uses GPIOs both from Tegra itself, and from the WM8903 audio codec. I could imagine the same being true in basically any case where one device uses N GPIOs (e.g. SD controller with power, change-detect, and read-only GPIOs; some could easily come from the SoC and some from a GPIO expander). I'm not quite so sure that multiple parents would be useful for pinmux, but I wouldn't say that it was impossible...Hmm, how common do you think the example is? It it's just a very rare case, we can still special-case it by introducing fake subdevices for the Tegra+WM8903 driver, each of which has only one gpio-parent. This is ugly but keeps the special case to the rare devices. If we can expect more than a handful of these, we probably need a better design for the binding, which will cause a burden for all drivers.
It looks like DT already supports the generic case for GPIO; each GPIO reference is of the form: <&gpio 69 0> and so each GPIO has a "parent" specified, and hence can come from a different controller. For drivers, this is all completely hidden by of_get_gpio(). I imagine we'd just use the same pattern for pinmux. This would both support the general case, and end up being consistent with how GPIOs already work, so this seems like a win both ways. -- nvpublic