ALSA: emu10k1: skip mic capture PCM for cards without AC97 codec
authorOswald Buddenhagen <oswald.buddenhagen@gmx.de>
Sun, 14 May 2023 17:03:21 +0000 (19:03 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 15 May 2023 20:06:20 +0000 (22:06 +0200)
The microphone capture device is a feature of the AC97 codec, so its
availability should be coupled to the presence of that codec.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230514170323.3408834-6-oswald.buddenhagen@gmx.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/emu10k1/emu10k1.c
sound/pci/emu10k1/emufx.c

index b8163f2..0c97237 100644 (file)
@@ -107,9 +107,11 @@ static int snd_card_emu10k1_probe(struct pci_dev *pci,
        err = snd_emu10k1_pcm(emu, 0);
        if (err < 0)
                return err;
-       err = snd_emu10k1_pcm_mic(emu, 1);
-       if (err < 0)
-               return err;
+       if (emu->card_capabilities->ac97_chip) {
+               err = snd_emu10k1_pcm_mic(emu, 1);
+               if (err < 0)
+                       return err;
+       }
        err = snd_emu10k1_pcm_efx(emu, 2);
        if (err < 0)
                return err;
index 8c171bb..9c9ffba 100644 (file)
@@ -1380,19 +1380,21 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
                gpr_map[gpr + 2] = 0x00000000;
                gpr += 3;
        } else {
-               /* AC'97 Playback Volume - used only for mic (renamed later) */
-               A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AC97_L);
-               A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AC97_R);
-               snd_emu10k1_init_stereo_control(&controls[nctl++], "AMic Playback Volume", gpr, 0);
-               gpr += 2;
-               /* AC'97 Capture Volume - used only for mic */
-               A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
-               A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
-               snd_emu10k1_init_stereo_control(&controls[nctl++], "Mic Capture Volume", gpr, 0);
-               gpr += 2;
-
-               /* mic capture buffer */
-               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));
+               if (emu->card_capabilities->ac97_chip) {
+                       /* AC'97 Playback Volume - used only for mic (renamed later) */
+                       A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AC97_L);
+                       A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AC97_R);
+                       snd_emu10k1_init_stereo_control(&controls[nctl++], "AMic Playback Volume", gpr, 0);
+                       gpr += 2;
+                       /* AC'97 Capture Volume - used only for mic */
+                       A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
+                       A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
+                       snd_emu10k1_init_stereo_control(&controls[nctl++], "Mic Capture Volume", gpr, 0);
+                       gpr += 2;
+
+                       /* mic capture buffer */
+                       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));
+               }
 
                /* Audigy CD Playback Volume */
                A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_SPDIF_CD_L);