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<tred...@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<tred...@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
pgpLcx934Rvq4.pgp
Description: PGP signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot