]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - sound/pci/hda/patch_realtek.c
[ALSA] hda-codec - Bring the Vaio's RA826G HDA (82801) to life ...
[linux-2.6-omap-h63xx.git] / sound / pci / hda / patch_realtek.c
index bab89843d850be582cadf6ddc181a4f5d1f33f68..1218f1d1bf962f984b36727eaf3e39a38d8b3541 100644 (file)
@@ -40,6 +40,7 @@ enum {
        ALC880_W810,
        ALC880_Z71V,
        ALC880_AUTO,
+       ALC880_6ST,
        ALC880_6ST_DIG,
        ALC880_F1734,
        ALC880_ASUS,
@@ -119,6 +120,7 @@ struct alc_spec {
        unsigned int num_kctl_alloc, num_kctl_used;
        snd_kcontrol_new_t *kctl_alloc;
        struct hda_input_mux private_imux;
+       hda_nid_t private_dac_nids[4];
 };
 
 
@@ -685,6 +687,12 @@ static snd_kcontrol_new_t alc880_asus_w1v_mixer[] = {
        { } /* end */
 };
 
+/* additional mixers to alc880_asus_mixer */
+static snd_kcontrol_new_t alc880_pcbeep_mixer[] = {
+       HDA_CODEC_VOLUME("PC Speaker Playback Volume", 0x0b, 0x05, HDA_INPUT),
+       HDA_CODEC_MUTE("PC Speaker Playback Switch", 0x0b, 0x05, HDA_INPUT),
+       { } /* end */
+};
 
 /*
  * build control elements
@@ -1518,10 +1526,12 @@ static struct hda_board_config alc880_cfg_tbl[] = {
        /* Back 3 jack, front 2 jack (Internal add Aux-In) */
        { .pci_subvendor = 0x1025, .pci_subdevice = 0xe310, .config = ALC880_3ST },
        { .pci_subvendor = 0x104d, .pci_subdevice = 0x81d6, .config = ALC880_3ST }, 
+       { .pci_subvendor = 0x104d, .pci_subdevice = 0x81a0, .config = ALC880_3ST },
 
        /* Back 3 jack plus 1 SPDIF out jack, front 2 jack */
        { .modelname = "3stack-digout", .config = ALC880_3ST_DIG },
        { .pci_subvendor = 0x8086, .pci_subdevice = 0xe308, .config = ALC880_3ST_DIG },
+       { .pci_subvendor = 0x1025, .pci_subdevice = 0x0070, .config = ALC880_3ST_DIG },
 
        /* Back 3 jack plus 1 SPDIF out jack, front 2 jack (Internal add Aux-In)*/
        { .pci_subvendor = 0x8086, .pci_subdevice = 0xe305, .config = ALC880_3ST_DIG },
@@ -1547,9 +1557,10 @@ static struct hda_board_config alc880_cfg_tbl[] = {
        { .pci_subvendor = 0x8086, .pci_subdevice = 0xa100, .config = ALC880_5ST_DIG },
        { .pci_subvendor = 0x1565, .pci_subdevice = 0x8202, .config = ALC880_5ST_DIG },
        { .pci_subvendor = 0x1019, .pci_subdevice = 0xa880, .config = ALC880_5ST_DIG },
-       { .pci_subvendor = 0x1019, .pci_subdevice = 0xa884, .config = ALC880_5ST_DIG },
+       /* { .pci_subvendor = 0x1019, .pci_subdevice = 0xa884, .config = ALC880_5ST_DIG }, */ /* conflict with 6stack */
        { .pci_subvendor = 0x1695, .pci_subdevice = 0x400d, .config = ALC880_5ST_DIG },
-       { .pci_subvendor = 0x0000, .pci_subdevice = 0x8086, .config = ALC880_5ST_DIG },
+       /* note subvendor = 0 below */
+       /* { .pci_subvendor = 0x0000, .pci_subdevice = 0x8086, .config = ALC880_5ST_DIG }, */
 
        { .modelname = "w810", .config = ALC880_W810 },
        { .pci_subvendor = 0x161f, .pci_subdevice = 0x203d, .config = ALC880_W810 },
@@ -1557,7 +1568,10 @@ static struct hda_board_config alc880_cfg_tbl[] = {
        { .modelname = "z71v", .config = ALC880_Z71V },
        { .pci_subvendor = 0x1043, .pci_subdevice = 0x1964, .config = ALC880_Z71V },
 
-       { .modelname = "6statack-digout", .config = ALC880_6ST_DIG },
+       { .modelname = "6stack", .config = ALC880_6ST },
+       { .pci_subvendor = 0x1019, .pci_subdevice = 0xa884, .config = ALC880_6ST }, /* Acer APFV */
+
+       { .modelname = "6stack-digout", .config = ALC880_6ST_DIG },
        { .pci_subvendor = 0x2668, .pci_subdevice = 0x8086, .config = ALC880_6ST_DIG },
        { .pci_subvendor = 0x8086, .pci_subdevice = 0x2668, .config = ALC880_6ST_DIG },
        { .pci_subvendor = 0x1462, .pci_subdevice = 0x1150, .config = ALC880_6ST_DIG },
@@ -1644,6 +1658,15 @@ static struct alc_config_preset alc880_presets[] = {
                .channel_mode = alc880_fivestack_modes,
                .input_mux = &alc880_capture_source,
        },
+       [ALC880_6ST] = {
+               .mixers = { alc880_six_stack_mixer },
+               .init_verbs = { alc880_volume_init_verbs, alc880_pin_6stack_init_verbs },
+               .num_dacs = ARRAY_SIZE(alc880_6st_dac_nids),
+               .dac_nids = alc880_6st_dac_nids,
+               .num_channel_mode = ARRAY_SIZE(alc880_sixstack_modes),
+               .channel_mode = alc880_sixstack_modes,
+               .input_mux = &alc880_6stack_capture_source,
+       },
        [ALC880_6ST_DIG] = {
                .mixers = { alc880_six_stack_mixer },
                .init_verbs = { alc880_volume_init_verbs, alc880_pin_6stack_init_verbs },
@@ -1656,7 +1679,8 @@ static struct alc_config_preset alc880_presets[] = {
        },
        [ALC880_W810] = {
                .mixers = { alc880_w810_base_mixer },
-               .init_verbs = { alc880_volume_init_verbs, alc880_pin_w810_init_verbs },
+               .init_verbs = { alc880_volume_init_verbs, alc880_pin_w810_init_verbs,
+                               alc880_gpio2_init_verbs },
                .num_dacs = ARRAY_SIZE(alc880_w810_dac_nids),
                .dac_nids = alc880_w810_dac_nids,
                .dig_out_nid = ALC880_DIGOUT_NID,
@@ -1666,8 +1690,7 @@ static struct alc_config_preset alc880_presets[] = {
        },
        [ALC880_Z71V] = {
                .mixers = { alc880_z71v_mixer },
-               .init_verbs = { alc880_volume_init_verbs, alc880_pin_z71v_init_verbs,
-                               alc880_gpio2_init_verbs },
+               .init_verbs = { alc880_volume_init_verbs, alc880_pin_z71v_init_verbs },
                .num_dacs = ARRAY_SIZE(alc880_z71v_dac_nids),
                .dac_nids = alc880_z71v_dac_nids,
                .dig_out_nid = ALC880_DIGOUT_NID,
@@ -1719,7 +1742,7 @@ static struct alc_config_preset alc880_presets[] = {
                .input_mux = &alc880_capture_source,
        },
        [ALC880_UNIWILL_DIG] = {
-               .mixers = { alc880_asus_mixer },
+               .mixers = { alc880_asus_mixer, alc880_pcbeep_mixer },
                .init_verbs = { alc880_volume_init_verbs, alc880_pin_asus_init_verbs },
                .num_dacs = ARRAY_SIZE(alc880_asus_dac_nids),
                .dac_nids = alc880_asus_dac_nids,
@@ -1809,6 +1832,7 @@ static int alc880_auto_fill_dac_nids(struct alc_spec *spec, const struct auto_pi
        int i, j;
 
        memset(assigned, 0, sizeof(assigned));
+       spec->multiout.dac_nids = spec->private_dac_nids;
 
        /* check the pins hardwired to audio widget */
        for (i = 0; i < cfg->line_outs; i++) {