Revision 1de9610c hw/stellaris.c
b/hw/stellaris.c | ||
---|---|---|
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 | 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 | 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 | 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) |
Also available in: Unified diff