From: Alastair D'Silva <alast...@d-silva.org> The imx25 chip provides 3 i2c buses, but they have all been named "i2c", which makes it difficult to predict which bus a device will be connected to when specified on the command line.
This patch addresses the issue by naming the buses uniquely: i2c.0 i2c.1 i2c.2 Signed-off-by: Alastair D'Silva <alast...@d-silva.org> --- hw/arm/imx25_pdk.c | 4 +--- hw/i2c/imx_i2c.c | 6 +++++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/arm/imx25_pdk.c b/hw/arm/imx25_pdk.c index 025b608..c6f04d3 100644 --- a/hw/arm/imx25_pdk.c +++ b/hw/arm/imx25_pdk.c @@ -138,9 +138,7 @@ static void imx25_pdk_init(MachineState *machine) * We add it here (only on qtest usage) to be able to do a bit * of simple qtest. See "make check" for details. */ - i2c_create_slave((I2CBus *)qdev_get_child_bus(DEVICE(&s->soc.i2c[0]), - "i2c"), - "ds1338", 0x68); + i2c_create_slave(s->soc.i2c[0].bus, "ds1338", 0x68); } } diff --git a/hw/i2c/imx_i2c.c b/hw/i2c/imx_i2c.c index 37e5a62..7be10fb 100644 --- a/hw/i2c/imx_i2c.c +++ b/hw/i2c/imx_i2c.c @@ -305,12 +305,16 @@ static const VMStateDescription imx_i2c_vmstate = { static void imx_i2c_realize(DeviceState *dev, Error **errp) { IMXI2CState *s = IMX_I2C(dev); + static int bus_count; + char name[16]; + + snprintf(name, sizeof(name), "i2c.%d", bus_count++); memory_region_init_io(&s->iomem, OBJECT(s), &imx_i2c_ops, s, TYPE_IMX_I2C, IMX_I2C_MEM_SIZE); sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem); sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq); - s->bus = i2c_init_bus(DEVICE(dev), "i2c"); + s->bus = i2c_init_bus(DEVICE(dev), name); } static void imx_i2c_class_init(ObjectClass *klass, void *data) -- 2.9.3