Lines Matching refs:emu
349 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1_gpr_ctl_get() local
355 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_get()
358 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_get()
364 struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol); in snd_emu10k1_gpr_ctl_put() local
372 spin_lock_irqsave(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_put()
384 snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, val); in snd_emu10k1_gpr_ctl_put()
387 snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, db_table[val]); in snd_emu10k1_gpr_ctl_put()
395 … snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[j * ctl->vcount + i], 0, bass_table[val][j]); in snd_emu10k1_gpr_ctl_put()
403 …snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[j * ctl->vcount + i], 0, treble_table[val][j]); in snd_emu10k1_gpr_ctl_put()
406 snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, onoff_table[val]); in snd_emu10k1_gpr_ctl_put()
411 spin_unlock_irqrestore(&emu->reg_lock, flags); in snd_emu10k1_gpr_ctl_put()
419 static void snd_emu10k1_fx8010_interrupt(struct snd_emu10k1 *emu) in snd_emu10k1_fx8010_interrupt() argument
423 irq = emu->fx8010.irq_handlers; in snd_emu10k1_fx8010_interrupt()
426 if (snd_emu10k1_ptr_read(emu, emu->gpr_base + irq->gpr_running, 0) & 0xffff0000) { in snd_emu10k1_fx8010_interrupt()
428 irq->handler(emu, irq->private_data); in snd_emu10k1_fx8010_interrupt()
429 snd_emu10k1_ptr_write(emu, emu->gpr_base + irq->gpr_running, 0, 1); in snd_emu10k1_fx8010_interrupt()
435 int snd_emu10k1_fx8010_register_irq_handler(struct snd_emu10k1 *emu, in snd_emu10k1_fx8010_register_irq_handler() argument
451 spin_lock_irqsave(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_register_irq_handler()
452 if (emu->fx8010.irq_handlers == NULL) { in snd_emu10k1_fx8010_register_irq_handler()
453 emu->fx8010.irq_handlers = irq; in snd_emu10k1_fx8010_register_irq_handler()
454 emu->dsp_interrupt = snd_emu10k1_fx8010_interrupt; in snd_emu10k1_fx8010_register_irq_handler()
455 snd_emu10k1_intr_enable(emu, INTE_FXDSPENABLE); in snd_emu10k1_fx8010_register_irq_handler()
457 irq->next = emu->fx8010.irq_handlers; in snd_emu10k1_fx8010_register_irq_handler()
458 emu->fx8010.irq_handlers = irq; in snd_emu10k1_fx8010_register_irq_handler()
460 spin_unlock_irqrestore(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_register_irq_handler()
466 int snd_emu10k1_fx8010_unregister_irq_handler(struct snd_emu10k1 *emu, in snd_emu10k1_fx8010_unregister_irq_handler() argument
472 spin_lock_irqsave(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_unregister_irq_handler()
473 if ((tmp = emu->fx8010.irq_handlers) == irq) { in snd_emu10k1_fx8010_unregister_irq_handler()
474 emu->fx8010.irq_handlers = tmp->next; in snd_emu10k1_fx8010_unregister_irq_handler()
475 if (emu->fx8010.irq_handlers == NULL) { in snd_emu10k1_fx8010_unregister_irq_handler()
476 snd_emu10k1_intr_disable(emu, INTE_FXDSPENABLE); in snd_emu10k1_fx8010_unregister_irq_handler()
477 emu->dsp_interrupt = NULL; in snd_emu10k1_fx8010_unregister_irq_handler()
485 spin_unlock_irqrestore(&emu->fx8010.irq_lock, flags); in snd_emu10k1_fx8010_unregister_irq_handler()
528 static void snd_emu10k1_efx_write(struct snd_emu10k1 *emu, unsigned int pc, unsigned int data) in snd_emu10k1_efx_write() argument
530 pc += emu->audigy ? A_MICROCODEBASE : MICROCODEBASE; in snd_emu10k1_efx_write()
531 snd_emu10k1_ptr_write(emu, pc, 0, data); in snd_emu10k1_efx_write()
534 unsigned int snd_emu10k1_efx_read(struct snd_emu10k1 *emu, unsigned int pc) in snd_emu10k1_efx_read() argument
536 pc += emu->audigy ? A_MICROCODEBASE : MICROCODEBASE; in snd_emu10k1_efx_read()
537 return snd_emu10k1_ptr_read(emu, pc, 0); in snd_emu10k1_efx_read()
540 static int snd_emu10k1_gpr_poke(struct snd_emu10k1 *emu, in snd_emu10k1_gpr_poke() argument
546 for (gpr = 0; gpr < (emu->audigy ? 0x200 : 0x100); gpr++) { in snd_emu10k1_gpr_poke()
551 snd_emu10k1_ptr_write(emu, emu->gpr_base + gpr, 0, val); in snd_emu10k1_gpr_poke()
556 static int snd_emu10k1_gpr_peek(struct snd_emu10k1 *emu, in snd_emu10k1_gpr_peek() argument
562 for (gpr = 0; gpr < (emu->audigy ? 0x200 : 0x100); gpr++) { in snd_emu10k1_gpr_peek()
564 val = snd_emu10k1_ptr_read(emu, emu->gpr_base + gpr, 0); in snd_emu10k1_gpr_peek()
571 static int snd_emu10k1_tram_poke(struct snd_emu10k1 *emu, in snd_emu10k1_tram_poke() argument
577 for (tram = 0; tram < (emu->audigy ? 0x100 : 0xa0); tram++) { in snd_emu10k1_tram_poke()
583 snd_emu10k1_ptr_write(emu, TANKMEMDATAREGBASE + tram, 0, val); in snd_emu10k1_tram_poke()
584 if (!emu->audigy) { in snd_emu10k1_tram_poke()
585 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + tram, 0, addr); in snd_emu10k1_tram_poke()
587 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + tram, 0, addr << 12); in snd_emu10k1_tram_poke()
588 snd_emu10k1_ptr_write(emu, A_TANKMEMCTLREGBASE + tram, 0, addr >> 20); in snd_emu10k1_tram_poke()
594 static int snd_emu10k1_tram_peek(struct snd_emu10k1 *emu, in snd_emu10k1_tram_peek() argument
601 for (tram = 0; tram < (emu->audigy ? 0x100 : 0xa0); tram++) { in snd_emu10k1_tram_peek()
603 val = snd_emu10k1_ptr_read(emu, TANKMEMDATAREGBASE + tram, 0); in snd_emu10k1_tram_peek()
604 if (!emu->audigy) { in snd_emu10k1_tram_peek()
605 addr = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + tram, 0); in snd_emu10k1_tram_peek()
607 addr = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + tram, 0) >> 12; in snd_emu10k1_tram_peek()
608 addr |= snd_emu10k1_ptr_read(emu, A_TANKMEMCTLREGBASE + tram, 0) << 20; in snd_emu10k1_tram_peek()
617 static int snd_emu10k1_code_poke(struct snd_emu10k1 *emu, in snd_emu10k1_code_poke() argument
622 for (pc = 0; pc < (emu->audigy ? 2*1024 : 2*512); pc += 2) { in snd_emu10k1_code_poke()
628 snd_emu10k1_efx_write(emu, pc + 0, lo); in snd_emu10k1_code_poke()
629 snd_emu10k1_efx_write(emu, pc + 1, hi); in snd_emu10k1_code_poke()
634 static int snd_emu10k1_code_peek(struct snd_emu10k1 *emu, in snd_emu10k1_code_peek() argument
640 for (pc = 0; pc < (emu->audigy ? 2*1024 : 2*512); pc += 2) { in snd_emu10k1_code_peek()
642 if (put_user(snd_emu10k1_efx_read(emu, pc + 0), &icode->code[pc + 0])) in snd_emu10k1_code_peek()
644 if (put_user(snd_emu10k1_efx_read(emu, pc + 1), &icode->code[pc + 1])) in snd_emu10k1_code_peek()
651 snd_emu10k1_look_for_ctl(struct snd_emu10k1 *emu, struct snd_ctl_elem_id *id) in snd_emu10k1_look_for_ctl() argument
656 list_for_each_entry(ctl, &emu->fx8010.gpr_ctl, list) { in snd_emu10k1_look_for_ctl()
690 static int copy_gctl(struct snd_emu10k1 *emu, in copy_gctl() argument
697 if (emu->support_tlv) in copy_gctl()
706 static int copy_gctl_to_user(struct snd_emu10k1 *emu, in copy_gctl_to_user() argument
713 if (emu->support_tlv) in copy_gctl_to_user()
720 static int snd_emu10k1_verify_controls(struct snd_emu10k1 *emu, in snd_emu10k1_verify_controls() argument
733 if (snd_emu10k1_look_for_ctl(emu, &id) == NULL) in snd_emu10k1_verify_controls()
741 if (copy_gctl(emu, gctl, icode->gpr_add_controls, i)) { in snd_emu10k1_verify_controls()
745 if (snd_emu10k1_look_for_ctl(emu, &gctl->id)) in snd_emu10k1_verify_controls()
747 down_read(&emu->card->controls_rwsem); in snd_emu10k1_verify_controls()
748 if (snd_ctl_find_id(emu->card, &gctl->id) != NULL) { in snd_emu10k1_verify_controls()
749 up_read(&emu->card->controls_rwsem); in snd_emu10k1_verify_controls()
753 up_read(&emu->card->controls_rwsem); in snd_emu10k1_verify_controls()
762 if (copy_gctl(emu, gctl, icode->gpr_list_controls, i)) { in snd_emu10k1_verify_controls()
783 static int snd_emu10k1_add_controls(struct snd_emu10k1 *emu, in snd_emu10k1_add_controls() argument
803 if (copy_gctl(emu, gctl, icode->gpr_add_controls, i)) { in snd_emu10k1_add_controls()
816 ctl = snd_emu10k1_look_for_ctl(emu, &gctl->id); in snd_emu10k1_add_controls()
850 if ((err = snd_ctl_add(emu->card, kctl = snd_ctl_new1(&knew, emu))) < 0) { in snd_emu10k1_add_controls()
857 list_add_tail(&ctl->list, &emu->fx8010.gpr_ctl); in snd_emu10k1_add_controls()
863 snd_ctl_notify(emu->card, SNDRV_CTL_EVENT_MASK_VALUE | in snd_emu10k1_add_controls()
875 static int snd_emu10k1_del_controls(struct snd_emu10k1 *emu, in snd_emu10k1_del_controls() argument
882 struct snd_card *card = emu->card; in snd_emu10k1_del_controls()
889 ctl = snd_emu10k1_look_for_ctl(emu, &id); in snd_emu10k1_del_controls()
897 static int snd_emu10k1_list_controls(struct snd_emu10k1 *emu, in snd_emu10k1_list_controls() argument
910 list_for_each_entry(ctl, &emu->fx8010.gpr_ctl, list) { in snd_emu10k1_list_controls()
930 if (copy_gctl_to_user(emu, icode->gpr_list_controls, in snd_emu10k1_list_controls()
943 static int snd_emu10k1_icode_poke(struct snd_emu10k1 *emu, in snd_emu10k1_icode_poke() argument
948 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_icode_poke()
949 if ((err = snd_emu10k1_verify_controls(emu, icode)) < 0) in snd_emu10k1_icode_poke()
951 strlcpy(emu->fx8010.name, icode->name, sizeof(emu->fx8010.name)); in snd_emu10k1_icode_poke()
954 if (emu->audigy) in snd_emu10k1_icode_poke()
955 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_SINGLE_STEP); in snd_emu10k1_icode_poke()
957 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_icode_poke()
959 if ((err = snd_emu10k1_del_controls(emu, icode)) < 0 || in snd_emu10k1_icode_poke()
960 (err = snd_emu10k1_gpr_poke(emu, icode)) < 0 || in snd_emu10k1_icode_poke()
961 (err = snd_emu10k1_tram_poke(emu, icode)) < 0 || in snd_emu10k1_icode_poke()
962 (err = snd_emu10k1_code_poke(emu, icode)) < 0 || in snd_emu10k1_icode_poke()
963 (err = snd_emu10k1_add_controls(emu, icode)) < 0) in snd_emu10k1_icode_poke()
966 if (emu->audigy) in snd_emu10k1_icode_poke()
967 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg); in snd_emu10k1_icode_poke()
969 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg); in snd_emu10k1_icode_poke()
971 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_icode_poke()
975 static int snd_emu10k1_icode_peek(struct snd_emu10k1 *emu, in snd_emu10k1_icode_peek() argument
980 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_icode_peek()
981 strlcpy(icode->name, emu->fx8010.name, sizeof(icode->name)); in snd_emu10k1_icode_peek()
983 err = snd_emu10k1_gpr_peek(emu, icode); in snd_emu10k1_icode_peek()
985 err = snd_emu10k1_tram_peek(emu, icode); in snd_emu10k1_icode_peek()
987 err = snd_emu10k1_code_peek(emu, icode); in snd_emu10k1_icode_peek()
989 err = snd_emu10k1_list_controls(emu, icode); in snd_emu10k1_icode_peek()
990 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_icode_peek()
994 static int snd_emu10k1_ipcm_poke(struct snd_emu10k1 *emu, in snd_emu10k1_ipcm_poke() argument
1005 pcm = &emu->fx8010.pcm[ipcm->substream]; in snd_emu10k1_ipcm_poke()
1006 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_ipcm_poke()
1007 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_poke()
1035 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_poke()
1036 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_ipcm_poke()
1040 static int snd_emu10k1_ipcm_peek(struct snd_emu10k1 *emu, in snd_emu10k1_ipcm_peek() argument
1049 pcm = &emu->fx8010.pcm[ipcm->substream]; in snd_emu10k1_ipcm_peek()
1050 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_ipcm_peek()
1051 spin_lock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_peek()
1065 spin_unlock_irq(&emu->reg_lock); in snd_emu10k1_ipcm_peek()
1066 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_ipcm_peek()
1170 static int _snd_emu10k1_audigy_init_efx(struct snd_emu10k1 *emu) in _snd_emu10k1_audigy_init_efx() argument
1222 snd_emu10k1_ptr_write(emu, A_DBG, 0, (emu->fx8010.dbg = 0) | A_DBG_SINGLE_STEP); in _snd_emu10k1_audigy_init_efx()
1242 if (emu->card_capabilities->spk71) { in _snd_emu10k1_audigy_init_efx()
1293 if (emu->card_capabilities->emu_model) { in _snd_emu10k1_audigy_init_efx()
1294 if (emu->card_capabilities->ca0108_chip) { in _snd_emu10k1_audigy_init_efx()
1325 emu->card_capabilities->ac97_chip ? "Audigy CD Playback Volume" : "CD Playback Volume", in _snd_emu10k1_audigy_init_efx()
1332 emu->card_capabilities->ac97_chip ? "Audigy CD Capture Volume" : "CD Capture Volume", in _snd_emu10k1_audigy_init_efx()
1351 emu->card_capabilities->ac97_chip ? "Line2 Playback Volume" : "Line Playback Volume", in _snd_emu10k1_audigy_init_efx()
1358 emu->card_capabilities->ac97_chip ? "Line2 Capture Volume" : "Line Capture Volume", in _snd_emu10k1_audigy_init_efx()
1377 emu->card_capabilities->ac97_chip ? "Aux2 Playback Volume" : "Aux Playback Volume", in _snd_emu10k1_audigy_init_efx()
1384 emu->card_capabilities->ac97_chip ? "Aux2 Capture Volume" : "Aux Capture Volume", in _snd_emu10k1_audigy_init_efx()
1412 if (emu->card_capabilities->spk71) { in _snd_emu10k1_audigy_init_efx()
1446 if (emu->card_capabilities->spk71) { in _snd_emu10k1_audigy_init_efx()
1539 if (emu->card_capabilities->spk71) in _snd_emu10k1_audigy_init_efx()
1547 if (emu->card_capabilities->emu_model) { in _snd_emu10k1_audigy_init_efx()
1549 dev_info(emu->card->dev, "EMU outputs on\n"); in _snd_emu10k1_audigy_init_efx()
1551 if (emu->card_capabilities->ca0108_chip) { in _snd_emu10k1_audigy_init_efx()
1571 if ((z==1) && (emu->card_capabilities->spdif_bug)) { in _snd_emu10k1_audigy_init_efx()
1573 dev_info(emu->card->dev, in _snd_emu10k1_audigy_init_efx()
1575 emu->card_capabilities->name); in _snd_emu10k1_audigy_init_efx()
1597 if (emu->card_capabilities->emu_model) { in _snd_emu10k1_audigy_init_efx()
1598 if (emu->card_capabilities->ca0108_chip) { in _snd_emu10k1_audigy_init_efx()
1599 dev_info(emu->card->dev, "EMU2 inputs on\n"); in _snd_emu10k1_audigy_init_efx()
1607 dev_info(emu->card->dev, "EMU inputs on\n"); in _snd_emu10k1_audigy_init_efx()
1745 emu->support_tlv = 1; /* support TLV */ in _snd_emu10k1_audigy_init_efx()
1746 err = snd_emu10k1_icode_poke(emu, icode); in _snd_emu10k1_audigy_init_efx()
1747 emu->support_tlv = 0; /* clear again */ in _snd_emu10k1_audigy_init_efx()
1812 static int _snd_emu10k1_init_efx(struct snd_emu10k1 *emu) in _snd_emu10k1_init_efx() argument
1867 snd_emu10k1_ptr_write(emu, DBG, 0, (emu->fx8010.dbg = 0) | EMU10K1_DBG_SINGLE_STEP); in _snd_emu10k1_init_efx()
2049 if (emu->fx8010.extin_mask & ((1<<EXTIN_AC97_L)|(1<<EXTIN_AC97_R))) { in _snd_emu10k1_init_efx()
2060 if (emu->fx8010.extin_mask & ((1<<EXTIN_SPDIF_CD_L)|(1<<EXTIN_SPDIF_CD_R))) { in _snd_emu10k1_init_efx()
2077 if (emu->fx8010.extin_mask & ((1<<EXTIN_ZOOM_L)|(1<<EXTIN_ZOOM_R))) { in _snd_emu10k1_init_efx()
2094 if (emu->fx8010.extin_mask & ((1<<EXTIN_TOSLINK_L)|(1<<EXTIN_TOSLINK_R))) { in _snd_emu10k1_init_efx()
2111 if (emu->fx8010.extin_mask & ((1<<EXTIN_LINE1_L)|(1<<EXTIN_LINE1_R))) { in _snd_emu10k1_init_efx()
2128 if (emu->fx8010.extin_mask & ((1<<EXTIN_COAX_SPDIF_L)|(1<<EXTIN_COAX_SPDIF_R))) { in _snd_emu10k1_init_efx()
2145 if (emu->fx8010.extin_mask & ((1<<EXTIN_LINE2_L)|(1<<EXTIN_LINE2_R))) { in _snd_emu10k1_init_efx()
2250 if (emu->fx8010.extout_mask & ((1<<EXTOUT_AC97_L)|(1<<EXTOUT_AC97_R))) { in _snd_emu10k1_init_efx()
2257 if (emu->fx8010.extout_mask & ((1<<EXTOUT_TOSLINK_L)|(1<<EXTOUT_TOSLINK_R))) { in _snd_emu10k1_init_efx()
2274 if (emu->fx8010.extout_mask & ((1<<EXTOUT_HEADPHONE_L)|(1<<EXTOUT_HEADPHONE_R))) { in _snd_emu10k1_init_efx()
2295 if (emu->fx8010.extout_mask & ((1<<EXTOUT_REAR_L)|(1<<EXTOUT_REAR_R))) in _snd_emu10k1_init_efx()
2299 if (emu->fx8010.extout_mask & ((1<<EXTOUT_AC97_REAR_L)|(1<<EXTOUT_AC97_REAR_R))) in _snd_emu10k1_init_efx()
2303 if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_CENTER)) { in _snd_emu10k1_init_efx()
2313 if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_LFE)) { in _snd_emu10k1_init_efx()
2328 if (emu->fx8010.extout_mask & (1<<EXTOUT_MIC_CAP)) in _snd_emu10k1_init_efx()
2332 if (emu->card_capabilities->sblive51) { in _snd_emu10k1_init_efx()
2369 if ((err = snd_emu10k1_fx8010_tram_setup(emu, ipcm->buffer_size)) < 0) in _snd_emu10k1_init_efx()
2374 emu->support_tlv = 1; /* support TLV */ in _snd_emu10k1_init_efx()
2375 err = snd_emu10k1_icode_poke(emu, icode); in _snd_emu10k1_init_efx()
2376 emu->support_tlv = 0; /* clear again */ in _snd_emu10k1_init_efx()
2379 err = snd_emu10k1_ipcm_poke(emu, ipcm); in _snd_emu10k1_init_efx()
2391 int snd_emu10k1_init_efx(struct snd_emu10k1 *emu) in snd_emu10k1_init_efx() argument
2393 spin_lock_init(&emu->fx8010.irq_lock); in snd_emu10k1_init_efx()
2394 INIT_LIST_HEAD(&emu->fx8010.gpr_ctl); in snd_emu10k1_init_efx()
2395 if (emu->audigy) in snd_emu10k1_init_efx()
2396 return _snd_emu10k1_audigy_init_efx(emu); in snd_emu10k1_init_efx()
2398 return _snd_emu10k1_init_efx(emu); in snd_emu10k1_init_efx()
2401 void snd_emu10k1_free_efx(struct snd_emu10k1 *emu) in snd_emu10k1_free_efx() argument
2404 if (emu->audigy) in snd_emu10k1_free_efx()
2405 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg = A_DBG_SINGLE_STEP); in snd_emu10k1_free_efx()
2407 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg = EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_free_efx()
2411 int snd_emu10k1_fx8010_tone_control_activate(struct snd_emu10k1 *emu, int output)
2415 snd_emu10k1_ptr_write(emu, emu->gpr_base + 0x94 + output, 0, 1);
2419 int snd_emu10k1_fx8010_tone_control_deactivate(struct snd_emu10k1 *emu, int output)
2423 snd_emu10k1_ptr_write(emu, emu->gpr_base + 0x94 + output, 0, 0);
2428 int snd_emu10k1_fx8010_tram_setup(struct snd_emu10k1 *emu, u32 size) in snd_emu10k1_fx8010_tram_setup() argument
2442 if ((emu->fx8010.etram_pages.bytes / 2) == size) in snd_emu10k1_fx8010_tram_setup()
2444 spin_lock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2445 outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG); in snd_emu10k1_fx8010_tram_setup()
2446 spin_unlock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2447 snd_emu10k1_ptr_write(emu, TCB, 0, 0); in snd_emu10k1_fx8010_tram_setup()
2448 snd_emu10k1_ptr_write(emu, TCBS, 0, 0); in snd_emu10k1_fx8010_tram_setup()
2449 if (emu->fx8010.etram_pages.area != NULL) { in snd_emu10k1_fx8010_tram_setup()
2450 snd_dma_free_pages(&emu->fx8010.etram_pages); in snd_emu10k1_fx8010_tram_setup()
2451 emu->fx8010.etram_pages.area = NULL; in snd_emu10k1_fx8010_tram_setup()
2452 emu->fx8010.etram_pages.bytes = 0; in snd_emu10k1_fx8010_tram_setup()
2456 if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), in snd_emu10k1_fx8010_tram_setup()
2457 size * 2, &emu->fx8010.etram_pages) < 0) in snd_emu10k1_fx8010_tram_setup()
2459 memset(emu->fx8010.etram_pages.area, 0, size * 2); in snd_emu10k1_fx8010_tram_setup()
2460 snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr); in snd_emu10k1_fx8010_tram_setup()
2461 snd_emu10k1_ptr_write(emu, TCBS, 0, size_reg); in snd_emu10k1_fx8010_tram_setup()
2462 spin_lock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2463 outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG); in snd_emu10k1_fx8010_tram_setup()
2464 spin_unlock_irq(&emu->emu_lock); in snd_emu10k1_fx8010_tram_setup()
2483 static void snd_emu10k1_fx8010_info(struct snd_emu10k1 *emu, in snd_emu10k1_fx8010_info() argument
2490 info->internal_tram_size = emu->fx8010.itram_size; in snd_emu10k1_fx8010_info()
2491 info->external_tram_size = emu->fx8010.etram_pages.bytes / 2; in snd_emu10k1_fx8010_info()
2493 extin = emu->audigy ? audigy_ins : creative_ins; in snd_emu10k1_fx8010_info()
2494 extout = emu->audigy ? audigy_outs : creative_outs; in snd_emu10k1_fx8010_info()
2495 fxbus_mask = emu->fx8010.fxbus_mask; in snd_emu10k1_fx8010_info()
2496 extin_mask = emu->fx8010.extin_mask; in snd_emu10k1_fx8010_info()
2497 extout_mask = emu->fx8010.extout_mask; in snd_emu10k1_fx8010_info()
2505 info->gpr_controls = emu->fx8010.gpr_count; in snd_emu10k1_fx8010_info()
2510 struct snd_emu10k1 *emu = hw->private_data; in snd_emu10k1_fx8010_ioctl() local
2520 emu->support_tlv = 1; in snd_emu10k1_fx8010_ioctl()
2526 snd_emu10k1_fx8010_info(emu, info); in snd_emu10k1_fx8010_ioctl()
2540 res = snd_emu10k1_icode_poke(emu, icode); in snd_emu10k1_fx8010_ioctl()
2547 res = snd_emu10k1_icode_peek(emu, icode); in snd_emu10k1_fx8010_ioctl()
2558 res = snd_emu10k1_ipcm_poke(emu, ipcm); in snd_emu10k1_fx8010_ioctl()
2565 res = snd_emu10k1_ipcm_peek(emu, ipcm); in snd_emu10k1_fx8010_ioctl()
2577 mutex_lock(&emu->fx8010.lock); in snd_emu10k1_fx8010_ioctl()
2578 res = snd_emu10k1_fx8010_tram_setup(emu, addr); in snd_emu10k1_fx8010_ioctl()
2579 mutex_unlock(&emu->fx8010.lock); in snd_emu10k1_fx8010_ioctl()
2584 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2585 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP); in snd_emu10k1_fx8010_ioctl()
2587 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_fx8010_ioctl()
2592 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2593 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg = 0); in snd_emu10k1_fx8010_ioctl()
2595 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg = 0); in snd_emu10k1_fx8010_ioctl()
2600 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2601 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_ZC); in snd_emu10k1_fx8010_ioctl()
2603 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_ZC); in snd_emu10k1_fx8010_ioctl()
2605 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2606 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg); in snd_emu10k1_fx8010_ioctl()
2608 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg); in snd_emu10k1_fx8010_ioctl()
2617 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2618 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | addr); in snd_emu10k1_fx8010_ioctl()
2620 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | addr); in snd_emu10k1_fx8010_ioctl()
2622 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2623 …snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | A_DBG_STEP_ADDR | addr… in snd_emu10k1_fx8010_ioctl()
2625 …snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | EMU10K1_DBG_STEP |… in snd_emu10k1_fx8010_ioctl()
2628 if (emu->audigy) in snd_emu10k1_fx8010_ioctl()
2629 addr = snd_emu10k1_ptr_read(emu, A_DBG, 0); in snd_emu10k1_fx8010_ioctl()
2631 addr = snd_emu10k1_ptr_read(emu, DBG, 0); in snd_emu10k1_fx8010_ioctl()
2644 int snd_emu10k1_fx8010_new(struct snd_emu10k1 *emu, int device) in snd_emu10k1_fx8010_new() argument
2649 if ((err = snd_hwdep_new(emu->card, "FX8010", device, &hw)) < 0) in snd_emu10k1_fx8010_new()
2656 hw->private_data = emu; in snd_emu10k1_fx8010_new()
2661 int snd_emu10k1_efx_alloc_pm_buffer(struct snd_emu10k1 *emu) in snd_emu10k1_efx_alloc_pm_buffer() argument
2665 len = emu->audigy ? 0x200 : 0x100; in snd_emu10k1_efx_alloc_pm_buffer()
2666 emu->saved_gpr = kmalloc(len * 4, GFP_KERNEL); in snd_emu10k1_efx_alloc_pm_buffer()
2667 if (! emu->saved_gpr) in snd_emu10k1_efx_alloc_pm_buffer()
2669 len = emu->audigy ? 0x100 : 0xa0; in snd_emu10k1_efx_alloc_pm_buffer()
2670 emu->tram_val_saved = kmalloc(len * 4, GFP_KERNEL); in snd_emu10k1_efx_alloc_pm_buffer()
2671 emu->tram_addr_saved = kmalloc(len * 4, GFP_KERNEL); in snd_emu10k1_efx_alloc_pm_buffer()
2672 if (! emu->tram_val_saved || ! emu->tram_addr_saved) in snd_emu10k1_efx_alloc_pm_buffer()
2674 len = emu->audigy ? 2 * 1024 : 2 * 512; in snd_emu10k1_efx_alloc_pm_buffer()
2675 emu->saved_icode = vmalloc(len * 4); in snd_emu10k1_efx_alloc_pm_buffer()
2676 if (! emu->saved_icode) in snd_emu10k1_efx_alloc_pm_buffer()
2681 void snd_emu10k1_efx_free_pm_buffer(struct snd_emu10k1 *emu) in snd_emu10k1_efx_free_pm_buffer() argument
2683 kfree(emu->saved_gpr); in snd_emu10k1_efx_free_pm_buffer()
2684 kfree(emu->tram_val_saved); in snd_emu10k1_efx_free_pm_buffer()
2685 kfree(emu->tram_addr_saved); in snd_emu10k1_efx_free_pm_buffer()
2686 vfree(emu->saved_icode); in snd_emu10k1_efx_free_pm_buffer()
2692 void snd_emu10k1_efx_suspend(struct snd_emu10k1 *emu) in snd_emu10k1_efx_suspend() argument
2696 len = emu->audigy ? 0x200 : 0x100; in snd_emu10k1_efx_suspend()
2698 emu->saved_gpr[i] = snd_emu10k1_ptr_read(emu, emu->gpr_base + i, 0); in snd_emu10k1_efx_suspend()
2700 len = emu->audigy ? 0x100 : 0xa0; in snd_emu10k1_efx_suspend()
2702 emu->tram_val_saved[i] = snd_emu10k1_ptr_read(emu, TANKMEMDATAREGBASE + i, 0); in snd_emu10k1_efx_suspend()
2703 emu->tram_addr_saved[i] = snd_emu10k1_ptr_read(emu, TANKMEMADDRREGBASE + i, 0); in snd_emu10k1_efx_suspend()
2704 if (emu->audigy) { in snd_emu10k1_efx_suspend()
2705 emu->tram_addr_saved[i] >>= 12; in snd_emu10k1_efx_suspend()
2706 emu->tram_addr_saved[i] |= in snd_emu10k1_efx_suspend()
2707 snd_emu10k1_ptr_read(emu, A_TANKMEMCTLREGBASE + i, 0) << 20; in snd_emu10k1_efx_suspend()
2711 len = emu->audigy ? 2 * 1024 : 2 * 512; in snd_emu10k1_efx_suspend()
2713 emu->saved_icode[i] = snd_emu10k1_efx_read(emu, i); in snd_emu10k1_efx_suspend()
2716 void snd_emu10k1_efx_resume(struct snd_emu10k1 *emu) in snd_emu10k1_efx_resume() argument
2721 if (emu->fx8010.etram_pages.bytes > 0) { in snd_emu10k1_efx_resume()
2723 size = emu->fx8010.etram_pages.bytes / 2; in snd_emu10k1_efx_resume()
2729 outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG); in snd_emu10k1_efx_resume()
2730 snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr); in snd_emu10k1_efx_resume()
2731 snd_emu10k1_ptr_write(emu, TCBS, 0, size_reg); in snd_emu10k1_efx_resume()
2732 outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG); in snd_emu10k1_efx_resume()
2735 if (emu->audigy) in snd_emu10k1_efx_resume()
2736 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_SINGLE_STEP); in snd_emu10k1_efx_resume()
2738 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_SINGLE_STEP); in snd_emu10k1_efx_resume()
2740 len = emu->audigy ? 0x200 : 0x100; in snd_emu10k1_efx_resume()
2742 snd_emu10k1_ptr_write(emu, emu->gpr_base + i, 0, emu->saved_gpr[i]); in snd_emu10k1_efx_resume()
2744 len = emu->audigy ? 0x100 : 0xa0; in snd_emu10k1_efx_resume()
2746 snd_emu10k1_ptr_write(emu, TANKMEMDATAREGBASE + i, 0, in snd_emu10k1_efx_resume()
2747 emu->tram_val_saved[i]); in snd_emu10k1_efx_resume()
2748 if (! emu->audigy) in snd_emu10k1_efx_resume()
2749 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + i, 0, in snd_emu10k1_efx_resume()
2750 emu->tram_addr_saved[i]); in snd_emu10k1_efx_resume()
2752 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + i, 0, in snd_emu10k1_efx_resume()
2753 emu->tram_addr_saved[i] << 12); in snd_emu10k1_efx_resume()
2754 snd_emu10k1_ptr_write(emu, TANKMEMADDRREGBASE + i, 0, in snd_emu10k1_efx_resume()
2755 emu->tram_addr_saved[i] >> 20); in snd_emu10k1_efx_resume()
2759 len = emu->audigy ? 2 * 1024 : 2 * 512; in snd_emu10k1_efx_resume()
2761 snd_emu10k1_efx_write(emu, i, emu->saved_icode[i]); in snd_emu10k1_efx_resume()
2764 if (emu->audigy) in snd_emu10k1_efx_resume()
2765 snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg); in snd_emu10k1_efx_resume()
2767 snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg); in snd_emu10k1_efx_resume()