void i2c_addressable_register_device(I2CAddressableDeviceInfo *info) { assert(info->i2c.qdev.size >= sizeof(I2CAddressableState)); info->i2c.init = i2c_addressable_device_init; info->i2c.event = i2c_addressable_event; info->i2c.recv = i2c_addressable_rx; info->i2c.send = i2c_addressable_tx; i2c_register_slave(&info->i2c); }
static void z2_init(ram_addr_t ram_size, const char *boot_device, const char *kernel_filename, const char *kernel_cmdline, const char *initrd_filename, const char *cpu_model) { uint32_t sector_len = 0x10000; PXA2xxState *cpu; DriveInfo *dinfo; int be; void *z2_lcd; i2c_bus *bus; DeviceState *wm; if (!cpu_model) { cpu_model = "pxa270-c5"; } /* Setup CPU & memory */ cpu = pxa270_init(z2_binfo.ram_size, cpu_model); #ifdef TARGET_WORDS_BIGENDIAN be = 1; #else be = 0; #endif dinfo = drive_get(IF_PFLASH, 0, 0); if (!dinfo) { fprintf(stderr, "Flash image must be given with the " "'pflash' parameter\n"); exit(1); } if (!pflash_cfi01_register(Z2_FLASH_BASE, qemu_ram_alloc(NULL, "z2.flash0", Z2_FLASH_SIZE), dinfo->bdrv, sector_len, Z2_FLASH_SIZE / sector_len, 4, 0, 0, 0, 0, be)) { fprintf(stderr, "qemu: Error registering flash memory.\n"); exit(1); } /* setup keypad */ pxa27x_register_keypad(cpu->kp, map, 0x100); /* MMC/SD host */ pxa2xx_mmci_handlers(cpu->mmc, NULL, qdev_get_gpio_in(cpu->gpio, Z2_GPIO_SD_DETECT)); ssi_register_slave(&zipit_lcd_info); i2c_register_slave(&aer915_info); z2_lcd = ssi_create_slave(cpu->ssp[1], "zipit-lcd"); bus = pxa2xx_i2c_bus(cpu->i2c[0]); i2c_create_slave(bus, "aer915", 0x55); wm = i2c_create_slave(bus, "wm8750", 0x1b); cpu->i2s->opaque = wm; cpu->i2s->codec_out = wm8750_dac_dat; cpu->i2s->codec_in = wm8750_adc_dat; wm8750_data_req_set(wm, cpu->i2s->data_req, cpu->i2s); qdev_connect_gpio_out(cpu->gpio, Z2_GPIO_LCD_CS, qemu_allocate_irqs(z2_lcd_cs, z2_lcd, 1)[0]); if (kernel_filename) { z2_binfo.kernel_filename = kernel_filename; z2_binfo.kernel_cmdline = kernel_cmdline; z2_binfo.initrd_filename = initrd_filename; z2_binfo.board_id = 0x6dd; arm_load_kernel(cpu->env, &z2_binfo); } }