Skip to content

Commit 9d2f386

Browse files
ossilatortiwai
authored andcommitted
ALSA: emu10k1: use more existing defines instead of open-coded numbers
Using the *_MASK defines for "maximal value" is debatable. I got the idea from FreeBSD, and it sorta makes sense to me. Some hunks look a bit incomplete, because code that is going to be subsequently removed is not touched here. Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Link: https://lore.kernel.org/r/20230428080732.1697695-1-oswald.buddenhagen@gmx.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent 067eb08 commit 9d2f386

7 files changed

Lines changed: 69 additions & 65 deletions

File tree

sound/pci/emu10k1/emu10k1_callback.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,9 @@ release_voice(struct snd_emux_voice *vp)
120120
struct snd_emu10k1 *hw;
121121

122122
hw = vp->hw;
123-
dcysusv = 0x8000 | (unsigned char)vp->reg.parm.modrelease;
123+
dcysusv = (unsigned char)vp->reg.parm.modrelease | DCYSUSM_PHASE1_MASK;
124124
snd_emu10k1_ptr_write(hw, DCYSUSM, vp->ch, dcysusv);
125-
dcysusv = 0x8000 | (unsigned char)vp->reg.parm.volrelease | DCYSUSV_CHANNELENABLE_MASK;
125+
dcysusv = (unsigned char)vp->reg.parm.volrelease | DCYSUSV_PHASE1_MASK | DCYSUSV_CHANNELENABLE_MASK;
126126
snd_emu10k1_ptr_write(hw, DCYSUSV, vp->ch, dcysusv);
127127
}
128128

@@ -138,7 +138,8 @@ terminate_voice(struct snd_emux_voice *vp)
138138
if (snd_BUG_ON(!vp))
139139
return;
140140
hw = vp->hw;
141-
snd_emu10k1_ptr_write(hw, DCYSUSV, vp->ch, 0x807f | DCYSUSV_CHANNELENABLE_MASK);
141+
snd_emu10k1_ptr_write(hw, DCYSUSV, vp->ch,
142+
DCYSUSV_PHASE1_MASK | DCYSUSV_DECAYTIME_MASK | DCYSUSV_CHANNELENABLE_MASK);
142143
if (vp->block) {
143144
struct snd_emu10k1_memblk *emem;
144145
emem = (struct snd_emu10k1_memblk *)vp->block;
@@ -347,9 +348,9 @@ start_voice(struct snd_emux_voice *vp)
347348
}
348349

349350
/* channel to be silent and idle */
350-
snd_emu10k1_ptr_write(hw, DCYSUSV, ch, 0x0000);
351-
snd_emu10k1_ptr_write(hw, VTFT, ch, 0x0000FFFF);
352-
snd_emu10k1_ptr_write(hw, CVCF, ch, 0x0000FFFF);
351+
snd_emu10k1_ptr_write(hw, DCYSUSV, ch, 0);
352+
snd_emu10k1_ptr_write(hw, VTFT, ch, VTFT_FILTERTARGET_MASK);
353+
snd_emu10k1_ptr_write(hw, CVCF, ch, CVCF_CURRENTFILTER_MASK);
353354
snd_emu10k1_ptr_write(hw, PTRX, ch, 0);
354355
snd_emu10k1_ptr_write(hw, CPF, ch, 0);
355356

@@ -453,7 +454,7 @@ start_voice(struct snd_emux_voice *vp)
453454
/* reset volume */
454455
temp = (unsigned int)vp->vtarget << 16;
455456
snd_emu10k1_ptr_write(hw, VTFT, ch, temp | vp->ftarget);
456-
snd_emu10k1_ptr_write(hw, CVCF, ch, temp | 0xff00);
457+
snd_emu10k1_ptr_write(hw, CVCF, ch, temp | CVCF_CURRENTFILTER_MASK);
457458
return 0;
458459
}
459460

