Thread (1 message) 1 message, 1 author, 2011-06-03

[RFC 3/3] ARM:Tegra: Device Tree Support: Initialize from wm8903 the device tree

From: Grant Likely <hidden>
Date: 2011-06-03 16:20:21
Also in: linux-devicetree, linux-tegra

On Thu, May 12, 2011 at 1:49 AM, Mark Brown
[off-list ref] wrote:
On Wed, May 11, 2011 at 04:27:18PM -0700, John Bonesio wrote:
quoted
This patch makes it so the wm8903 is initialized from it's device tree node.

Signed-off-by: John Bonesio<redacted>
---

?arch/arm/boot/dts/tegra-harmony.dts | ? 17 ++++++
?sound/soc/codecs/wm8903.c ? ? ? ? ? | ? 93 +++++++++++++++++++++++++++++++++--
This needs to be sent separately to the relevant mailing lists and
maintainers. ?You can't go making substantial changes to drivers without
even telling the maintainers about it - this will apply to any device
tree work you're doing. ?In this case one of the maintainers happens to
be me, but even so.
quoted
+ ? ? ? ? ? ? ? ? ? ? interrupts = < 347 >;
+ ? ? ? ? ? ? ? ? ? ? irq-active-low = <0>;
+ ? ? ? ? ? ? ? ? ? ? micdet-cfg = <0>;
+ ? ? ? ? ? ? ? ? ? ? micdet-delay = <100>;
Some of this looks like chip default, why is it being configured?
quoted
+ ? ? ? ? ? ? ? ? ? ? ? gpio-controller;
+ ? ? ? ? ? ? ? ? ? ? ? #gpio-cells = <2>;
The fact that this device is a GPIO controller is a physical property of
the device, we shouldn't need to be putting it into the device tree.
quoted
+ ? ? ? ? ? ? ? ? ? ? gpio-num-cfg = < 5 >;
Similarly here, the device has a fixed number of GPIOs.
quoted
+ ? ? ? ? ? ? ? ? ? ? /* #define WM8903_GPIO_NO_CONFIG 0x8000 */
+ ? ? ? ? ? ? ? ? ? ? gpio-cfg = < 0x8000 0x8000 0 0x8000 0x8000 >;
This doesn't seem great for usability. ?I'd suggest key/value pairs
rather than an array.
quoted
- ? ? if (pdata && pdata->gpio_base)
+ ? ? wm8903->gpio_chip.base = -1;
+ ? ? if (pdata && pdata->gpio_base) {
? ? ? ? ? ? ? wm8903->gpio_chip.base = pdata->gpio_base;
- ? ? else
- ? ? ? ? ? ? wm8903->gpio_chip.base = -1;
+ ? ? } else if (codec->dev->of_node) {
+ ? ? ? ? ? ? prop = of_get_property(codec->dev->of_node, "gpio-base", NULL);
+ ? ? ? ? ? ? if (prop)
+ ? ? ? ? ? ? ? ? ? ? wm8903->gpio_chip.base = be32_to_cpup(prop);
+ ? ? }
We have to do manual endianness conversions to read from the device
tree? ?Oh, well.
quoted
+
+ ? ? ? ? ? ? prop = of_get_property(codec->dev->of_node, "interrupts", NULL);
+ ? ? ? ? ? ? if (prop)
+ ? ? ? ? ? ? ? ? ? ? wm8903->irq = be32_to_cpup(prop);
+
We have a standard way of passing the IRQ number to I2C devices, surely
we should make sure that works at the bus level rather than having to
replicate this code everywhere?
Yes actually there is.  The code in drivers/of/of_i2c.c already
correctly populates the i2c_client irq from the device tree.  This
hunk can be completely removed.

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