ALSA: hda - Fix input source selection of IDT92HD73xx
authorTakashi Iwai <tiwai@suse.de>
Tue, 1 Sep 2009 23:00:05 +0000 (01:00 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 1 Sep 2009 23:00:05 +0000 (01:00 +0200)
Fix the mux_nids to select directly the input source instead of mux
mixers so that it works with the current mux enum handler for IDT
92HD73xx codecs.

Also, clean up useless / unnecessary mixer controls and init verbs.

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

index c878dfa..4cce92c 100644 (file)
@@ -329,11 +329,6 @@ static hda_nid_t stac92hd73xx_adc_nids[2] = {
        0x1a, 0x1b
 };
 
-#define DELL_M6_AMP 2
-static hda_nid_t stac92hd73xx_amp_nids[3] = {
-       0x0b, 0x0c, 0x0e
-};
-
 #define STAC92HD73XX_NUM_DMICS 2
 static hda_nid_t stac92hd73xx_dmic_nids[STAC92HD73XX_NUM_DMICS + 1] = {
        0x13, 0x14, 0
@@ -341,8 +336,8 @@ static hda_nid_t stac92hd73xx_dmic_nids[STAC92HD73XX_NUM_DMICS + 1] = {
 
 #define STAC92HD73_DAC_COUNT 5
 
-static hda_nid_t stac92hd73xx_mux_nids[4] = {
-       0x28, 0x29, 0x2a, 0x2b,
+static hda_nid_t stac92hd73xx_mux_nids[2] = {
+       0x20, 0x21,
 };
 
 static hda_nid_t stac92hd73xx_dmux_nids[2] = {
@@ -920,84 +915,16 @@ static struct hda_verb stac9200_eapd_init[] = {
        {}
 };
 
-static struct hda_verb stac92hd73xx_6ch_core_init[] = {
-       /* set master volume and direct control */
-       { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
-       /* setup adcs to point to mixer */
-       { 0x20, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x21, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       { 0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       { 0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       /* setup import muxs */
-       { 0x28, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x29, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2a, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2b, AC_VERB_SET_CONNECT_SEL, 0x00},
-       {}
-};
-
 static struct hda_verb dell_eq_core_init[] = {
        /* set master volume to max value without distortion
         * and direct control */
        { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xec},
-       /* setup adcs to point to mixer */
-       { 0x20, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x21, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       /* setup import muxs */
-       { 0x28, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x29, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2a, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2b, AC_VERB_SET_CONNECT_SEL, 0x00},
-       {}
-};
-
-static struct hda_verb dell_m6_core_init[] = {
-       { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
-       /* setup adcs to point to mixer */
-       { 0x20, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x21, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       /* setup import muxs */
-       { 0x28, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x29, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2a, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2b, AC_VERB_SET_CONNECT_SEL, 0x00},
-       {}
-};
-
-static struct hda_verb stac92hd73xx_8ch_core_init[] = {
-       /* set master volume and direct control */
-       { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
-       /* setup adcs to point to mixer */
-       { 0x20, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x21, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       { 0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       { 0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       /* setup import muxs */
-       { 0x28, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x29, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2a, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2b, AC_VERB_SET_CONNECT_SEL, 0x03},
        {}
 };
 
-static struct hda_verb stac92hd73xx_10ch_core_init[] = {
+static struct hda_verb stac92hd73xx_core_init[] = {
        /* set master volume and direct control */
        { 0x1f, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
-       /* dac3 is connected to import3 mux */
-       { 0x18, AC_VERB_SET_AMP_GAIN_MUTE, 0xb07f},
-       /* setup adcs to point to mixer */
-       { 0x20, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x21, AC_VERB_SET_CONNECT_SEL, 0x0b},
-       { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       { 0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       { 0x11, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
-       /* setup import muxs */
-       { 0x28, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x29, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2a, AC_VERB_SET_CONNECT_SEL, 0x01},
-       { 0x2b, AC_VERB_SET_CONNECT_SEL, 0x03},
        {}
 };
 
@@ -1130,28 +1057,6 @@ static struct snd_kcontrol_new stac9200_mixer[] = {
        { } /* end */
 };
 
-#define DELL_M6_MIXER 6
-static struct snd_kcontrol_new stac92hd73xx_6ch_mixer[] = {
-       /* start of config #1 */
-       HDA_CODEC_VOLUME("Front Mic Mixer Capture Volume", 0x1d, 0, HDA_INPUT),
-       HDA_CODEC_MUTE("Front Mic Mixer Capture Switch", 0x1d, 0, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("Line In Mixer Capture Volume", 0x1d, 0x2, HDA_INPUT),
-       HDA_CODEC_MUTE("Line In Mixer Capture Switch", 0x1d, 0x2, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("CD Mixer Capture Volume", 0x1d, 0x4, HDA_INPUT),
-       HDA_CODEC_MUTE("CD Mixer Capture Switch", 0x1d, 0x4, HDA_INPUT),
-
-       /* start of config #2 */
-       HDA_CODEC_VOLUME("Mic Mixer Capture Volume", 0x1d, 0x1, HDA_INPUT),
-       HDA_CODEC_MUTE("Mic Mixer Capture Switch", 0x1d, 0x1, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("DAC Mixer Capture Volume", 0x1d, 0x3, HDA_INPUT),
-       HDA_CODEC_MUTE("DAC Mixer Capture Switch", 0x1d, 0x3, HDA_INPUT),
-
-       { } /* end */
-};
-
 static struct snd_kcontrol_new stac92hd73xx_6ch_loopback[] = {
        STAC_ANALOG_LOOPBACK(0xFA0, 0x7A1, 3),
        {}
@@ -1167,42 +1072,6 @@ static struct snd_kcontrol_new stac92hd73xx_10ch_loopback[] = {
        {}
 };
 
-static struct snd_kcontrol_new stac92hd73xx_8ch_mixer[] = {
-       HDA_CODEC_VOLUME("Front Mic Mixer Capture Volume", 0x1d, 0, HDA_INPUT),
-       HDA_CODEC_MUTE("Front Mic Mixer Capture Switch", 0x1d, 0, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("Mic Mixer Capture Volume", 0x1d, 0x1, HDA_INPUT),
-       HDA_CODEC_MUTE("Mic Mixer Capture Switch", 0x1d, 0x1, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("Line In Mixer Capture Volume", 0x1d, 0x2, HDA_INPUT),
-       HDA_CODEC_MUTE("Line In Mixer Capture Switch", 0x1d, 0x2, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("DAC Mixer Capture Volume", 0x1d, 0x3, HDA_INPUT),
-       HDA_CODEC_MUTE("DAC Mixer Capture Switch", 0x1d, 0x3, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("CD Mixer Capture Volume", 0x1d, 0x4, HDA_INPUT),
-       HDA_CODEC_MUTE("CD Mixer Capture Switch", 0x1d, 0x4, HDA_INPUT),
-       { } /* end */
-};
-
-static struct snd_kcontrol_new stac92hd73xx_10ch_mixer[] = {
-       HDA_CODEC_VOLUME("Front Mic Mixer Capture Volume", 0x1d, 0, HDA_INPUT),
-       HDA_CODEC_MUTE("Front Mic Mixer Capture Switch", 0x1d, 0, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("Mic Mixer Capture Volume", 0x1d, 0x1, HDA_INPUT),
-       HDA_CODEC_MUTE("Mic Mixer Capture Switch", 0x1d, 0x1, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("Line In Mixer Capture Volume", 0x1d, 0x2, HDA_INPUT),
-       HDA_CODEC_MUTE("Line In Mixer Capture Switch", 0x1d, 0x2, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("DAC Mixer Capture Volume", 0x1d, 0x3, HDA_INPUT),
-       HDA_CODEC_MUTE("DAC Mixer Capture Switch", 0x1d, 0x3, HDA_INPUT),
-
-       HDA_CODEC_VOLUME("CD Mixer Capture Volume", 0x1d, 0x4, HDA_INPUT),
-       HDA_CODEC_MUTE("CD Mixer Capture Switch", 0x1d, 0x4, HDA_INPUT),
-       { } /* end */
-};
-
 
 static struct snd_kcontrol_new stac92hd71bxx_loopback[] = {
        STAC_ANALOG_LOOPBACK(0xFA0, 0x7A0, 2)
@@ -5188,20 +5057,15 @@ again:
                       "number of channels defaulting to DAC count\n");
                num_dacs = STAC92HD73_DAC_COUNT;
        }
+       spec->init = stac92hd73xx_core_init;
        switch (num_dacs) {
        case 0x3: /* 6 Channel */
-               spec->mixer = stac92hd73xx_6ch_mixer;
-               spec->init = stac92hd73xx_6ch_core_init;
                spec->aloopback_ctl = stac92hd73xx_6ch_loopback;
                break;
        case 0x4: /* 8 Channel */
-               spec->mixer = stac92hd73xx_8ch_mixer;
-               spec->init = stac92hd73xx_8ch_core_init;
                spec->aloopback_ctl = stac92hd73xx_8ch_loopback;
                break;
        case 0x5: /* 10 Channel */
-               spec->mixer = stac92hd73xx_10ch_mixer;
-               spec->init = stac92hd73xx_10ch_core_init;
                spec->aloopback_ctl = stac92hd73xx_10ch_loopback;
                break;
        }
@@ -5216,8 +5080,6 @@ again:
        spec->dmic_nids = stac92hd73xx_dmic_nids;
        spec->dmux_nids = stac92hd73xx_dmux_nids;
        spec->smux_nids = stac92hd73xx_smux_nids;
-       spec->amp_nids = stac92hd73xx_amp_nids;
-       spec->num_amps = ARRAY_SIZE(stac92hd73xx_amp_nids);
 
        spec->num_muxes = ARRAY_SIZE(stac92hd73xx_mux_nids);
        spec->num_adcs = ARRAY_SIZE(stac92hd73xx_adc_nids);
@@ -5235,13 +5097,8 @@ again:
        case STAC_DELL_M6_DMIC:
        case STAC_DELL_M6_BOTH:
                spec->num_smuxes = 0;
-               spec->mixer = &stac92hd73xx_6ch_mixer[DELL_M6_MIXER];
-               spec->amp_nids = &stac92hd73xx_amp_nids[DELL_M6_AMP];
                spec->eapd_switch = 0;
-               spec->num_amps = 1;
 
-               if (spec->board_config != STAC_DELL_EQ)
-                       spec->init = dell_m6_core_init;
                switch (spec->board_config) {
                case STAC_DELL_M6_AMIC: /* Analog Mics */
                        snd_hda_codec_set_pincfg(codec, 0x0b, 0x90A70170);