Commit cdbe40ca836624a474bf8378b78a715ded36178c
1 parent
697454eb
WM8750 qdev coversion
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
4 changed files
with
24 additions
and
21 deletions
hw/i2c.h
| ... | ... | @@ -80,9 +80,7 @@ qemu_irq *max7310_gpio_in_get(i2c_slave *i2c); |
| 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); | ... | ... |
hw/musicpal.c
| ... | ... | @@ -235,7 +235,7 @@ typedef struct musicpal_audio_state { |
| 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,10 +434,7 @@ static i2c_interface *musicpal_audio_init(qemu_irq irq) |
| 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, | ... | ... |
hw/spitz.c
| ... | ... | @@ -740,10 +740,10 @@ static void spitz_i2c_setup(PXA2xxState *cpu) |
| 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, | ... | ... |
hw/wm8750.c
| ... | ... | @@ -259,7 +259,7 @@ static void wm8750_clk_update(WM8750State *s, int ext) |
| 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,20 +645,14 @@ static int wm8750_load(QEMUFile *f, void *opaque, int version_id) |
| 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,10 +665,10 @@ static void wm8750_fini(i2c_slave *i2c) |
| 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,3 +724,17 @@ void wm8750_set_bclk_in(void *opaque, int new_hz) |
| 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) | ... | ... |