sound/pci/emu10k1/emu10k1_main.c

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch)
5959
{
6060
snd_emu10k1_ptr_write(emu, DCYSUSV, ch, 0);
6161
snd_emu10k1_ptr_write(emu, IP, ch, 0);
62-
snd_emu10k1_ptr_write(emu, VTFT, ch, 0xffff);
63-
snd_emu10k1_ptr_write(emu, CVCF, ch, 0xffff);
62+
snd_emu10k1_ptr_write(emu, VTFT, ch, VTFT_FILTERTARGET_MASK);
63+
snd_emu10k1_ptr_write(emu, CVCF, ch, CVCF_CURRENTFILTER_MASK);
6464
snd_emu10k1_ptr_write(emu, PTRX, ch, 0);
6565
snd_emu10k1_ptr_write(emu, CPF, ch, 0);
6666
snd_emu10k1_ptr_write(emu, CCR, ch, 0);
@@ -74,7 +74,7 @@ void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch)
7474

7575
snd_emu10k1_ptr_write(emu, ATKHLDM, ch, 0);
7676
snd_emu10k1_ptr_write(emu, DCYSUSM, ch, 0);
77-
snd_emu10k1_ptr_write(emu, IFATN, ch, 0xffff);
77+
snd_emu10k1_ptr_write(emu, IFATN, ch, IFATN_FILTERCUTOFF_MASK | IFATN_ATTENUATION_MASK);
7878
snd_emu10k1_ptr_write(emu, PEFE, ch, 0);
7979
snd_emu10k1_ptr_write(emu, FMMOD, ch, 0);
8080
snd_emu10k1_ptr_write(emu, TREMFRQ, ch, 24); /* 1 Hz */
@@ -90,10 +90,10 @@ void snd_emu10k1_voice_init(struct snd_emu10k1 *emu, int ch)
9090

9191
/* Audigy extra stuffs */
9292
if (emu->audigy) {
93-
snd_emu10k1_ptr_write(emu, 0x4c, ch, 0); /* ?? */
94-
snd_emu10k1_ptr_write(emu, 0x4d, ch, 0); /* ?? */
95-
snd_emu10k1_ptr_write(emu, 0x4e, ch, 0); /* ?? */
96-
snd_emu10k1_ptr_write(emu, 0x4f, ch, 0); /* ?? */
93+
snd_emu10k1_ptr_write(emu, A_CSBA, ch, 0);
94+
snd_emu10k1_ptr_write(emu, A_CSDC, ch, 0);
95+
snd_emu10k1_ptr_write(emu, A_CSFE, ch, 0);
96+
snd_emu10k1_ptr_write(emu, A_CSHG, ch, 0);
9797
snd_emu10k1_ptr_write(emu, A_FXRT1, ch, 0x03020100);
9898
snd_emu10k1_ptr_write(emu, A_FXRT2, ch, 0x3f3f3f3f);
9999
snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, ch, 0);
@@ -259,7 +259,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir)
259259

260260
snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
261261
snd_emu10k1_ptr_write(emu, TCB, 0, 0); /* taken from original driver */
262-
snd_emu10k1_ptr_write(emu, TCBS, 0, 4); /* taken from original driver */
262+
snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_256K); /* taken from original driver */
263263

