On Mon, Dec 21, 2009 at 12:40 PM, Bill Gatliff <b...@billgatliff.com> wrote:
> Guys:
>
>
> I'm trying to come up with the right stuff for my dts file to assign a
> Linux "heartbeat" trigger to an I2C GPIO expansion device (MAX7314).
> I'm running on a platform that is very similar to the lite5200b, with
> linux-2.6.32.  I'm a bit new to the device tree concept, having come
> most recently from an ARM world, so please be gentle...  :)
>
> I have this so far:
>
>        soc5...@f0000000 {
>            #address-cells = <1>;
>            #size-cells = <1>;
>            compatible = "fsl,mpc5200b-immr","simple-bus";
>            ranges = <0 0xf0000000 0x0000c000>;
>            reg = <0xf0000000 0x00000100>;
>            bus-frequency = <0>;        // from bootloader
>            system-frequency = <0>;        // from bootloader
>    ...
>            ...@3d40 {
>                #address-cells = <1>;
>                #size-cells = <0>;
>                compatible = "fsl,mpc5200b-i2c","fsl,mpc5200-i2c","fsl-i2c";
>                reg = <0x3d40 0x40>;
>                interrupts = <2 16 0>;
>
>                lext20: max7...@20 {
>                       #gpio-cells = <2>;
>                       compatible = "maxim,max7314","phillips,pca953x";
>                       reg = <0x20>;
>                       linux,phandle = <0x20>;

Drop the linux,phandle.  The phandle property is generated
automatically by the device tree compiler.  This could mess things up.

As Anton says, the 7314 driver doesn't register the GPIO in a way that
the of_gpio layer understands, so cannot translate.  What the of_gpio
infrastructure *should* be doing is to fetch the device tree node out
of the struct device and use that path to translate device tree GPIO
references to Linux GPIO numbers.  ie.
dev_archdata_get_node(gc->dev->archdata).  Then as long as the device
tree node pointer is set in the struct device (which it always should
be), then OF translations for GPIO numbers should work without driver
changes.

In other words; given a device tree node pointer; loop over all the
registered GPIO devices and look for a matching node pointer in the
struct device.  When a matching one is found; do the translation.
However, on further thought, this may require an additional hook added
to the gpio_chip registration to override the translation function if
necessary.

Anton, what are you thinking about to simplify OF GPIO registrations?

Bill, in the mean time you could do as Anton suggests and modify the
GPIO driver to have an of_gpio_chip allocation.

Cheers,
g.

-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to