]> git.proxmox.com Git - qemu.git/commitdiff
fix I2C slave addressing
authorJuha Riihimäki <Juha.Riihimaki@nokia.com>
Mon, 8 Jun 2009 06:27:19 +0000 (09:27 +0300)
committerAurelien Jarno <aurelien@aurel32.net>
Wed, 2 Dec 2009 16:24:48 +0000 (17:24 +0100)
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.

Signed-off-by: Juha Riihimäki <juha.riihimaki@nokia.com>
Acked-by: Riku Voipio <riku.voipio@iki.fi>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
hw/i2c.c

index 42a5d7a6b8f84ad485c9b46c6c2cab4d172ad065..16e511215dee127c6428733496551e45c38b5849 100644 (file)
--- a/hw/i2c.c
+++ b/hw/i2c.c
@@ -81,9 +81,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)