264264
silent_page = (emu->silent_page.addr << emu->address_mode) | (emu->address_mode ? MAP_PTI_MASK1 : MAP_PTI_MASK0);
265265
for (ch = 0; ch < NUM_G; ch++) {
@@ -818,7 +818,7 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
818818
/* FPGA netlist already present so clear it */
819819
/* Return to programming mode */
820820

821-
snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, 0x02);
821+
snd_emu1010_fpga_write(emu, EMU_HANA_FPGA_CONFIG, EMU_HANA_FPGA_CONFIG_HANA);
822822
}
823823
snd_emu1010_fpga_read(emu, EMU_HANA_ID, &reg);
824824
dev_dbg(emu->card->dev, "reg2 = 0x%x\n", reg);
@@ -858,36 +858,36 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
858858
/* Optical -> ADAT I/O */
859859
emu->emu1010.optical_in = 1; /* IN_ADAT */
860860
emu->emu1010.optical_out = 1; /* OUT_ADAT */
861-
tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) |
862-
(emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0);
861+
tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : EMU_HANA_OPTICAL_IN_SPDIF) |
862+
(emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : EMU_HANA_OPTICAL_OUT_SPDIF);
863863
snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp);
864864
/* Set no attenuation on Audio Dock pads. */
865-
snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, 0x00);
866865
emu->emu1010.adc_pads = 0x00;
866+
snd_emu1010_fpga_write(emu, EMU_HANA_ADC_PADS, emu->emu1010.adc_pads);
867867
/* Unmute Audio dock DACs, Headphone source DAC-4. */
868-
snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, 0x30);
868+
snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_MISC, EMU_HANA_DOCK_PHONES_192_DAC4);
869869
/* DAC PADs. */
870-
snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, 0x0f);
871-
emu->emu1010.dac_pads = 0x0f;
870+
emu->emu1010.dac_pads = EMU_HANA_DOCK_DAC_PAD1 | EMU_HANA_DOCK_DAC_PAD2 |
871+
EMU_HANA_DOCK_DAC_PAD3 | EMU_HANA_DOCK_DAC_PAD4;
872+
snd_emu1010_fpga_write(emu, EMU_HANA_DAC_PADS, emu->emu1010.dac_pads);
872873
/* SPDIF Format. Set Consumer mode, 24bit, copy enable */
873-
snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, 0x10);
874+
snd_emu1010_fpga_write(emu, EMU_HANA_SPDIF_MODE, EMU_HANA_SPDIF_MODE_RX_INVALID);
874875
/* MIDI routing */
875-
snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, 0x19);
876-
/* Unknown. */
877-
snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, 0x0c);
876+
snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_IN, EMU_HANA_MIDI_INA_FROM_HAMOA | EMU_HANA_MIDI_INB_FROM_DOCK2);
877+
snd_emu1010_fpga_write(emu, EMU_HANA_MIDI_OUT, EMU_HANA_MIDI_OUT_DOCK2 | EMU_HANA_MIDI_OUT_SYNC2);
878878
/* IRQ Enable: All on */
879-
/* snd_emu1010_fpga_write(emu, 0x09, 0x0f ); */
879+
/* snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE, 0x0f); */
880880
/* IRQ Enable: All off */
881881
snd_emu1010_fpga_write(emu, EMU_HANA_IRQ_ENABLE, 0x00);
882882

883883
emu->emu1010.internal_clock = 1; /* 48000 */
884884
/* Default WCLK set to 48kHz. */
885-
snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, 0x00);
885+
snd_emu1010_fpga_write(emu, EMU_HANA_DEFCLOCK, EMU_HANA_DEFCLOCK_48K);
886886
/* Word Clock source, Internal 48kHz x1 */
887887
snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K);
888888
/* snd_emu1010_fpga_write(emu, EMU_HANA_WCLOCK, EMU_HANA_WCLOCK_INT_48K | EMU_HANA_WCLOCK_4X); */
889889
/* Audio Dock LEDs. */
890-
snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, 0x12);
890+
snd_emu1010_fpga_write(emu, EMU_HANA_DOCK_LEDS_2, EMU_HANA_DOCK_LEDS_2_LOCK | EMU_HANA_DOCK_LEDS_2_48K);
891891

892892
#if 0
893893
/* For 96kHz */
@@ -1014,7 +1014,7 @@ static int snd_emu10k1_emu1010_init(struct snd_emu10k1 *emu)
10141014
EMU_DST_ALICE_I2S2_LEFT, EMU_SRC_DOCK_ADC3_LEFT1);
10151015
snd_emu1010_fpga_link_dst_src_write(emu,
10161016
EMU_DST_ALICE_I2S2_RIGHT, EMU_SRC_DOCK_ADC3_RIGHT1);
1017-
snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, 0x01); /* Unmute all */
1017+
snd_emu1010_fpga_write(emu, EMU_HANA_UNMUTE, EMU_UNMUTE);
10181018

10191019
#if 0
10201020
snd_emu1010_fpga_link_dst_src_write(emu,

sound/pci/emu10k1/emufx.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,7 +1355,7 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
13551355
gpr += 2;
13561356

13571357
/* mic capture buffer */
1358-
A_OP(icode, &ptr, iINTERP, A_EXTOUT(A_EXTOUT_MIC_CAP), A_EXTIN(A_EXTIN_AC97_L), 0xcd, A_EXTIN(A_EXTIN_AC97_R));
1358+
A_OP(icode, &ptr, iINTERP, A_EXTOUT(A_EXTOUT_MIC_CAP), A_EXTIN(A_EXTIN_AC97_L), A_C_40000000, A_EXTIN(A_EXTIN_AC97_R));
13591359

13601360
/* Audigy CD Playback Volume */
13611361
A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_SPDIF_CD_L);
@@ -1438,7 +1438,7 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
14381438

