Revision 5b7f5327 hw/i2c.c

b/hw/i2c.c
14 14
    BusState qbus;
15 15
    i2c_slave *current_dev;
16 16
    i2c_slave *dev;
17
    int saved_address;
17
    uint8_t saved_address;
18 18
};
19 19

  
20 20
static struct BusInfo i2c_bus_info = {
21 21
    .name = "I2C",
22 22
    .size = sizeof(i2c_bus),
23 23
    .props = (Property[]) {
24
        DEFINE_PROP_UINT32("address", struct i2c_slave, address, 0),
24
        DEFINE_PROP_UINT8("address", struct i2c_slave, address, 0),
25 25
        DEFINE_PROP_END_OF_LIST(),
26 26
    }
27 27
};
......
29 29
static void i2c_bus_save(QEMUFile *f, void *opaque)
30 30
{
31 31
    i2c_bus *bus = (i2c_bus *)opaque;
32
    bus->saved_address = bus->current_dev ? bus->current_dev->address : -1;
32 33

  
33
    qemu_put_byte(f, bus->current_dev ? bus->current_dev->address : -1);
34
    qemu_put_8s(f, &bus->saved_address);
34 35
}
35 36

  
36 37
static int i2c_bus_load(QEMUFile *f, void *opaque, int version_id)
......
42 43

  
43 44
    /* The bus is loaded before attached devices, so load and save the
44 45
       current device id.  Devices will check themselves as loaded.  */
45
    bus->saved_address = (int8_t) qemu_get_byte(f);
46
    qemu_get_8s(f, &bus->saved_address);
46 47
    bus->current_dev = NULL;
47 48

  
48 49
    return 0;
......
58 59
    return bus;
59 60
}
60 61

  
61
void i2c_set_slave_address(i2c_slave *dev, int address)
62
void i2c_set_slave_address(i2c_slave *dev, uint8_t address)
62 63
{
63 64
    dev->address = address;
64 65
}
......
71 72

  
72 73
/* Returns non-zero if the address is not valid.  */
73 74
/* TODO: Make this handle multiple masters.  */
74
int i2c_start_transfer(i2c_bus *bus, int address, int recv)
75
int i2c_start_transfer(i2c_bus *bus, uint8_t address, int recv)
75 76
{
76 77
    DeviceState *qdev;
77 78
    i2c_slave *slave = NULL;
......
136 137

  
137 138
void i2c_slave_save(QEMUFile *f, i2c_slave *dev)
138 139
{
139
    qemu_put_byte(f, dev->address);
140
    qemu_put_8s(f, &dev->address);
140 141
}
141 142

  
142 143
void i2c_slave_load(QEMUFile *f, i2c_slave *dev)
143 144
{
144 145
    i2c_bus *bus;
145 146
    bus = FROM_QBUS(i2c_bus, qdev_get_parent_bus(&dev->qdev));
146
    dev->address = qemu_get_byte(f);
147
    qemu_get_8s(f, &dev->address);
147 148
    if (bus->saved_address == dev->address) {
148 149
        bus->current_dev = dev;
149 150
    }
......
167 168
    qdev_register(&info->qdev);
168 169
}
169 170

  
170
DeviceState *i2c_create_slave(i2c_bus *bus, const char *name, int addr)
171
DeviceState *i2c_create_slave(i2c_bus *bus, const char *name, uint8_t addr)
171 172
{
172 173
    DeviceState *dev;
173 174

  
174 175
    dev = qdev_create(&bus->qbus, name);
175
    qdev_prop_set_uint32(dev, "address", addr);
176
    qdev_prop_set_uint8(dev, "address", addr);
176 177
    qdev_init(dev);
177 178
    return dev;
178 179
}

Also available in: Unified diff