Commit 1de9610c8ff80aa2a47b6cbe8c198b935916feda
1 parent
e325e1f8
Stellaris I2C qdev conversion
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
1 changed file
with
18 additions
and
7 deletions
hw/stellaris.c
... | ... | @@ -680,6 +680,7 @@ static void stellaris_sys_init(uint32_t base, qemu_irq irq, |
680 | 680 | /* I2C controller. */ |
681 | 681 | |
682 | 682 | typedef struct { |
683 | + SysBusDevice busdev; | |
683 | 684 | i2c_bus *bus; |
684 | 685 | qemu_irq irq; |
685 | 686 | uint32_t msa; |
... | ... | @@ -870,18 +871,19 @@ static int stellaris_i2c_load(QEMUFile *f, void *opaque, int version_id) |
870 | 871 | return 0; |
871 | 872 | } |
872 | 873 | |
873 | -static void stellaris_i2c_init(uint32_t base, qemu_irq irq, i2c_bus *bus) | |
874 | +static void stellaris_i2c_init(SysBusDevice * dev) | |
874 | 875 | { |
875 | - stellaris_i2c_state *s; | |
876 | + stellaris_i2c_state *s = FROM_SYSBUS(stellaris_i2c_state, dev); | |
877 | + i2c_bus *bus = i2c_init_bus(); | |
876 | 878 | int iomemtype; |
877 | 879 | |
878 | - s = (stellaris_i2c_state *)qemu_mallocz(sizeof(stellaris_i2c_state)); | |
879 | - s->irq = irq; | |
880 | + sysbus_init_irq(dev, &s->irq); | |
881 | + qdev_attach_child_bus(&dev->qdev, "i2c", bus); | |
880 | 882 | s->bus = bus; |
881 | 883 | |
882 | 884 | iomemtype = cpu_register_io_memory(0, stellaris_i2c_readfn, |
883 | 885 | stellaris_i2c_writefn, s); |
884 | - cpu_register_physical_memory(base, 0x00001000, iomemtype); | |
886 | + sysbus_init_mmio(dev, 0x1000, iomemtype); | |
885 | 887 | /* ??? For now we only implement the master interface. */ |
886 | 888 | stellaris_i2c_reset(s); |
887 | 889 | register_savevm("stellaris_i2c", -1, 1, |
... | ... | @@ -1321,8 +1323,9 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, |
1321 | 1323 | } |
1322 | 1324 | |
1323 | 1325 | if (board->dc2 & (1 << 12)) { |
1324 | - i2c = i2c_init_bus(); | |
1325 | - stellaris_i2c_init(0x40020000, pic[8], i2c); | |
1326 | + DeviceState *dev; | |
1327 | + dev = sysbus_create_simple("stellaris-i2c", 0x40020000, pic[8]); | |
1328 | + i2c = qdev_get_child_bus(dev, "i2c"); | |
1326 | 1329 | if (board->peripherals & BP_OLED_I2C) { |
1327 | 1330 | i2c_create_slave(i2c, "ssd0303", 0x3d); |
1328 | 1331 | } |
... | ... | @@ -1409,3 +1412,11 @@ QEMUMachine lm3s6965evb_machine = { |
1409 | 1412 | .desc = "Stellaris LM3S6965EVB", |
1410 | 1413 | .init = lm3s6965evb_init, |
1411 | 1414 | }; |
1415 | + | |
1416 | +static void stellaris_register_devices(void) | |
1417 | +{ | |
1418 | + sysbus_register_dev("stellaris-i2c", sizeof(stellaris_i2c_state), | |
1419 | + stellaris_i2c_init); | |
1420 | +} | |
1421 | + | |
1422 | +device_init(stellaris_register_devices) | ... | ... |