Lines Matching refs:emu
31 #define HANA_FILENAME "emu/hana.fw"
32 #define DOCK_FILENAME "emu/audio_dock.fw"
33 #define EMU1010B_FILENAME "emu/emu1010b.fw"
34 #define MICRO_DOCK_FILENAME "emu/micro_dock.fw"
35 #define EMU0404_FILENAME "emu/emu0404.fw"
36 #define EMU1010_NOTEBOOK_FILENAME "emu/emu1010_notebook.fw"
50 void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch)
52 snd_emu10k1_ptr_write_multiple(emu, ch,
85 if (emu->audigy) {
86 snd_emu10k1_ptr_write_multiple(emu, ch,
138 static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir)
146 HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
148 outl(0, emu->port + INTE);
150 snd_emu10k1_ptr_write_multiple(emu, 0,
169 if (emu->audigy) {
171 snd_emu10k1_ptr_write(emu, SPBYPASS, 0, SPBYPASS_FORMAT);
173 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_REAR_RIGHT |
179 snd_emu10k1_voice_init(emu, ch);
181 snd_emu10k1_ptr_write_multiple(emu, 0,
182 SPCS0, emu->spdif_bits[0],
183 SPCS1, emu->spdif_bits[1],
184 SPCS2, emu->spdif_bits[2],
187 if (emu->card_capabilities->emu_model) {
188 } else if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
191 snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000);
194 snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14);
197 snd_emu10k1_ptr20_write(emu, SRCMULTI_ENABLE, 0, 0xFFFFFFFF);
200 outl(0x0201, emu->port + HCFG2);
202 snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4);
203 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */
205 dev_info(emu->card->dev, "Audigy2 value: Special config.\n");
207 snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000);
210 snd_emu10k1_ptr20_write(emu, P17V_SRCSel, 0, 0x14);
213 snd_emu10k1_ptr20_write(emu, P17V_MIXER_I2S_ENABLE, 0, 0xFF000000);
219 snd_emu10k1_ptr20_write(emu, P17V_MIXER_SPDIF_ENABLE, 0, 0xFF000000);
221 tmp = inw(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */
222 outw(tmp, emu->port + A_IOCFG);
224 if (emu->card_capabilities->spi_dac) { /* Audigy 2 ZS Notebook with DAC Wolfson WM8768/WM8568 */
229 snd_emu10k1_spi_write(emu, spi_dac_init[n]);
231 snd_emu10k1_ptr20_write(emu, 0x60, 0, 0x10);
242 outw(0x76, emu->port + A_IOCFG); /* Windows uses 0x3f76 */
244 if (emu->card_capabilities->i2c_adc) { /* Audigy 2 ZS Notebook with ADC Wolfson WM8775 */
247 snd_emu10k1_ptr20_write(emu, P17V_I2S_SRC_SEL, 0, 0x2020205f);
248 tmp = inw(emu->port + A_IOCFG);
249 outw(tmp | 0x4, emu->port + A_IOCFG); /* Set bit 2 for mic input */
250 tmp = inw(emu->port + A_IOCFG);
253 snd_emu10k1_i2c_write(emu, i2c_adc_init[n][0], i2c_adc_init[n][1]);
255 emu->i2c_capture_volume[n][0] = 0xcf;
256 emu->i2c_capture_volume[n][1] = 0xcf;
261 snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
262 snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */
263 snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_256K); /* taken from original driver */
265 silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
267 snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
268 snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
271 if (emu->card_capabilities->emu_model) {
274 HCFG_AUDIOENABLE, emu->port + HCFG);
282 } else if (emu->audigy) {
283 if (emu->revision == 4) /* audigy2 */
287 HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
289 outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
290 /* FIXME: Remove all these emu->model and replace it with a card recognition parameter,
292 } else if (emu->model == 0x20 ||
293 emu->model == 0xc400 ||
294 (emu->model == 0x21 && emu->revision < 6))
295 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE, emu->port + HCFG);
298 outl(HCFG_LOCKTANKCACHE_MASK | HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
301 if (emu->card_capabilities->emu_model) {
303 } else if (emu->card_capabilities->i2c_adc) {
305 } else if (emu->audigy) {
306 u16 reg = inw(emu->port + A_IOCFG);
307 outw(reg | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
309 outw(reg | A_IOCFG_GPOUT1 | A_IOCFG_GPOUT2, emu->port + A_IOCFG);
311 outw(reg, emu->port + A_IOCFG);
313 unsigned int reg = inl(emu->port + HCFG);
314 outl(reg | HCFG_GPOUT2, emu->port + HCFG);
316 outl(reg | HCFG_GPOUT1 | HCFG_GPOUT2, emu->port + HCFG);
318 outl(reg, emu->port + HCFG);
322 if (emu->card_capabilities->emu_model) {
324 } else if (emu->card_capabilities->i2c_adc) {
326 } else if (emu->audigy) { /* enable analog output */
327 u16 reg = inw(emu->port + A_IOCFG);
328 outw(reg | A_IOCFG_GPOUT0, emu->port + A_IOCFG);
331 if (emu->address_mode == 0) {
333 outl(inl(emu->port + HCFG) | HCFG_EXPANDED_MEM, emu->port + HCFG);
339 static void snd_emu10k1_audio_enable(struct snd_emu10k1 *emu)
344 outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG);
347 if (emu->card_capabilities->emu_model) {
349 } else if (emu->card_capabilities->i2c_adc) {
351 } else if (emu->audigy) {
352 outw(inw(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG);
354 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
358 outw(inw(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG);
359 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */
361 outw(inw(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG);
364 outw(inw(emu->port + A_IOCFG) | 0x0080, emu->port + A_IOCFG);
373 emu->tos_link = 0;
374 tmp = inl(emu->port + HCFG);
376 outl(tmp|0x800, emu->port + HCFG);
378 if (tmp != (inl(emu->port + HCFG) & ~0x800)) {
379 emu->tos_link = 1;
380 outl(tmp, emu->port + HCFG);
386 if (emu->card_capabilities->emu_model)
387 snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE | INTE_A_GPIOENABLE);
389 snd_emu10k1_intr_enable(emu, INTE_PCIERRORENABLE);
392 int snd_emu10k1_done(struct snd_emu10k1 *emu)
396 outl(0, emu->port + INTE);
402 snd_emu10k1_ptr_write_multiple(emu, ch,
412 if (emu->audigy)
413 snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP);
415 snd_emu10k1_ptr_write(emu, DBG, 0, EMU10K1_DBG_SINGLE_STEP);
417 snd_emu10k1_ptr_write_multiple(emu, 0,
440 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
522 static void snd_emu10k1_ecard_write(struct snd_emu10k1 *emu, unsigned int value)
529 hc_port = emu->port + HCFG;
560 static void snd_emu10k1_ecard_setadcgain(struct snd_emu10k1 *emu,
566 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
569 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl & ~EC_TRIM_CSN);
574 value = emu->ecard_ctrl & ~(EC_TRIM_CSN | EC_TRIM_SDATA);
580 snd_emu10k1_ecard_write(emu, value);
581 snd_emu10k1_ecard_write(emu, value | EC_TRIM_SCLK);
582 snd_emu10k1_ecard_write(emu, value);
585 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
588 static int snd_emu10k1_ecard_init(struct snd_emu10k1 *emu)
593 emu->ecard_ctrl = EC_RAW_RUN_MODE |
599 hc_value = inl(emu->port + HCFG);
600 outl(hc_value | HCFG_AUDIOENABLE | HCFG_CODECFORMAT_I2S, emu->port + HCFG);
601 inl(emu->port + HCFG);
604 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
607 snd_emu10k1_ecard_write(emu, EC_DACCAL | EC_LEDN | EC_TRIM_CSN);
612 snd_emu10k1_wait(emu, 48000);
617 snd_emu10k1_ecard_write(emu, EC_ADCCAL | EC_LEDN | EC_TRIM_CSN);
620 snd_emu10k1_ecard_write(emu, emu->ecard_ctrl);
623 snd_emu10k1_ecard_setadcgain(emu, EC_DEFAULT_ADC_GAIN);
628 static int snd_emu10k1_cardbus_init(struct snd_emu10k1 *emu)
636 special_port = emu->port + 0x38;
649 snd_emu10k1_ptr20_write(emu, TINA2_VOLUME, 0, 0xfefefefe); /* Defaults to 0x30303030 */
655 static int snd_emu1010_load_firmware_entry(struct snd_emu10k1 *emu,
673 spin_lock_irq(&emu->emu_lock);
674 outw(0x00, emu->port + A_GPIO); /* Set PGMN low for 100uS. */
675 write_post = inw(emu->port + A_GPIO);
677 outw(0x80, emu->port + A_GPIO); /* Leave bit 7 set during netlist setup. */
678 write_post = inw(emu->port + A_GPIO);
687 outw(reg, emu->port + A_GPIO);
688 write_post = inw(emu->port + A_GPIO);
689 outw(reg | 0x40, emu->port + A_GPIO);
690 write_post = inw(emu->port + A_GPIO);
694 outw(0x10, emu->port + A_GPIO);
695 write_post = inw(emu->port + A_GPIO);
696 spin_unlock_irq(&emu->emu_lock);
717 static int snd_emu1010_load_firmware(struct snd_emu10k1 *emu, int dock,
724 filename = firmware_names[emu->card_capabilities->emu_model][dock];
727 err = request_firmware(fw, filename, &emu->pci->dev);
732 return snd_emu1010_load_firmware_entry(emu, *fw);
737 struct snd_emu10k1 *emu;
741 emu = container_of(work, struct snd_emu10k1,
743 if (emu->card->shutdown)
746 if (emu->suspend)
749 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®); /* OPTIONS: Which cards are attached to the EMU */
753 dev_info(emu->card->dev,
755 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG,
757 err = snd_emu1010_load_firmware(emu, 1, &emu->dock_fw);
760 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0);
761 snd_emu1010_fpga_read(emu, EMU_HANA_ID, &tmp);
762 dev_info(emu->card->dev,
766 dev_info(emu->card->dev,
771 dev_info(emu->card->dev,
773 snd_emu1010_fpga_read(emu, EMU_DOCK_MAJOR_REV, &tmp);
774 snd_emu1010_fpga_read(emu, EMU_DOCK_MINOR_REV, &tmp2);
775 dev_info(emu->card->dev, "Audio Dock ver: %u.%u\n", tmp, tmp2);
780 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
786 struct snd_emu10k1 *emu;
789 emu = container_of(work, struct snd_emu10k1,
791 if (emu->card->shutdown)
794 if (emu->suspend)
798 spin_lock_irq(&emu->reg_lock);
800 emu->emu1010.clock_source = emu->emu1010.clock_fallback;
801 emu->emu1010.wclock = 1 - emu->emu1010.clock_source;
802 snd_emu1010_update_clock(emu);
803 spin_unlock_irq(&emu->reg_lock);
804 snd_ctl_build_ioff(&id, emu->ctl_clock_source, 0);
805 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE, &id);
808 static void emu1010_interrupt(struct snd_emu10k1 *emu)
812 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, &sts);
815 dev_info(emu->card->dev, "emu1010: Audio Dock detached\n");
817 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
819 schedule_work(&emu->emu1010.firmware_work);
822 schedule_work(&emu->emu1010.clock_work);
833 static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
838 dev_info(emu->card->dev, "emu1010: Special config.\n");
842 outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG);
845 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0);
848 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
849 dev_dbg(emu->card->dev, "reg1 = 0x%x\n", reg);
854 snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_HANA);
856 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
857 dev_dbg(emu->card->dev, "reg2 = 0x%x\n", reg);
860 dev_info(emu->card->dev,
864 dev_info(emu->card->dev, "emu1010: EMU_HANA_ID = 0x%x\n", reg);
866 err = snd_emu1010_load_firmware(emu, 0, &emu->firmware);
868 dev_info(emu->card->dev, "emu1010: Loading Firmware failed\n");
873 snd_emu1010_fpga_read(emu, EMU_HANA_ID, ®);
876 dev_info(emu->card->dev,
882 dev_info(emu->card->dev, "emu1010: Hana Firmware loaded\n");
883 snd_emu1010_fpga_read(emu, EMU_HANA_MAJOR_REV, &tmp);
884 snd_emu1010_fpga_read(emu, EMU_HANA_MINOR_REV, &tmp2);
885 dev_info(emu->card->dev, "emu1010: Hana version: %u.%u\n", tmp, tmp2);
887 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, EMU_HANA_DOCK_PWR_ON);
889 snd_emu1010_fpga_read(emu, EMU_HANA_OPTION_CARDS, ®);
890 dev_info(emu->card->dev, "emu1010: Card options = 0x%x\n", reg);
892 schedule_work(&emu->emu1010.firmware_work);
893 if (emu->card_capabilities->no_adat) {
894 emu->emu1010.optical_in = 0; /* IN_SPDIF */
895 emu->emu1010.optical_out = 0; /* OUT_SPDIF */
898 emu->emu1010.optical_in = 1; /* IN_ADAT */
899 emu->emu1010.optical_out = 1; /* OUT_ADAT */
901 tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : EMU_HANA_OPTICAL_IN_SPDIF) |
902 (emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : EMU_HANA_OPTICAL_OUT_SPDIF);
903 snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp);
905 emu->emu1010.adc_pads = 0x00;
906 snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, emu->emu1010.adc_pads);
908 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, EMU_HANA_DOCK_PHONES_192_DAC4);
910 emu->emu1010.dac_pads = EMU_HANA_DOCK_DAC_PAD1 | EMU_HANA_DOCK_DAC_PAD2 |
912 snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, emu->emu1010.dac_pads);
914 snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, EMU_HANA_SPDIF_MODE_RX_INVALID);
916 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, EMU_HANA_MIDI_INA_FROM_HAMOA | EMU_HANA_MIDI_INB_FROM_DOCK2);
917 snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, EMU_HANA_MIDI_OUT_DOCK2 | EMU_HANA_MIDI_OUT_SYNC2);
919 emu->gpio_interrupt = emu1010_interrupt;
921 snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE,
923 snd_emu1010_fpga_read(emu, EMU_HANA_IRQ_STATUS, ®); // Clear pending IRQs
925 emu->emu1010.clock_source = 1; /* 48000 */
926 emu->emu1010.clock_fallback = 1; /* 48000 */
928 snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K);
930 emu->emu1010.wclock = EMU_HANA_WCLOCK_INT_48K;
931 snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K);
932 /* snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X); */
933 snd_emu1010_update_clock(emu);
937 snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
946 static int alloc_pm_buffer(struct snd_emu10k1 *emu);
947 static void free_pm_buffer(struct snd_emu10k1 *emu);
952 struct snd_emu10k1 *emu = card->private_data;
954 if (emu->port) { /* avoid access to already used hardware */
955 snd_emu10k1_fx8010_tram_setup(emu, 0);
956 snd_emu10k1_done(emu);
957 snd_emu10k1_free_efx(emu);
959 if (emu->card_capabilities->emu_model == EMU_MODEL_EMU1010) {
961 snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_PWR, 0);
963 cancel_work_sync(&emu->emu1010.firmware_work);
964 cancel_work_sync(&emu->emu1010.clock_work);
965 release_firmware(emu->firmware);
966 release_firmware(emu->dock_fw);
967 snd_util_memhdr_free(emu->memhdr);
968 if (emu->silent_page.area)
969 snd_dma_free_pages(&emu->silent_page);
970 if (emu->ptb_pages.area)
971 snd_dma_free_pages(&emu->ptb_pages);
972 vfree(emu->page_ptr_table);
973 vfree(emu->page_addr_table);
975 free_pm_buffer(emu);
1491 static void snd_emu10k1_detect_iommu(struct snd_emu10k1 *emu)
1495 emu->iommu_workaround = false;
1497 domain = iommu_get_domain_for_dev(emu->card->dev);
1501 dev_notice(emu->card->dev,
1503 emu->iommu_workaround = true;
1514 struct snd_emu10k1 *emu = card->private_data;
1528 emu->card = card;
1529 spin_lock_init(&emu->reg_lock);
1530 spin_lock_init(&emu->emu_lock);
1531 spin_lock_init(&emu->spi_lock);
1532 spin_lock_init(&emu->i2c_lock);
1533 spin_lock_init(&emu->voice_lock);
1534 spin_lock_init(&emu->synth_lock);
1535 spin_lock_init(&emu->memblk_lock);
1536 mutex_init(&emu->fx8010.lock);
1537 INIT_LIST_HEAD(&emu->mapped_link_head);
1538 INIT_LIST_HEAD(&emu->mapped_order_link_head);
1539 emu->pci = pci;
1540 emu->irq = -1;
1541 emu->synth = NULL;
1542 emu->get_synth_voice = NULL;
1543 INIT_WORK(&emu->emu1010.firmware_work, emu1010_firmware_work);
1544 INIT_WORK(&emu->emu1010.clock_work, emu1010_clock_work);
1546 emu->revision = pci->revision;
1547 pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &emu->serial);
1548 pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &emu->model);
1551 pci->vendor, pci->device, emu->serial, emu->model);
1561 if (c->subsystem && (c->subsystem != emu->serial))
1563 if (c->revision && c->revision != emu->revision)
1573 emu->card_capabilities = c;
1580 pci->vendor, pci->device, emu->serial, c->subsystem);
1585 emu->serial);
1590 is_audigy = emu->audigy = c->emu10k2_chip;
1592 snd_emu10k1_detect_iommu(emu);
1595 emu->address_mode = is_audigy ? 0 : 1;
1597 emu->dma_mask = emu->address_mode ? EMU10K1_DMA_MASK : AUDIGY_DMA_MASK;
1598 if (dma_set_mask_and_coherent(&pci->dev, emu->dma_mask) < 0) {
1601 emu->dma_mask);
1605 emu->gpr_base = A_FXGPREGBASE;
1607 emu->gpr_base = FXGPREGBASE;
1612 emu->port = pci_resource_start(pci, 0);
1614 emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
1616 page_table_size = sizeof(u32) * (emu->address_mode ? MAXPAGES1 :
1618 if (snd_emu10k1_alloc_pages_maybe_wider(emu, page_table_size,
1619 &emu->ptb_pages) < 0)
1622 (unsigned long)emu->ptb_pages.addr,
1623 (unsigned long)(emu->ptb_pages.addr + emu->ptb_pages.bytes));
1625 emu->page_ptr_table = vmalloc(array_size(sizeof(void *),
1626 emu->max_cache_pages));
1627 emu->page_addr_table = vmalloc(array_size(sizeof(unsigned long),
1628 emu->max_cache_pages));
1629 if (!emu->page_ptr_table || !emu->page_addr_table)
1632 if (snd_emu10k1_alloc_pages_maybe_wider(emu, EMUPAGESIZE,
1633 &emu->silent_page) < 0)
1636 (unsigned long)emu->silent_page.addr,
1637 (unsigned long)(emu->silent_page.addr +
1638 emu->silent_page.bytes));
1640 emu->memhdr = snd_util_memhdr_new(emu->max_cache_pages * PAGE_SIZE);
1641 if (!emu->memhdr)
1643 emu->memhdr->block_extra_size = sizeof(struct snd_emu10k1_memblk) -
1654 emu->fx8010.extin_mask = extin_mask;
1655 emu->fx8010.extout_mask = extout_mask;
1656 emu->enable_ir = enable_ir;
1658 if (emu->card_capabilities->ca_cardbus_chip) {
1659 err = snd_emu10k1_cardbus_init(emu);
1663 if (emu->card_capabilities->ecard) {
1664 err = snd_emu10k1_ecard_init(emu);
1667 } else if (emu->card_capabilities->emu_model) {
1668 err = snd_emu10k1_emu1010_init(emu);
1674 snd_emu10k1_ptr_write(emu, AC97SLOT, 0,
1679 emu->fx8010.itram_size = (16 * 1024)/2;
1680 emu->fx8010.etram_pages.area = NULL;
1681 emu->fx8010.etram_pages.bytes = 0;
1685 IRQF_SHARED, KBUILD_MODNAME, emu))
1687 emu->irq = pci->irq;
1688 card->sync_irq = emu->irq;
1704 emu->spdif_bits[0] = emu->spdif_bits[1] =
1705 emu->spdif_bits[2] = SPCS_CLKACCY_1000PPM | SPCS_SAMPLERATE_48 |
1711 memset(emu->silent_page.area, 0, emu->silent_page.bytes);
1712 silent_page = emu->silent_page.addr << emu->address_mode;
1713 pgtbl = (__le32 *)emu->ptb_pages.area;
1714 for (idx = 0; idx < (emu->address_mode ? MAXPAGES1 : MAXPAGES0); idx++)
1719 emu->voices[idx].number = idx;
1721 err = snd_emu10k1_init(emu, enable_ir);
1725 err = alloc_pm_buffer(emu);
1731 err = snd_emu10k1_init_efx(emu);
1734 snd_emu10k1_audio_enable(emu);
1737 snd_emu10k1_proc_init(emu);
1758 static int alloc_pm_buffer(struct snd_emu10k1 *emu)
1763 if (emu->audigy)
1765 emu->saved_ptr = vmalloc(array3_size(4, NUM_G, size));
1766 if (!emu->saved_ptr)
1768 if (snd_emu10k1_efx_alloc_pm_buffer(emu) < 0)
1770 if (emu->card_capabilities->ca0151_chip &&
1771 snd_p16v_alloc_pm_buffer(emu) < 0)
1776 static void free_pm_buffer(struct snd_emu10k1 *emu)
1778 vfree(emu->saved_ptr);
1779 snd_emu10k1_efx_free_pm_buffer(emu);
1780 if (emu->card_capabilities->ca0151_chip)
1781 snd_p16v_free_pm_buffer(emu);
1784 void snd_emu10k1_suspend_regs(struct snd_emu10k1 *emu)
1790 val = emu->saved_ptr;
1793 *val = snd_emu10k1_ptr_read(emu, *reg, i);
1794 if (emu->audigy) {
1797 *val = snd_emu10k1_ptr_read(emu, *reg, i);
1799 if (emu->audigy)
1800 emu->saved_a_iocfg = inw(emu->port + A_IOCFG);
1801 emu->saved_hcfg = inl(emu->port + HCFG);
1804 void snd_emu10k1_resume_init(struct snd_emu10k1 *emu)
1806 if (emu->card_capabilities->ca_cardbus_chip)
1807 snd_emu10k1_cardbus_init(emu);
1808 if (emu->card_capabilities->ecard)
1809 snd_emu10k1_ecard_init(emu);
1810 else if (emu->card_capabilities->emu_model)
1811 snd_emu10k1_emu1010_init(emu);
1813 snd_emu10k1_ptr_write(emu, AC97SLOT, 0, AC97SLOT_CNTR|AC97SLOT_LFE);
1814 snd_emu10k1_init(emu, emu->enable_ir);
1817 void snd_emu10k1_resume_regs(struct snd_emu10k1 *emu)
1823 snd_emu10k1_audio_enable(emu);
1826 if (emu->audigy)
1827 outw(emu->saved_a_iocfg, emu->port + A_IOCFG);
1828 outl(emu->saved_hcfg, emu->port + HCFG);
1830 val = emu->saved_ptr;
1833 snd_emu10k1_ptr_write(emu, *reg, i, *val);
1834 if (emu->audigy) {
1837 snd_emu10k1_ptr_write(emu, *reg, i, *val);