Dear k...@koi8.net, In message <pine.lnx.4.64ksi.0902181112400.5...@home-gw.koi8.net> you wrote: > > > Duplicating the source code (and thus the object code, too) to create > > additional instances of basicly the same driver seems to be the wrong > > approach to me. > > > > It doesn't scale well, to say the least. > > It is _NOT_ the same driver. Every bitbaged I2C driver is _DIFFERENT_. Only > the _NAME_ is the same.
This is one way to implement it, but not the only one. Just to give an example of a different implementation (without claiming that that would be a better one): we could provide an array of functions (instead of macros) for each such adapter, so we could use just a single instance of the driver which takes the address of the respective array as argument. > The soft_i2c.c is _NOT_ a driver _SOURCE_. It is a _TEMPLATE_ that makes a This is your implementation. It is not the only possible implemen- tation. Please try and open your mind to discuss alternative possibilities as well. > And it can _NOT_ scale because it is impossible to make a generic driver > _SOURCE_ for each and every hardware configuration imaginable. That existing Impossible. Famous last words. > soft_i2c.c makes _GENERATION_ of such a driver trivial. The only problem > with it is it only makes _ONE_ such interface. And it duplicates the source code for each additional instance that is needed. > And no, we are _NOT_ duplicating source code. Source code is _DIFFERENT_ for > different adapters. We just creating several _INSTANCES_ using that template > with _DIFFERENT_ parameters. And those instances are all different. The > template itself does _NOT_ go into the final code. Call it what you want, I call it duplication of code. > > Is this theory or did you perform code size measurements? > > It is obvious. Furthermore, it doesn't make sence to count size difference > here because it is miniscule -- how many I2C adapters do we have on a board? It is obvious. Famous last words again. > The former does not require additional adapter struct member, hwadap_no. > And, unlike the latter, it is self-contained, it doesn't require any > external global variable to decide what to do. One can initialize all > adapters by: > > for (i = 0; i < NUM_I2C_ADAPTERS; i++) > i2c_adap[i]->init(...); Most probably we never *want* to initialize all adapters... Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de CONSUMER NOTICE: Because of the "Uncertainty Principle," It Is Impossible for the Consumer to Find Out at the Same Time Both Precisely Where This Product Is and How Fast It Is Moving. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot