Am 24.07.2013 09:48, schrieb Andreas Färber:
> Signed-off-by: Andreas Färber <[email protected]>
> ---
> hw/arm/pxa2xx.c | 26 +++++++++++++++++---------
> 1 file changed, 17 insertions(+), 9 deletions(-)
>
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index 6548338..ab145ee 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -1224,8 +1224,15 @@ typedef struct {
> PXA2xxI2CState *host;
> } PXA2xxI2CSlaveState;
>
> +#define TYPE_PXA2XX_I2C "pxa2xx_i2c"
> +#define PXA2XX_I2C(obj) \
> + OBJECT_CHECK(PXA2xxI2CState, (obj), TYPE_PXA2XX_I2C)
> +
> struct PXA2xxI2CState {
> - SysBusDevice busdev;
> + /*< private >*/
> + SysBusDevice parent_obj;
> + /*< public >*/
> +
> MemoryRegion iomem;
> PXA2xxI2CSlaveState *slave;
> i2c_bus *bus;
> @@ -1473,7 +1480,7 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
> SysBusDevice *i2c_dev;
> PXA2xxI2CState *s;
>
> - i2c_dev = SYS_BUS_DEVICE(qdev_create(NULL, "pxa2xx_i2c"));
> + i2c_dev = SYS_BUS_DEVICE(qdev_create(NULL, TYPE_PXA2XX_I2C));
> qdev_prop_set_uint32(&i2c_dev->qdev, "size", region_size + 1);
> qdev_prop_set_uint32(&i2c_dev->qdev, "offset", base & region_size);
>
> @@ -1482,7 +1489,7 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
> sysbus_mmio_map(i2c_dev, 0, base & ~region_size);
> sysbus_connect_irq(i2c_dev, 0, irq);
>
> - s = FROM_SYSBUS(PXA2xxI2CState, i2c_dev);
> + s = PXA2XX_I2C(i2c_dev);
> /* FIXME: Should the slave device really be on a separate bus? */
> dev = i2c_create_slave(i2c_init_bus(NULL, "dummy"), "pxa2xx-i2c-slave",
> 0);
> s->slave = FROM_I2C_SLAVE(PXA2xxI2CSlaveState, I2C_SLAVE(dev));
[snip]
Needs the following addition.
Andreas
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index ab145ee..ec3ac58 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -1480,11 +1480,12 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
SysBusDevice *i2c_dev;
PXA2xxI2CState *s;
- i2c_dev = SYS_BUS_DEVICE(qdev_create(NULL, TYPE_PXA2XX_I2C));
- qdev_prop_set_uint32(&i2c_dev->qdev, "size", region_size + 1);
- qdev_prop_set_uint32(&i2c_dev->qdev, "offset", base & region_size);
+ dev = qdev_create(NULL, TYPE_PXA2XX_I2C);
+ i2c_dev = SYS_BUS_DEVICE(dev);
+ qdev_prop_set_uint32(dev, "size", region_size + 1);
+ qdev_prop_set_uint32(dev, "offset", base & region_size);
- qdev_init_nofail(&i2c_dev->qdev);
+ qdev_init_nofail(dev);
sysbus_mmio_map(i2c_dev, 0, base & ~region_size);
sysbus_connect_irq(i2c_dev, 0, irq);
--
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg