From fd8208c11ab00085713d0c1f1f83419c3fae2392 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Thu, 14 May 2009 22:35:08 +0100 Subject: [PATCH] WM8750 qdev coversion Signed-off-by: Paul Brook --- hw/i2c.h | 4 +--- hw/musicpal.c | 7 ++----- hw/spitz.c | 4 ++-- hw/wm8750.c | 30 +++++++++++++++++++----------- 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/hw/i2c.h b/hw/i2c.h index 723dbdc..99e0dbc 100644 --- a/hw/i2c.h +++ b/hw/i2c.h @@ -80,9 +80,7 @@ qemu_irq *max7310_gpio_in_get(i2c_slave *i2c); void max7310_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler); /* wm8750.c */ -i2c_slave *wm8750_init(i2c_bus *bus); -void wm8750_reset(i2c_slave *i2c); -void wm8750_data_req_set(i2c_slave *i2c, +void wm8750_data_req_set(DeviceState *dev, void (*data_req)(void *, int, int), void *opaque); void wm8750_dac_dat(void *opaque, uint32_t sample); uint32_t wm8750_adc_dat(void *opaque); diff --git a/hw/musicpal.c b/hw/musicpal.c index 538fb8e..87dda0c 100644 --- a/hw/musicpal.c +++ b/hw/musicpal.c @@ -235,7 +235,7 @@ typedef struct musicpal_audio_state { unsigned int play_pos; unsigned int last_free; uint32_t clock_div; - i2c_slave *wm; + DeviceState *wm; } musicpal_audio_state; static void audio_callback(void *opaque, int free_out, int free_in) @@ -434,10 +434,7 @@ static i2c_interface *musicpal_audio_init(qemu_irq irq) i2c->bus = i2c_init_bus(); i2c->current_addr = -1; - s->wm = wm8750_init(i2c->bus); - if (!s->wm) - return NULL; - i2c_set_slave_address(s->wm, MP_WM_ADDR); + s->wm = i2c_create_slave(i2c->bus, "wm8750", MP_WM_ADDR); wm8750_data_req_set(s->wm, audio_callback, s); iomemtype = cpu_register_io_memory(0, musicpal_audio_readfn, diff --git a/hw/spitz.c b/hw/spitz.c index 943302b..f59f39c 100644 --- a/hw/spitz.c +++ b/hw/spitz.c @@ -740,10 +740,10 @@ static void spitz_i2c_setup(PXA2xxState *cpu) i2c_bus *bus = pxa2xx_i2c_bus(cpu->i2c[0]); #ifdef HAS_AUDIO - i2c_slave *wm; + DeviceState *wm; /* Attach a WM8750 to the bus */ - wm = wm8750_init(bus); + wm = i2c_create_slave(bus, "wm8750", 0); spitz_wm8750_addr(wm, 0, 0); pxa2xx_gpio_out_set(cpu->gpio, SPITZ_GPIO_WM, diff --git a/hw/wm8750.c b/hw/wm8750.c index bb5106d..9f5bd46 100644 --- a/hw/wm8750.c +++ b/hw/wm8750.c @@ -259,7 +259,7 @@ static void wm8750_clk_update(WM8750State *s, int ext) } } -void wm8750_reset(i2c_slave *i2c) +static void wm8750_reset(i2c_slave *i2c) { WM8750State *s = (WM8750State *) i2c; s->rate = &wm_rate_table[0]; @@ -645,20 +645,14 @@ static int wm8750_load(QEMUFile *f, void *opaque, int version_id) return 0; } -i2c_slave *wm8750_init(i2c_bus *bus) +static void wm8750_init(i2c_slave *i2c) { - WM8750State *s = (WM8750State *) - i2c_slave_init(bus, 0, sizeof(WM8750State)); - s->i2c.event = wm8750_event; - s->i2c.recv = wm8750_rx; - s->i2c.send = wm8750_tx; + WM8750State *s = FROM_I2C_SLAVE(WM8750State, i2c); AUD_register_card(CODEC, &s->card); wm8750_reset(&s->i2c); register_savevm(CODEC, -1, 0, wm8750_save, wm8750_load, s); - - return &s->i2c; } #if 0 @@ -671,10 +665,10 @@ static void wm8750_fini(i2c_slave *i2c) } #endif -void wm8750_data_req_set(i2c_slave *i2c, +void wm8750_data_req_set(DeviceState *dev, void (*data_req)(void *, int, int), void *opaque) { - WM8750State *s = (WM8750State *) i2c; + WM8750State *s = FROM_I2C_SLAVE(WM8750State, I2C_SLAVE_FROM_QDEV(dev)); s->data_req = data_req; s->opaque = opaque; } @@ -730,3 +724,17 @@ void wm8750_set_bclk_in(void *opaque, int new_hz) s->ext_dac_hz = new_hz; wm8750_clk_update(s, 1); } + +static I2CSlaveInfo wm8750_info = { + .init = wm8750_init, + .event = wm8750_event, + .recv = wm8750_rx, + .send = wm8750_tx +}; + +static void wm8750_register_devices(void) +{ + i2c_register_slave("wm8750", sizeof(WM8750State), &wm8750_info); +} + +device_init(wm8750_register_devices) -- 2.7.4