[U-Boot] [PATCH] 7/12 Multiadapter/multibus I2C, drivers part 4
Heiko Schocher
hs at denx.de
Wed Feb 18 08:47:49 CET 2009
Hello ksi,
ksi at koi8.net wrote:
> On Wed, 18 Feb 2009, Wolfgang Denk wrote:
>
>> Dear ksi at koi8.net,
>>
>> In message <Pine.LNX.4.64ksi.0902171456520.30777 at home-gw.koi8.net> you wrote:
[...]
>>> OK, this is not about using multiple I2C busses before relocation and using
>>> them right now for any of existing boards (some of which are actually dead
>>> or vaporware.)
>> ...
>>
>> We agree that there are cases where multiple busses are needed. But do
>> we need such complexity before relocation?
>
> It is not before relocation. I don't see a reason to do this before
> relocation either. But if we want to have such a possibility after
> relocation we also need a mechanism to do this.
But, if this current pointer is writeable, it is also usable before relocation!
> And it is not all that complex, I can't understand why you think it is.
We actually mix things:
- complex: There we (Wolfgang and I) talk about your implentation
of the bitbang driver
not about your i2c-core ...
> As for now we have a set of regular i2c functions (i2c_init/i2c_read/etc.)
> in each and every i2c driver. Those functions are exported so when we pick
> up a driver (with e.g. CONFIG_HARD_I2C that metastasize through the entire
> U-Boot source choosing different drivers for different platforms) those
> functions get called where i2c_read() etc. are used.
>
> I make all those functions static so they are not exported and add a simple
> exported structure with pointers to those functions. Then there is one
> wrapper, i2c_core.c that holds global bus number and exports that usual set
> of i2c_read() and friends. Those functions in turn just play a dispatcher
> role calling appropriate functions from an array of those driver structures
> using current bus number as an index into that array. There is nothing more
> complex than that.
Perfectly.
> The i2c_set_bus_number() is a bit more complex than just changing that
> global variable to accomodate multiplexed busses but not rocket science
> either -- if the current bus is multiplexed, it switches off all the muxes
> in the path starting with the farthest one (if it is multihop, but I doubt
> we'll see such a beast so it will be just one chip) and turn on the muxes
> for the new bus (if it is multiplexed) starting with the closest one. The
> companion i2c_get_bus_num() just returns that global variable.
Ok.
> What is that complex with such a design?
Nothing. And there is not even more complexity, when we add a
current pointer, or? We just can use this current pointer, to make
driver code more simpler by using this current pointer and hwadapnr ...
See:
http://lists.denx.de/pipermail/u-boot/2009-February/047487.html
bye
Heiko
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
More information about the U-Boot
mailing list