14391439
/* Stereo Mix Center Playback */
14401440
/* Center = sub = Left/2 + Right/2 */
1441-
A_OP(icode, &ptr, iINTERP, A_GPR(tmp), A_GPR(stereo_mix), 0xcd, A_GPR(stereo_mix+1));
1441+
A_OP(icode, &ptr, iINTERP, A_GPR(tmp), A_GPR(stereo_mix), A_C_40000000, A_GPR(stereo_mix+1));
14421442
A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_GPR(playback+4), A_GPR(gpr), A_GPR(tmp));
14431443
snd_emu10k1_init_mono_control(&controls[nctl++], "Center Playback Volume", gpr, 0);
14441444
gpr++;
@@ -2478,7 +2478,7 @@ int snd_emu10k1_fx8010_tram_setup(struct snd_emu10k1 *emu, u32 size)
24782478
outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG);
24792479
spin_unlock_irq(&emu->emu_lock);
24802480
snd_emu10k1_ptr_write(emu, TCB, 0, 0);
2481-
snd_emu10k1_ptr_write(emu, TCBS, 0, 0);
2481+
snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K);
24822482
if (emu->fx8010.etram_pages.area != NULL) {
24832483
snd_dma_free_pages(&emu->fx8010.etram_pages);
24842484
emu->fx8010.etram_pages.area = NULL;

sound/pci/emu10k1/emumixer.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -827,8 +827,8 @@ static int snd_emu1010_optical_out_put(struct snd_kcontrol *kcontrol,
827827
change = (emu->emu1010.optical_out != val);
828828
if (change) {
829829
emu->emu1010.optical_out = val;
830-
tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) |
831-
(emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0);
830+
tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : EMU_HANA_OPTICAL_IN_SPDIF) |
831+
(emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : EMU_HANA_OPTICAL_OUT_SPDIF);
832832
snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp);
833833
}
834834
return change;
@@ -878,8 +878,8 @@ static int snd_emu1010_optical_in_put(struct snd_kcontrol *kcontrol,
878878
change = (emu->emu1010.optical_in != val);
879879
if (change) {
880880
emu->emu1010.optical_in = val;
881-
tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : 0) |
882-
(emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : 0);
881+
tmp = (emu->emu1010.optical_in ? EMU_HANA_OPTICAL_IN_ADAT : EMU_HANA_OPTICAL_IN_SPDIF) |
882+
(emu->emu1010.optical_out ? EMU_HANA_OPTICAL_OUT_ADAT : EMU_HANA_OPTICAL_OUT_SPDIF);
883883
snd_emu1010_fpga_write(emu, EMU_HANA_OPTICAL_TYPE, tmp);
884884
}
885885
return change;

sound/pci/emu10k1/emupcm.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -352,8 +352,8 @@ static void snd_emu10k1_pcm_init_voice(struct snd_emu10k1 *emu,
352352
snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page);
353353
snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page);
354354
/* modulation envelope */
355-
snd_emu10k1_ptr_write(emu, CVCF, voice, 0xffff);
356-
snd_emu10k1_ptr_write(emu, VTFT, voice, 0xffff);
355+
snd_emu10k1_ptr_write(emu, VTFT, voice, VTFT_FILTERTARGET_MASK);
356+
snd_emu10k1_ptr_write(emu, CVCF, voice, CVCF_CURRENTFILTER_MASK);
357357
snd_emu10k1_ptr_write(emu, ATKHLDM, voice, 0);
358358
snd_emu10k1_ptr_write(emu, DCYSUSM, voice, 0x007f);
359359
snd_emu10k1_ptr_write(emu, LFOVAL1, voice, 0x8000);
@@ -621,8 +621,8 @@ static void snd_emu10k1_playback_prepare_voice(struct snd_emu10k1 *emu, struct s
621621
tmp = runtime->channels == 2 ? (master ? 1 : 2) : 0;
622622
vattn = mix != NULL ? (mix->attn[tmp] << 16) : 0;
623623
snd_emu10k1_ptr_write(emu, IFATN, voice, attn);
624-
snd_emu10k1_ptr_write(emu, VTFT, voice, vattn | 0xffff);
625-
snd_emu10k1_ptr_write(emu, CVCF, voice, vattn | 0xffff);
624+
snd_emu10k1_ptr_write(emu, VTFT, voice, vattn | VTFT_FILTERTARGET_MASK);
625+
snd_emu10k1_ptr_write(emu, CVCF, voice, vattn | CVCF_CURRENTFILTER_MASK);
626626
snd_emu10k1_ptr_write(emu, DCYSUSV, voice, 0x7f7f);
627627
snd_emu10k1_voice_clear_loop_stop(emu, voice);
628628
}
@@ -663,8 +663,8 @@ static void snd_emu10k1_playback_stop_voice(struct snd_emu10k1 *emu, struct snd_
663663
snd_emu10k1_ptr_write(emu, PTRX_PITCHTARGET, voice, 0);
664664
snd_emu10k1_ptr_write(emu, CPF_CURRENTPITCH, voice, 0);
665665
snd_emu10k1_ptr_write(emu, IFATN, voice, 0xffff);
666-
snd_emu10k1_ptr_write(emu, VTFT, voice, 0xffff);
667-
snd_emu10k1_ptr_write(emu, CVCF, voice, 0xffff);
666+
snd_emu10k1_ptr_write(emu, VTFT, voice, VTFT_FILTERTARGET_MASK);
667+
snd_emu10k1_ptr_write(emu, CVCF, voice, CVCF_CURRENTFILTER_MASK);
668668
snd_emu10k1_ptr_write(emu, IP, voice, 0);
669669
}
670670

