diff options
| author | Jaroslav Kysela <perex@suse.cz> | 2003-09-25 18:37:18 +0200 |
|---|---|---|
| committer | Jaroslav Kysela <perex@suse.cz> | 2003-09-25 18:37:18 +0200 |
| commit | 3b1998711bec1cd8a8a9f219e411a8259e2cf963 (patch) | |
| tree | 86ea5a5bd06a1f48ad48d894312d5a4508f36d1d | |
| parent | 5e63ebcadb132db401edd24bfa477eadd295132c (diff) | |
ALSA CVS update
D:2003/08/29 10:22:27
C:EMU10K1/EMU10K2 driver
A:Takashi Iwai <tiwai@suse.de>
F:include/emu10k1.h:1.30->1.31
F:pci/emu10k1/emu10k1.c:1.20->1.21
F:pci/emu10k1/emufx.c:1.37->1.38
F:pci/emu10k1/emupcm.c:1.21->1.22
L:Peter Zubaj <pzad@pobox.sk>:
L:- Added the support of AC3 passthrough on Audigy.
L:
L:James Courtier-Dutton <James@superbug.demon.co.uk>:
L:- Use different driver name for Audigy2.
| -rw-r--r-- | include/sound/emu10k1.h | 2 | ||||
| -rw-r--r-- | sound/pci/emu10k1/emu10k1.c | 5 | ||||
| -rw-r--r-- | sound/pci/emu10k1/emufx.c | 32 | ||||
| -rw-r--r-- | sound/pci/emu10k1/emupcm.c | 5 |
4 files changed, 35 insertions, 9 deletions
diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h index 1fbd9f3fa82b..78078e874480 100644 --- a/include/sound/emu10k1.h +++ b/include/sound/emu10k1.h @@ -1152,6 +1152,8 @@ int snd_emu10k1_proc_init(emu10k1_t * emu); #define FXBUS_MIDI_RIGHT 0x05 #define FXBUS_PCM_CENTER 0x06 #define FXBUS_PCM_LFE 0x07 +#define FXBUS_PT_LEFT 20 +#define FXBUS_PT_RIGHT 21 #define FXBUS_MIDI_REVERB 0x0c #define FXBUS_MIDI_CHORUS 0x0d diff --git a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c index 4bf067461036..6deea6359ddc 100644 --- a/sound/pci/emu10k1/emu10k1.c +++ b/sound/pci/emu10k1/emu10k1.c @@ -170,7 +170,10 @@ static int __devinit snd_card_emu10k1_probe(struct pci_dev *pci, } #endif - if (emu->audigy) { + if (emu->audigy && (emu->revision == 4) ) { + strcpy(card->driver, "Audigy2"); + strcpy(card->shortname, "Sound Blaster Audigy2"); + } else if (emu->audigy) { strcpy(card->driver, "Audigy"); strcpy(card->shortname, "Sound Blaster Audigy"); } else if (emu->APS) { diff --git a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c index c038e776f6c9..4f5f128937b0 100644 --- a/sound/pci/emu10k1/emufx.c +++ b/sound/pci/emu10k1/emufx.c @@ -1235,6 +1235,7 @@ static void __devinit snd_emu10k1_init_stereo_onoff_control(emu10k1_fx8010_contr */ #define A_GPR_ACCU 0xd6 +#define A_GPR_COND 0xd7 static int __devinit _snd_emu10k1_audigy_init_efx(emu10k1_t *emu) { @@ -1502,13 +1503,7 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) A_OP(icode, &ptr, iMAC0, A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr+1), A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS)); snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Master Playback Volume", gpr, 0); gpr += 2; - } - - /* digital outputs */ - A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); - A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS); - A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS); - A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS); + } /* analog speakers */ if (emu->revision == 4) { /* audigy2 */ @@ -1523,6 +1518,29 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input)) /* headphone */ A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); + /* digital outputs */ +// A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); + + /* IEC958 Optical Raw Playback Switch */ + icode->gpr_map[gpr++] = 0x1008; + icode->gpr_map[gpr++] = 0xffff0000; + for (z = 0; z < 2; z++) { + A_OP(icode, &ptr, iMAC0, A_GPR(tmp + 2), A_FXBUS(FXBUS_PT_LEFT + z), A_C_00000000, A_C_00000000); + A_OP(icode, &ptr, iSKIP, A_GPR_COND, A_GPR_COND, A_GPR(gpr - 2), A_C_00000001); + A_OP(icode, &ptr, iACC3, A_GPR(tmp + 2), A_C_00000000, A_C_00010000, A_GPR(tmp + 2)); + A_OP(icode, &ptr, iANDXOR, A_GPR(tmp + 2), A_GPR(tmp + 2), A_GPR(gpr - 1), A_C_00000000); + A_SWITCH(icode, &ptr, tmp + 0, tmp + 2, gpr + z); + A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z); + A_SWITCH(icode, &ptr, tmp + 1, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, tmp + 1); + A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000); + } + snd_emu10k1_init_stereo_onoff_control(controls + nctl++, "IEC958 Optical Raw Playback Switch", gpr, 0); + gpr += 2; + + A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS); + A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS); + A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS); + /* ADC buffer */ A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_L, capture); A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_R, capture+1); diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c index 3e309c3dcd8a..c92c58a74f6d 100644 --- a/sound/pci/emu10k1/emupcm.c +++ b/sound/pci/emu10k1/emupcm.c @@ -666,8 +666,11 @@ static snd_pcm_uframes_t snd_emu10k1_playback_pointer(snd_pcm_substream_t * subs #else /* EMU10K1 Open Source code from Creative */ if (ptr < epcm->ccca_start_addr) ptr += runtime->buffer_size - epcm->ccca_start_addr; - else + else { ptr -= epcm->ccca_start_addr; + if (ptr >= runtime->buffer_size) + ptr -= runtime->buffer_size; + } #endif // printk("ptr = 0x%x, buffer_size = 0x%x, period_size = 0x%x\n", ptr, runtime->buffer_size, runtime->period_size); return ptr; |
