Commit d2199005d558962641169178cf668be946026797

Authored by Paul Brook
1 parent fe8de492

SSD0303 qdev conversion

Signed-off-by: Paul Brook <paul@codesourcery.com>
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