Thread (1 message) 1 message, 1 author, 2009-03-12

Re: I2C not working upon 2.6.24 to 2.6.28 kernel upgrade

From: Grant Likely <hidden>
Date: 2009-03-12 18:08:07

Possibly related (same subject, not in this thread)

On Thu, Mar 12, 2009 at 11:37 AM, Johns Daniel [off-list ref] wrote:
We have had this device tree (a section shown below) working for a long time:
       soc8343@e0000000 {
               #address-cells = <1>;
               #size-cells = <1>;
               #interrupt-cells = <2>;
               device_type = "soc";
               ranges = <00000000 e0000000 00100000>;
               reg = <e0000000 00000200>;
               bus-frequency = <0>;

               i2c@3000 {
                       device_type = "i2c";
                       compatible = "fsl-i2c";
                       reg = <3000 100>;
                       interrupts = <e 8>;
                       interrupt-parent = <700>;
                       dfsrr;
               };
...
}

With linux-2.6.24, it worked with this struct defined in the
board-specific file:
         static struct of_device_id __initdata of_bus_ids[] = {
               { .compatible = "fsl,pq2pro-localbus", },
               {},
         };
This doesn't make much sense since the snippit above doesn't show a
compatible value in the soc node.
With linux-2.6.28, it needs the following struct in the board-specific
file for I2C to work:
         static struct of_device_id __initdata of_bus_ids[] = {
               { .type = "soc", },
               { .name = "localbus", },
               {},
         };

Is this easily explained?
Binding on device_type or name is strongly discouraged, so the above
snippit isn't a good idea.

Is it okay to add a property to your device tree?  If so, then add:
compatible = "fsl,mpc8315-immr", "simple-bus" and make sure that {
.compatible = "simple-bus"} is in the of_bus_ids list.  Adding this
property will not break older versions of the kernel.
What is the right way to do this now? Ideally, I would like to keep
the device tree unchanged since I need for it to work with older
versions of the kernel!
compatible = "simple-bus" is the right way to describe simple memory
mapped translations like on the internally memory mapped registers.

Cheers,
g.

-- 
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help