ALSA: emu10k1: use high-level I/O functions also during init
authorOswald Buddenhagen <oswald.buddenhagen@gmx.de>
Sat, 22 Apr 2023 16:10:20 +0000 (18:10 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sun, 23 Apr 2023 07:22:09 +0000 (09:22 +0200)
... and also use more pre-defined constants on the way (some of which
required adjustment).

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230422161021.1143967-1-oswald.buddenhagen@gmx.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/emu10k1.h
sound/pci/emu10k1/emu10k1_main.c

index 5958cae..05a0982 100644 (file)
 #define A_SPDIF_MUTED          0x000000c0
 
 #define A_I2S_CAPTURE_RATE_MASK        0x00000e00      /* This sets the capture PCM rate, but it is    */
-#define A_I2S_CAPTURE_48000    0x00000000      /* unclear if this sets the ADC rate as well.   */
-#define A_I2S_CAPTURE_192000   0x00000200
-#define A_I2S_CAPTURE_96000    0x00000400
-#define A_I2S_CAPTURE_44100    0x00000800
+#define A_I2S_CAPTURE_RATE     0x03090076      /* unclear if this sets the ADC rate as well.   */
+#define A_I2S_CAPTURE_48000    0x0
+#define A_I2S_CAPTURE_192000   0x1
+#define A_I2S_CAPTURE_96000    0x2
+#define A_I2S_CAPTURE_44100    0x4
 
 #define A_EHC_SRC48_MASK       0x0000e000      /* This sets the playback PCM rate on the P16V  */
 #define A_EHC_SRC48_BYPASS     0x00000000
index d9199d9..3abdaf1 100644 (file)
@@ -187,10 +187,7 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir)
        } else if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
                /* Hacks for Alice3 to work independent of haP16V driver */
                /* Setup SRCMulti_I2S SamplingRate */
-               tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
-               tmp &= 0xfffff1ff;
-               tmp |= (0x2<<9);
-               snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
+               snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000);
 
                /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
                snd_emu10k1_ptr20_write(emu, SRCSel, 0, 0x14);
@@ -206,25 +203,20 @@ static int snd_emu10k1_init(struct snd_emu10k1 *emu, int enable_ir)
                /* Hacks for Alice3 to work independent of haP16V driver */
                dev_info(emu->card->dev, "Audigy2 value: Special config.\n");
                /* Setup SRCMulti_I2S SamplingRate */
-               tmp = snd_emu10k1_ptr_read(emu, A_SPDIF_SAMPLERATE, 0);
-               tmp &= 0xfffff1ff;
-               tmp |= (0x2<<9);
-               snd_emu10k1_ptr_write(emu, A_SPDIF_SAMPLERATE, 0, tmp);
+               snd_emu10k1_ptr_write(emu, A_I2S_CAPTURE_RATE, 0, A_I2S_CAPTURE_96000);
 
                /* Setup SRCSel (Enable Spdif,I2S SRCMulti) */
-               outl(0x600000, emu->port + 0x20);
-               outl(0x14, emu->port + 0x24);
+               snd_emu10k1_ptr20_write(emu, P17V_SRCSel, 0, 0x14);
 
                /* Setup SRCMulti Input Audio Enable */
-               outl(0x7b0000, emu->port + 0x20);
-               outl(0xFF000000, emu->port + 0x24);
+               snd_emu10k1_ptr20_write(emu, P17V_MIXER_I2S_ENABLE, 0, 0xFF000000);
 
                /* Setup SPDIF Out Audio Enable */
                /* The Audigy 2 Value has a separate SPDIF out,
                 * so no need for a mixer switch
                 */
-               outl(0x7a0000, emu->port + 0x20);
-               outl(0xFF000000, emu->port + 0x24);
+               snd_emu10k1_ptr20_write(emu, P17V_MIXER_SPDIF_ENABLE, 0, 0xFF000000);
+
                tmp = inw(emu->port + A_IOCFG) & ~0x8; /* Clear bit 3 */
                outw(tmp, emu->port + A_IOCFG);
        }