Hello ksi, k...@koi8.net wrote: > On Thu, 19 Feb 2009, Wolfgang Denk wrote: > >> Dear k...@koi8.net, >> >> In message <pine.lnx.4.64ksi.0902191141090.18...@home-gw.koi8.net> you wrote: [...] >>> That means you'll have to rewrite the entire U-Boot. 99% of the boards have >>> only one bus so they did not switch busses. That means they never called >>> that i2c_set_bus_num() relying on i2c_init() in libxxx/board.c instead. >> I cannot follow your argument. >> >> Yes, the status quo is as you describe, it relies on i2c_init() and >> is simple-minded and does not support an arbitry number of >> arbitrarily complex I2C bus trees and multiplexors and expanders and >> what else. But it was sufficient for the first 10 years and 500 >> boards of U-Boot development. >> >> Now we are discussion a major redesign, so what is the big problem of >> changing this part? "rewrite the entire U-Boot"? Please stay serious. >> Compared to the other changes you suggest, this is not that big a >> part. > > No, my changes are limited. Look, somebody must initialize an adapter. As > for now it is done with a single i2c_init() usually in libxxx/board.c. Then > the entire code assumes adapter is already initialized and just issues > i2c_read/write() as it see fits. 99% of this code is written on assumption > that there is only one I2C bus so it doesn't use i2c_set_bus_num() or > whatever, it just fires up i2c_read() and that's it. > > This would perfectly work with my changes without modifying that code -- the > only bus is bus number 0 so there is nothing wrong with not setting the bus > for each I2C access; it is already at that only bus. > > Now, if we have adapter initialization moved to i2c_set_bus() all that code > will cease to work because i2c_set_bus() is never called thus adapter will > never be initialized and all those i2c_read() and friends will fail.
But you can call i2c_set_bus_num instead of i2c_init in lib_xxx/board.c and all old boards will work as they did. Ok, we didn;t can get rid of initializing bus 0, but with moving init() in i2c_set_bus_num, we only init additional hardwareadapters only, if we need them. > That means that we should read through each and every board's code to find > where i2c functions are used and add i2c_set_bus() calls as needed. That is > not INSTEAD of that big rewrite, that is _IN ADDITION_ to it. That is a very > sizeable chunk of additional changes. No, we have not to do this. See above. And if some board use multibus, yes they have to do a i2c_set_bus_num before they access the i2c bus, because they must know on which bus they have to read, and the actual bus could be changed. > I DID think of adding adapter initialization to i2c_set_bus() initially but > then it turned out it generated more problems than it solved (and it solved > none) so I dropped that idea. Please tell us the problems, so we can think of it, maybe I overlook something. Thats the reason why we discuss this here. bye Heiko -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot