MPC8321, ethernet and i2c problems after upgrade from 2.6.25 to 2.6.27

Joakim Tjernlund joakim.tjernlund at transmode.se
Tue Oct 14 18:55:31 EST 2008


On Mon, 2008-10-13 at 14:03 -0500, Scott Wood wrote:
> Joakim Tjernlund wrote:
> > Because all the kernel comments I can see still implies that this should work
> 
> Which kernel comments?

The one already mentioned and in i2c-boardinfo.c

> 
> > and because this was the only way in earlier releases to add an i2c device.
> 
> We've supported enumerating i2c-mpc devices using the device tree for 
> almost as long as there's been new-style i2c devices.

Don't know how long that has been but looking at the mpc832x_mds dts
file it has been there less than a year.

> 
> >> The obvious and easy way is to just use the device tree.
> >>
> >> If that isn't possible (such as due to device trees embedded in existing
> >> firmware), you can find the adapter device as a child of the of_device.
> > 
> > Possible yes, safe no. As is now I cannot use 2.6.27 on my current u-boot. 
> 
> Why not?  U-boot allows you to pass in a device tree dynamically.

I don't use a dynamic device tree, mine is built in.

> 
> > I always had the impression that OF was an optional add on, but now it seems
> > that it is mandatory for i2c?
> 
> It's mandatory for device drivers such as i2c-mpc that expect it.

This is the main point, up to now I belived that OF only drivers was a
bug that should be fixed but since no one is supports my view I guess
I have misunderstod. 

> 
> >> Finding the of_device from the device_node may be difficult, though.
> >> We could have i2c-mpc set node->data to the of_device (or maybe the
> >> adapter struct), or maybe should add an of_device member of device_node
> >> that gets filled in by of_platform?
> > 
> > hmm, no easy way out then? I need a way to do this from my board code without
> > adding new stuff to the driver. A hack that only works in 2.6.27 will do.
> 
> You could add the node to the device tree from platform code, if you run 
> before the i2c adapter's probe() runs.  Or, if you really want to stick 
> with your current way of doing things, and are willing to own both 
> pieces if it breaks, you can comment out this test in 
> i2c_register_adapter, and always call i2c_scan_static_board_info:
> 
> if (adap->nr < __i2c_first_dynamic_bus_num)
> 	i2c_scan_static_board_info(adap);

No, I don't want to hack general i2c code. I guess I will
just have to update our boot too.

 Jocke



More information about the Linuxppc-dev mailing list