sound/pci/emu10k1/io.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ unsigned int snd_emu10k1_ptr20_read(struct snd_emu10k1 * emu,
9595
regptr = (reg << 16) | chn;
9696

9797
spin_lock_irqsave(&emu->emu_lock, flags);
98-
outl(regptr, emu->port + 0x20 + PTR);
99-
val = inl(emu->port + 0x20 + DATA);
98+
outl(regptr, emu->port + PTR2);
99+
val = inl(emu->port + DATA2);
100100
spin_unlock_irqrestore(&emu->emu_lock, flags);
101101
return val;
102102
}
@@ -112,8 +112,8 @@ void snd_emu10k1_ptr20_write(struct snd_emu10k1 *emu,
112112
regptr = (reg << 16) | chn;
113113

114114
spin_lock_irqsave(&emu->emu_lock, flags);
115-
outl(regptr, emu->port + 0x20 + PTR);
116-
outl(data, emu->port + 0x20 + DATA);
115+
outl(regptr, emu->port + PTR2);
116+
outl(data, emu->port + DATA2);
117117
spin_unlock_irqrestore(&emu->emu_lock, flags);
118118
}
119119

@@ -128,7 +128,7 @@ int snd_emu10k1_spi_write(struct snd_emu10k1 * emu,
128128
/* This function is not re-entrant, so protect against it. */
129129
spin_lock(&emu->spi_lock);
130130
if (emu->card_capabilities->ca0108_chip)
131-
reg = 0x3c; /* PTR20, reg 0x3c */
131+
reg = P17V_SPI;
132132
else {
133133
/* For other chip types the SPI register
134134
* is currently unknown. */
@@ -280,10 +280,10 @@ void snd_emu1010_fpga_link_dst_src_write(struct snd_emu10k1 *emu, u32 dst, u32 s
280280
return;
281281
if (snd_BUG_ON(src & ~0x71f))
282282
return;
283-
snd_emu1010_fpga_write(emu, 0x00, dst >> 8);
284-
snd_emu1010_fpga_write(emu, 0x01, dst & 0x1f);
285-
snd_emu1010_fpga_write(emu, 0x02, src >> 8);
286-
snd_emu1010_fpga_write(emu, 0x03, src & 0x1f);
283+
snd_emu1010_fpga_write(emu, EMU_HANA_DESTHI, dst >> 8);
284+
snd_emu1010_fpga_write(emu, EMU_HANA_DESTLO, dst & 0x1f);
285+
snd_emu1010_fpga_write(emu, EMU_HANA_SRCHI, src >> 8);
286+
snd_emu1010_fpga_write(emu, EMU_HANA_SRCLO, src & 0x1f);
287287
}
288288

289289
void snd_emu10k1_intr_enable(struct snd_emu10k1 *emu, unsigned int intrenb)

sound/pci/emu10k1/p16v.c

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -254,19 +254,24 @@ static int snd_p16v_pcm_prepare_playback(struct snd_pcm_substream *substream)
254254
emu->p16v_buffer->bytes);
255255
#endif /* debug */
256256
tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, channel);
257+
tmp &= ~(A_SPDIF_RATE_MASK | A_EHC_SRC48_MASK);
257258
switch (runtime->rate) {
258259
case 44100:
259-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x8080);
260+
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel,
261+
tmp | A_SPDIF_44100 | A_EHC_SRC48_44);
260262
break;
261263
case 96000:
262-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x4040);
264+
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel,
265+
tmp | A_SPDIF_96000 | A_EHC_SRC48_96);
263266
break;
264267
case 192000:
265-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x2020);
268+
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel,
269+
tmp | A_SPDIF_192000 | A_EHC_SRC48_192);
266270
break;
267271
case 48000:
268272
default:
269-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0xe0e0) | 0x0000);
273+
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel,
274+
tmp | A_SPDIF_48000 | A_EHC_SRC48_BYPASS);
270275
break;
271276
}
272277
/* FIXME: Check emu->buffer.size before actually writing to it. */
@@ -282,8 +287,8 @@ static int snd_p16v_pcm_prepare_playback(struct snd_pcm_substream *substream)
282287
//snd_emu10k1_ptr20_write(emu, PLAYBACK_PERIOD_SIZE, channel, frames_to_bytes(runtime, runtime->period_size)<<16); // buffer size in bytes
283288
snd_emu10k1_ptr20_write(emu, PLAYBACK_PERIOD_SIZE, channel, 0); // buffer size in bytes
284289
snd_emu10k1_ptr20_write(emu, PLAYBACK_POINTER, channel, 0);
285-
snd_emu10k1_ptr20_write(emu, 0x07, channel, 0x0);
286-
snd_emu10k1_ptr20_write(emu, 0x08, channel, 0);
290+
snd_emu10k1_ptr20_write(emu, PLAYBACK_FIFO_END_ADDRESS, channel, 0);
291+
snd_emu10k1_ptr20_write(emu, PLAYBACK_FIFO_POINTER, channel, 0);
287292

