fix I2C slave addressing
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>
This commit is contained in:
		
							parent
							
								
									51954d565f
								
							
						
					
					
						commit
						b3a219883e
					
				
							
								
								
									
										6
									
								
								hw/i2c.c
								
								
								
								
							
							
						
						
									
										6
									
								
								hw/i2c.c
								
								
								
								
							| 
						 | 
				
			
			@ -85,10 +85,12 @@ int i2c_start_transfer(i2c_bus *bus, uint8_t address, int recv)
 | 
			
		|||
    i2c_slave *slave = NULL;
 | 
			
		||||
 | 
			
		||||
    QLIST_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)
 | 
			
		||||
        return 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue