[ALSA] hda-codec - Fix dmics on ALC268 in auto configuration
authorTakashi Iwai <tiwai@suse.de>
Thu, 6 Mar 2008 15:58:17 +0000 (16:58 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 24 Apr 2008 10:00:22 +0000 (12:00 +0200)
Fixed the handling of dmics on ALC268 in the auto-configuration mode.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_realtek.c

index 41bcbfd..c67c32f 100644 (file)
@@ -6258,16 +6258,21 @@ static void alc882_auto_init_analog_input(struct hda_codec *codec)
 
        for (i = 0; i < AUTO_PIN_LAST; i++) {
                hda_nid_t nid = spec->autocfg.input_pins[i];
-               if (alc882_is_input_pin(nid)) {
-                       snd_hda_codec_write(codec, nid, 0,
-                                           AC_VERB_SET_PIN_WIDGET_CONTROL,
-                                           i <= AUTO_PIN_FRONT_MIC ?
-                                           PIN_VREF80 : PIN_IN);
-                       if (nid != ALC882_PIN_CD_NID)
-                               snd_hda_codec_write(codec, nid, 0,
-                                                   AC_VERB_SET_AMP_GAIN_MUTE,
-                                                   AMP_OUT_MUTE);
+               unsigned int vref;
+               if (!nid)
+                       continue;
+               vref = PIN_IN;
+               if (1 /*i <= AUTO_PIN_FRONT_MIC*/) {
+                       if (snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP) &
+                           AC_PINCAP_VREF_80)
+                               vref = PIN_VREF80;
                }
+               snd_hda_codec_write(codec, nid, 0,
+                                   AC_VERB_SET_PIN_WIDGET_CONTROL, vref);
+               if (get_wcaps(codec, nid) & AC_WCAP_OUT_AMP)
+                       snd_hda_codec_write(codec, nid, 0,
+                                           AC_VERB_SET_AMP_GAIN_MUTE,
+                                           AMP_OUT_MUTE);
        }
 }
 
@@ -10125,6 +10130,10 @@ static int alc268_auto_create_analog_input_ctls(struct alc_spec *spec,
                case 0x1c:      
                        idx1 = 3;       /* CD */
                        break;
+               case 0x12:
+               case 0x13:
+                       idx1 = 6;       /* digital mics */
+                       break;
                default:
                        continue;
                }