On 09/20/2017 04:01 AM, Cédric Le Goater wrote: > This is an helper routine to add a single EEPROM on an I2C bus. It can > be directly used by smbus_eeprom_init() which adds a certain number of > EEPROMs on mips and x86 machines. > > Signed-off-by: Cédric Le Goater <[email protected]>
Reviewed-by: Philippe Mathieu-Daudé <[email protected]> > --- > hw/i2c/smbus_eeprom.c | 16 +++++++++++----- > include/hw/i2c/smbus.h | 1 + > 2 files changed, 12 insertions(+), 5 deletions(-) > > diff --git a/hw/i2c/smbus_eeprom.c b/hw/i2c/smbus_eeprom.c > index b13ec0fe7a2a..2d24a4cd59bf 100644 > --- a/hw/i2c/smbus_eeprom.c > +++ b/hw/i2c/smbus_eeprom.c > @@ -140,6 +140,16 @@ static void smbus_eeprom_register_types(void) > > type_init(smbus_eeprom_register_types) > > +void smbus_eeprom_init_one(I2CBus *smbus, uint8_t address, uint8_t > *eeprom_buf) > +{ > + DeviceState *dev; > + > + dev = qdev_create((BusState *) smbus, "smbus-eeprom"); > + qdev_prop_set_uint8(dev, "address", address); > + qdev_prop_set_ptr(dev, "data", eeprom_buf); > + qdev_init_nofail(dev); > +} > + > void smbus_eeprom_init(I2CBus *smbus, int nb_eeprom, > const uint8_t *eeprom_spd, int eeprom_spd_size) > { > @@ -150,10 +160,6 @@ void smbus_eeprom_init(I2CBus *smbus, int nb_eeprom, > } > > for (i = 0; i < nb_eeprom; i++) { > - DeviceState *eeprom; > - eeprom = qdev_create((BusState *)smbus, "smbus-eeprom"); > - qdev_prop_set_uint8(eeprom, "address", 0x50 + i); > - qdev_prop_set_ptr(eeprom, "data", eeprom_buf + (i * 256)); > - qdev_init_nofail(eeprom); > + smbus_eeprom_init_one(smbus, 0x50 + i, eeprom_buf + (i * 256)); > } > } > diff --git a/include/hw/i2c/smbus.h b/include/hw/i2c/smbus.h > index 544bbc19574f..666cdeb04c07 100644 > --- a/include/hw/i2c/smbus.h > +++ b/include/hw/i2c/smbus.h > @@ -77,6 +77,7 @@ int smbus_read_block(I2CBus *bus, uint8_t addr, uint8_t > command, uint8_t *data); > int smbus_write_block(I2CBus *bus, uint8_t addr, uint8_t command, uint8_t > *data, > int len); > > +void smbus_eeprom_init_one(I2CBus *smbus, uint8_t address, uint8_t > *eeprom_buf); > void smbus_eeprom_init(I2CBus *smbus, int nb_eeprom, > const uint8_t *eeprom_spd, int size); > >