288293
return 0;
289294
}
@@ -294,7 +299,6 @@ static int snd_p16v_pcm_prepare_capture(struct snd_pcm_substream *substream)
294299
struct snd_emu10k1 *emu = snd_pcm_substream_chip(substream);
295300
struct snd_pcm_runtime *runtime = substream->runtime;
296301
int channel = substream->pcm->device - emu->p16v_device_offset;
297-
u32 tmp;
298302

299303
/*
300304
dev_dbg(emu->card->dev, "prepare capture:channel_number=%d, rate=%d, "
@@ -304,24 +308,23 @@ static int snd_p16v_pcm_prepare_capture(struct snd_pcm_substream *substream)
304308
runtime->buffer_size, runtime->period_size,
305309
frames_to_bytes(runtime, 1));
306310
*/
307-
tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, channel);
308311
switch (runtime->rate) {
309312
case 44100:
310-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0x0e00) | 0x0800);
313+
snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, channel, A_I2S_CAPTURE_44100);
311314
break;
312315
case 96000:
313-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0x0e00) | 0x0400);
316+
snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, channel, A_I2S_CAPTURE_96000);
314317
break;
315318
case 192000:
316-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0x0e00) | 0x0200);
319+
snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, channel, A_I2S_CAPTURE_192000);
317320
break;
318321
case 48000:
319322
default:
320-
snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, channel, (tmp & ~0x0e00) | 0x0000);
323+
snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, channel, A_I2S_CAPTURE_48000);
321324
break;
322325
}
323326
/* FIXME: Check emu->buffer.size before actually writing to it. */
324-
snd_emu10k1_ptr20_write(emu, 0x13, channel, 0);
327+
snd_emu10k1_ptr20_write(emu, CAPTURE_FIFO_POINTER, channel, 0);
325328
snd_emu10k1_ptr20_write(emu, CAPTURE_DMA_ADDR, channel, runtime->dma_addr);
326329
snd_emu10k1_ptr20_write(emu, CAPTURE_BUFFER_SIZE, channel, frames_to_bytes(runtime, runtime->buffer_size) << 16); // buffer size in bytes
327330
snd_emu10k1_ptr20_write(emu, CAPTURE_POINTER, channel, 0);

0 commit comments

Comments
 (0)