[U-Boot] [PATCH] 0/12 Multiadapter/multibus I2C
Heiko Schocher
hs at denx.de
Sat Feb 14 09:47:13 CET 2009
Hello ksi,
ksi at koi8.net wrote:
> On Fri, 13 Feb 2009, Heiko Schocher wrote:
>> ksi at koi8.net wrote:
>>> Here is the second attempt for initial portion of multibus/multiadapter
>>> I2C support.
>>>
>> Can you please send your patches with some better commit messages.
>> You only send your Signed-off-by, without any explanation. Please
>> change this.
>
> There is not much sense in extensive commit messages in this case, IMHO. It
> is not a bug fix or added feature at one particular place; it is a major
> rework. The only message I can give is something like "Changes for
> multiadapter/multibus I2C support..."
>
> I'll add it to the second attempt that I will make later today.
>
>>> This includes a set of common files, all drivers in drivers/i2c and all
>>> boards affected by these changes (config files, board files, and lib_xx
>>> files.)
>>>
>>> There is an illustrative example of multiadapter multibus I2C config in
>>> MPC8548CDS.h config file (#if 0'd.) Definitions in that example are
>>> bogus so please don't expect it to work. It will compile though...
>>>
>>> This set also includes big rework for soft_i2c.c that makes it template
>>> version that allows up to 4 bitbanged adapters. This number can be
>>>
>> Didn;t you try my suggestion? This is a really big define monster now,
>> which I think, we can avoid, and without to change nearly all lines of
>> the existing driver.
>
> We can not avoid it. At least I can not see an easy way to do this. SOFT_I2C
Yes, we can. Look again deeper in my approach, this _is_ an easy way!
I also looked again in your changes in the fsl_i2c.c driver, and we
can make this also simplier, by using cur_adap_nr->hwadapnr!
We have not to define for both hardware adapter each function in
i2c_adap_t! For example:
You did:
static void fsl_i2c1_init(int speed, int slaveadd)
{
__i2c_init(0, speed, slaveadd);
}
instead we only need
i2c_init(cur_adap_nr->hwadapnr, speed, slaveadd);
with
i2c_adap_t fsl_i2c_adap[] = {
{
.init = i2c_init,
[...]
.hwadapnr = 0,
.name = FSL_NAME(CONFIG_SYS_FSL_I2C_OFFSET)
},
#ifdef CONFIG_SYS_FSL_I2C2_OFFSET
{
.init = i2c_init,
[...]
.hwadapnr = 1,
.name = FSL_NAME(CONFIG_SYS_FSL_I2C2_OFFSET)
},
#endif
Please change this driver also!
If I think more, we never even need to change the function parameters
like you did for example for i2c_int ()! We can use at the beginning
of every function who go in i2c_adap_t, the "cur_adap_nr->hwadapnr"
and make the settings we need for this function... and wow we saved
one function parameter.
> is special. Those multiple e.g. MXC or OMAP3 adapters can be parameterized
> because different channels do only differ in their base address that can be
> made into a parameter. Software I2C is totally different because it has
Why is this different? If you change a base or the way to the pins?
> totally different functions for different channels, there is nothing we can
Think about my explanation to the soft_i2c.c driver in previous EMail and
above function.
It also works!
> make into a parameter. All those I2C_SDA etc. are NOT DEFINES, they are
> MACROS. Every function for every channel is built of those macros that can
I know this in your approach, but we _don;t_ need this. We simply can make
one "common" board function and switch in this function dependent on the
"cur_adap_nr->hwadapnr" to the particular GPIO pin functions, wherever the
are!
> be absolutely different for each channel. They define NOT some PARAMETERS
> but function TEXT that will be compiled into executable code.
And this additional TEXT I save too!
I think, you think too much in C++?
> This is how it is done in Linux kernel (see e.g. drivers/hwmon/lm93.c.)
Thats no argument.
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