[U-Boot] [PATCH] 7/12 Multiadapter/multibus I2C, drivers part 4

Heiko Schocher hs at denx.de
Wed Feb 18 09:17:50 CET 2009


Hello ksi,

ksi at koi8.net wrote:
> On Mon, 16 Feb 2009, Wolfgang Denk wrote:
> 
>> Dear ksi at koi8.net,
>>
>> In message <Pine.LNX.4.64ksi.0902142019520.6240 at home-gw.koi8.net> you wrote:
[...]
>>> And remember, the devil is in details. How are you going to assign
>>> (initialize) that innocent looking "cur_adap_nr->hwadapnr"? How are you
>>> going to work on an adapter other that "current" in a situation when you can
>>> NOT change "current" adapter (e.g. perform all I2C layer initialization
>>> while still running from flash?) Remember, this is plain C and there is no
>> What makes you insist that we cannot change a variable if we need to
>> be able to change one?
> 
> It is NOT just variable. My approach uses i2c _BUS_, not _ADAPTER_. And
> number of busses can be bigger than number of adapters (e.g. when some
> busses a reached via muxes or switches.) When doing i2c_set_current_bus()
> you are switching _NOT_ adapters, but busses. That involves not only
> changing that global variable but also reprogramming muxes/switches for
> i2c_set_current_bus() to be consistent and hardware independent. Otherwise

You have no i2c_set_current_bus() in your code! I think you mean
i2c_set_current_bus(), right?

And this function fails when running from flash! So, how can you switch
busses with your patches when running from flash?

Here your function:

int i2c_set_bus_num(unsigned int bus)
{
#ifndef CONFIG_SYS_I2C_DIRECT_BUS
        int             i;
        u_int8_t        buf;
#endif

        if ((bus >= CONFIG_SYS_NUM_I2C_BUSSES) || !(gd->flags & GD_FLG_RELOC))
                return(-1);
[...]

This function wouldn;t work from flash ...

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