Commit d2199005d558962641169178cf668be946026797
1 parent
fe8de492
SSD0303 qdev conversion
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
3 changed files
with
17 additions
and
11 deletions
hw/i2c.h
| @@ -91,9 +91,6 @@ void *wm8750_dac_buffer(void *opaque, int samples); | @@ -91,9 +91,6 @@ void *wm8750_dac_buffer(void *opaque, int samples); | ||
| 91 | void wm8750_dac_commit(void *opaque); | 91 | void wm8750_dac_commit(void *opaque); |
| 92 | void wm8750_set_bclk_in(void *opaque, int new_hz); | 92 | void wm8750_set_bclk_in(void *opaque, int new_hz); |
| 93 | 93 | ||
| 94 | -/* ssd0303.c */ | ||
| 95 | -void ssd0303_init(i2c_bus *bus, int address); | ||
| 96 | - | ||
| 97 | /* twl92230.c */ | 94 | /* twl92230.c */ |
| 98 | i2c_slave *twl92230_init(i2c_bus *bus, qemu_irq irq); | 95 | i2c_slave *twl92230_init(i2c_bus *bus, qemu_irq irq); |
| 99 | qemu_irq *twl92230_gpio_in_get(i2c_slave *i2c); | 96 | qemu_irq *twl92230_gpio_in_get(i2c_slave *i2c); |
hw/ssd0303.c
| @@ -10,7 +10,6 @@ | @@ -10,7 +10,6 @@ | ||
| 10 | /* The controller can support a variety of different displays, but we only | 10 | /* The controller can support a variety of different displays, but we only |
| 11 | implement one. Most of the commends relating to brightness and geometry | 11 | implement one. Most of the commends relating to brightness and geometry |
| 12 | setup are ignored. */ | 12 | setup are ignored. */ |
| 13 | -#include "hw.h" | ||
| 14 | #include "i2c.h" | 13 | #include "i2c.h" |
| 15 | #include "console.h" | 14 | #include "console.h" |
| 16 | 15 | ||
| @@ -305,17 +304,27 @@ static int ssd0303_load(QEMUFile *f, void *opaque, int version_id) | @@ -305,17 +304,27 @@ static int ssd0303_load(QEMUFile *f, void *opaque, int version_id) | ||
| 305 | return 0; | 304 | return 0; |
| 306 | } | 305 | } |
| 307 | 306 | ||
| 308 | -void ssd0303_init(i2c_bus *bus, int address) | 307 | +static void ssd0303_init(i2c_slave *i2c) |
| 309 | { | 308 | { |
| 310 | - ssd0303_state *s; | 309 | + ssd0303_state *s = FROM_I2C_SLAVE(ssd0303_state, i2c); |
| 311 | 310 | ||
| 312 | - s = (ssd0303_state *)i2c_slave_init(bus, address, sizeof(ssd0303_state)); | ||
| 313 | - s->i2c.event = ssd0303_event; | ||
| 314 | - s->i2c.recv = ssd0303_recv; | ||
| 315 | - s->i2c.send = ssd0303_send; | ||
| 316 | s->ds = graphic_console_init(ssd0303_update_display, | 311 | s->ds = graphic_console_init(ssd0303_update_display, |
| 317 | ssd0303_invalidate_display, | 312 | ssd0303_invalidate_display, |
| 318 | NULL, NULL, s); | 313 | NULL, NULL, s); |
| 319 | qemu_console_resize(s->ds, 96 * MAGNIFY, 16 * MAGNIFY); | 314 | qemu_console_resize(s->ds, 96 * MAGNIFY, 16 * MAGNIFY); |
| 320 | register_savevm("ssd0303_oled", -1, 1, ssd0303_save, ssd0303_load, s); | 315 | register_savevm("ssd0303_oled", -1, 1, ssd0303_save, ssd0303_load, s); |
| 321 | } | 316 | } |
| 317 | + | ||
| 318 | +static I2CSlaveInfo ssd0303_info = { | ||
| 319 | + .init = ssd0303_init, | ||
| 320 | + .event = ssd0303_event, | ||
| 321 | + .recv = ssd0303_recv, | ||
| 322 | + .send = ssd0303_send | ||
| 323 | +}; | ||
| 324 | + | ||
| 325 | +static void ssd0303_register_devices(void) | ||
| 326 | +{ | ||
| 327 | + i2c_register_slave("ssd0303", sizeof(ssd0303_state), &ssd0303_info); | ||
| 328 | +} | ||
| 329 | + | ||
| 330 | +device_init(ssd0303_register_devices) |
hw/stellaris.c
| @@ -1324,7 +1324,7 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, | @@ -1324,7 +1324,7 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, | ||
| 1324 | i2c = i2c_init_bus(); | 1324 | i2c = i2c_init_bus(); |
| 1325 | stellaris_i2c_init(0x40020000, pic[8], i2c); | 1325 | stellaris_i2c_init(0x40020000, pic[8], i2c); |
| 1326 | if (board->peripherals & BP_OLED_I2C) { | 1326 | if (board->peripherals & BP_OLED_I2C) { |
| 1327 | - ssd0303_init(i2c, 0x3d); | 1327 | + i2c_create_slave(i2c, "ssd0303", 0x3d); |
| 1328 | } | 1328 | } |
| 1329 | } | 1329 | } |
| 1330 | 1330 |