[U-Boot] [PATCH 0/3] Bring in new I2C framework

Heiko Schocher hs at denx.de
Tue Oct 30 06:44:02 CET 2012


Hello Simon,

On 29.10.2012 14:48, Simon Glass wrote:
> Hi Heiko,
>
> On Mon, Oct 29, 2012 at 2:44 AM, Heiko Schocher<hs at denx.de>  wrote:
>> Hello Simon,
>>
>>
>> On 26.10.2012 18:08, Simon Glass wrote:
>>>
>>> On Thu, Oct 25, 2012 at 10:48 PM, Heiko Schocher<hs at denx.de>   wrote:
>>>>
>>>> Hello Simon,
>>>>
>>>>
>>>> On 25.10.2012 23:37, Simon Glass wrote:
>>>>>
>>>>>
>>>>> On Mon, Oct 22, 2012 at 10:40 AM, Heiko Schocher<hs at denx.de>    wrote:
>>
>> [...]
>>
>>>>> 2. The init is a bit odd, in that we can call init() repeatedly.
>>>>> Perhaps that function should be renamed to reset, and the init should
>>>>> be used for calling just once at the start?
>>>>
>>>>
>>>>
>>>> What do you mean here exactly? I couldn´t parse this ...
>>>
>>>
>>> Well there is start-of-day setup, which I think should be called init.
>>> This is done once on boot for each i2c adapter.
>>
>>
>> Hmm... I am not sure if this is only done on boot, because we should
>> "close" or "deinit" an adapter if not used any more in U-Boot as the
>> U-Boot principle says:
>>
>> http://www.denx.de/wiki/view/U-Boot/DesignPrinciples#2_Keep_it_Fast
>>
>> So I want to add in future some "deinit" to every adapter, and
>> call it from i2c_set_bus() when switching to another i2c adapter ...
>
> Well deinit() should be probably be done before finishing U-Boot, not
> after every transaction, since you don't know that the current
> transaction will be the last.

Not after every transaction, only when switching to another adapter,
or before booting linux ...

> When using FDT, you need to look up the available i2c ports in the
> driver, and this should be done once at the start. If the i2c core can
> call a suitable init function then this is easier, rather than us
> having to keep track of whether the init is done or not.

Dummy question, why is this needed when using FDT?

>>> And then there is the i2c_init() which seems to be called whenever we
>>> feel like it - e.g. to change speed. I suggest that we use init() to
>>> mean start-of-day init and reset(), or similar, to mean any post-init.
>>> I am not suggest that for this series, just as a future effort.
>>
>>
>> Yes, that should be changed. We do not need an init() in the i2c
>> API, as i2c_set_bus_num() do this for us (and later also the deinit())
>>
>> We just need a set/get_speed() and a deblock()/reset() ?
>>
>> Maybe a step in the API cleanup?
>
> Yes, a future step I think. I feel that i2c is one of the darker
> corners of U-Boot and so am keen to get this tidied up.

Patches are welcome! Let us bring in the new framework, clean up
the i2c API / maybe DM integration, then we are on a good way I
think ...

[...]

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