From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Date: Wed, 27 Aug 2014 07:12:12 +0200 Subject: [U-Boot] [PATCH v2 11/40] i2c: Initialize the correct bus In-Reply-To: <53FD6400.2070909@denx.de> References: <1409067268-956-1-git-send-email-thierry.reding@gmail.com> <1409067268-956-12-git-send-email-thierry.reding@gmail.com> <53FD6400.2070909@denx.de> Message-ID: <20140827051210.GA15640@ulmo> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 > > > >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 > >--- > > 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: