[U-Boot] [PATCH v2 11/40] i2c: Initialize the correct bus
Thierry Reding
thierry.reding at gmail.com
Wed Aug 27 07:12:12 CEST 2014
On Wed, Aug 27, 2014 at 06:52:16AM +0200, Heiko Schocher wrote:
> Hello Thierry,
>
> Am 26.08.2014 17:33, schrieb Thierry Reding:
> >From: Thierry Reding<treding at nvidia.com>
> >
> >i2c_bus_init() takes a bus number but relies on the currently selected
> >bus to determine which adapter to initialize. Make the function use the
> >bus passed in as parameter rather than the currently selected bus. While
> >at it, keep a pointer to the specified bus to avoid having to look it up
> >repeatedly.
> >
> >Signed-off-by: Thierry Reding<treding at nvidia.com>
> >---
> > drivers/i2c/i2c_core.c | 15 +++++++++------
> > 1 file changed, 9 insertions(+), 6 deletions(-)
>
> Why you could not use the current CONFIG_SYS_I2C API and init a bus with
> i2c_set_bus_num()?
That's orthogonal to this patch. i2c_set_bus_num() will end up calling
the i2c_init_bus() function, too. What this patch does is fix an issue
where i2c_init_bus is completely ignoring the bus_no parameter (except
for sanity checking) but instead relies on the gd->cur_i2c_bus (via
I2C_ADAP) to initialize a bus. That's completely unexpected and making
this consistent allows the function to be reused in a more generic way
as done in subsequent patches.
Thierry
> >diff --git a/drivers/i2c/i2c_core.c b/drivers/i2c/i2c_core.c
> >index 18d6736601c1..cca455bc9c63 100644
> >--- a/drivers/i2c/i2c_core.c
> >+++ b/drivers/i2c/i2c_core.c
> >@@ -214,17 +214,20 @@ static int i2c_mux_disconnet_all(void)
> > * Initializes one bus. Will initialize the parent adapter. No current bus
> > * changes, no mux (if any) setup.
> > */
> >-static void i2c_init_bus(unsigned int bus_no, int speed, int slaveaddr)
> >+static void i2c_init_bus(unsigned int bus, int speed, int slaveaddr)
> > {
> >- if (bus_no>= CONFIG_SYS_NUM_I2C_BUSES)
> >+ struct i2c_adapter *adapter;
> >+
> >+ if (bus>= CONFIG_SYS_NUM_I2C_BUSES)
> > return;
> >
> >- I2C_ADAP->init(I2C_ADAP, speed, slaveaddr);
> >+ adapter = i2c_get_adapter(I2C_ADAPTER(bus));
> >+ adapter->init(adapter, speed, slaveaddr);
> >
> > if (gd->flags& GD_FLG_RELOC) {
> >- I2C_ADAP->init_done = 1;
> >- I2C_ADAP->speed = speed;
> >- I2C_ADAP->slaveaddr = slaveaddr;
> >+ adapter->init_done = 1;
> >+ adapter->speed = speed;
> >+ adapter->slaveaddr = slaveaddr;
> > }
> > }
> >
>
> --
> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140827/0c102af2/attachment.pgp>
More information about the U-Boot
mailing list