Revision cdbe40ca
b/hw/i2c.h | ||
---|---|---|
80 | 80 |
void max7310_gpio_out_set(i2c_slave *i2c, int line, qemu_irq handler); |
81 | 81 |
|
82 | 82 |
/* wm8750.c */ |
83 |
i2c_slave *wm8750_init(i2c_bus *bus); |
|
84 |
void wm8750_reset(i2c_slave *i2c); |
|
85 |
void wm8750_data_req_set(i2c_slave *i2c, |
|
83 |
void wm8750_data_req_set(DeviceState *dev, |
|
86 | 84 |
void (*data_req)(void *, int, int), void *opaque); |
87 | 85 |
void wm8750_dac_dat(void *opaque, uint32_t sample); |
88 | 86 |
uint32_t wm8750_adc_dat(void *opaque); |
b/hw/musicpal.c | ||
---|---|---|
235 | 235 |
unsigned int play_pos; |
236 | 236 |
unsigned int last_free; |
237 | 237 |
uint32_t clock_div; |
238 |
i2c_slave *wm;
|
|
238 |
DeviceState *wm;
|
|
239 | 239 |
} musicpal_audio_state; |
240 | 240 |
|
241 | 241 |
static void audio_callback(void *opaque, int free_out, int free_in) |
... | ... | |
434 | 434 |
i2c->bus = i2c_init_bus(); |
435 | 435 |
i2c->current_addr = -1; |
436 | 436 |
|
437 |
s->wm = wm8750_init(i2c->bus); |
|
438 |
if (!s->wm) |
|
439 |
return NULL; |
|
440 |
i2c_set_slave_address(s->wm, MP_WM_ADDR); |
|
437 |
s->wm = i2c_create_slave(i2c->bus, "wm8750", MP_WM_ADDR); |
|
441 | 438 |
wm8750_data_req_set(s->wm, audio_callback, s); |
442 | 439 |
|
443 | 440 |
iomemtype = cpu_register_io_memory(0, musicpal_audio_readfn, |
b/hw/spitz.c | ||
---|---|---|
740 | 740 |
i2c_bus *bus = pxa2xx_i2c_bus(cpu->i2c[0]); |
741 | 741 |
|
742 | 742 |
#ifdef HAS_AUDIO |
743 |
i2c_slave *wm;
|
|
743 |
DeviceState *wm;
|
|
744 | 744 |
|
745 | 745 |
/* Attach a WM8750 to the bus */ |
746 |
wm = wm8750_init(bus);
|
|
746 |
wm = i2c_create_slave(bus, "wm8750", 0);
|
|
747 | 747 |
|
748 | 748 |
spitz_wm8750_addr(wm, 0, 0); |
749 | 749 |
pxa2xx_gpio_out_set(cpu->gpio, SPITZ_GPIO_WM, |
b/hw/wm8750.c | ||
---|---|---|
259 | 259 |
} |
260 | 260 |
} |
261 | 261 |
|
262 |
void wm8750_reset(i2c_slave *i2c) |
|
262 |
static void wm8750_reset(i2c_slave *i2c)
|
|
263 | 263 |
{ |
264 | 264 |
WM8750State *s = (WM8750State *) i2c; |
265 | 265 |
s->rate = &wm_rate_table[0]; |
... | ... | |
645 | 645 |
return 0; |
646 | 646 |
} |
647 | 647 |
|
648 |
i2c_slave *wm8750_init(i2c_bus *bus)
|
|
648 |
static void wm8750_init(i2c_slave *i2c)
|
|
649 | 649 |
{ |
650 |
WM8750State *s = (WM8750State *) |
|
651 |
i2c_slave_init(bus, 0, sizeof(WM8750State)); |
|
652 |
s->i2c.event = wm8750_event; |
|
653 |
s->i2c.recv = wm8750_rx; |
|
654 |
s->i2c.send = wm8750_tx; |
|
650 |
WM8750State *s = FROM_I2C_SLAVE(WM8750State, i2c); |
|
655 | 651 |
|
656 | 652 |
AUD_register_card(CODEC, &s->card); |
657 | 653 |
wm8750_reset(&s->i2c); |
658 | 654 |
|
659 | 655 |
register_savevm(CODEC, -1, 0, wm8750_save, wm8750_load, s); |
660 |
|
|
661 |
return &s->i2c; |
|
662 | 656 |
} |
663 | 657 |
|
664 | 658 |
#if 0 |
... | ... | |
671 | 665 |
} |
672 | 666 |
#endif |
673 | 667 |
|
674 |
void wm8750_data_req_set(i2c_slave *i2c,
|
|
668 |
void wm8750_data_req_set(DeviceState *dev,
|
|
675 | 669 |
void (*data_req)(void *, int, int), void *opaque) |
676 | 670 |
{ |
677 |
WM8750State *s = (WM8750State *) i2c;
|
|
671 |
WM8750State *s = FROM_I2C_SLAVE(WM8750State, I2C_SLAVE_FROM_QDEV(dev));
|
|
678 | 672 |
s->data_req = data_req; |
679 | 673 |
s->opaque = opaque; |
680 | 674 |
} |
... | ... | |
730 | 724 |
s->ext_dac_hz = new_hz; |
731 | 725 |
wm8750_clk_update(s, 1); |
732 | 726 |
} |
727 |
|
|
728 |
static I2CSlaveInfo wm8750_info = { |
|
729 |
.init = wm8750_init, |
|
730 |
.event = wm8750_event, |
|
731 |
.recv = wm8750_rx, |
|
732 |
.send = wm8750_tx |
|
733 |
}; |
|
734 |
|
|
735 |
static void wm8750_register_devices(void) |
|
736 |
{ |
|
737 |
i2c_register_slave("wm8750", sizeof(WM8750State), &wm8750_info); |
|
738 |
} |
|
739 |
|
|
740 |
device_init(wm8750_register_devices) |
Also available in: Unified diff