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);
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)
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,
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,
}
}
-void wm8750_reset(i2c_slave *i2c)
+static void wm8750_reset(i2c_slave *i2c)
{
WM8750State *s = (WM8750State *) i2c;
s->rate = &wm_rate_table[0];
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
}
#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;
}
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)