[RFC 3/3] ARM:Tegra: Device Tree Support: Initialize from wm8903 the device tree
Grant Likely
grant.likely at secretlab.ca
Fri Jun 3 12:20:21 EDT 2011
On Thu, May 12, 2011 at 1:49 AM, Mark Brown
<broonie at opensource.wolfsonmicro.com> wrote:
> On Wed, May 11, 2011 at 04:27:18PM -0700, John Bonesio wrote:
>> This patch makes it so the wm8903 is initialized from it's device tree node.
>>
>> Signed-off-by: John Bonesio<bones at secretlab.ca>
>> ---
>>
>> 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.
>
>> + interrupts = < 347 >;
>> + irq-active-low = <0>;
>> + micdet-cfg = <0>;
>> + micdet-delay = <100>;
>
> Some of this looks like chip default, why is it being configured?
>
>> + 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.
>
>> + gpio-num-cfg = < 5 >;
>
> Similarly here, the device has a fixed number of GPIOs.
>
>> + /* #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.
>
>> - 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.
>
>> +
>> + 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.
More information about the linux-arm-kernel
mailing list