On Mon, Jun 08, 2009 at 09:27:19AM +0300, Juha Riihimäki wrote: > With the recent device handling changes the I2C slave addressing code > was broken. With current code, if a slave with the correct address is > not found on the bus the last scanned slave on the bus will be > addressed. This is wrong. Please find attached a patch to fix it.
Without this patch, n800/n810 emulation fails to boot. Acked-by: Riku Voipio <riku.voi...@iki.fi> > Signed-off-by: Juha Riihimäki <juha.riihim...@nokia.com> > --- > diff --git a/hw/i2c.c b/hw/i2c.c > index 8a0c4d7..e1dacef 100644 > --- a/hw/i2c.c > +++ b/hw/i2c.c > @@ -69,9 +69,11 @@ int i2c_start_transfer(i2c_bus *bus, int address, int > recv) > i2c_slave *slave = NULL; > > LIST_FOREACH(qdev, &bus->qbus.children, sibling) { > - slave = I2C_SLAVE_FROM_QDEV(qdev); > - if (slave->address == address) > + i2c_slave *candidate = I2C_SLAVE_FROM_QDEV(qdev); > + if (candidate->address == address) { > + slave = candidate; > break; > + } > } > > if (!slave)