aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-06-21 04:59:12 -0400
committerTakashi Iwai <tiwai@suse.de>2009-06-21 04:59:12 -0400
commit47166281d2dc9daf7da9a5ad88491ae94366e852 (patch)
tree84cf6bb94284a411a68cb0f945bb8d6cf92a67c0
parent0b6306f69f1857f8883cbd81a5f60393db6a08fc (diff)
parentb1a914690c581f8f88b897d83a79b1c6eaf494c9 (diff)
Merge branch 'topic/hda' into for-linus
* topic/hda: ALSA: hda - Add model=6530g option ALSA: hda - Acer Inspire 6530G model for Realtek ALC888 ALSA: HDA - Correct trivial typos in comments. ALSA: HDA - Name-fixes in code (tagra/targa) ALSA: HDA - Add pci-quirk for MSI MS-7350 motherboard. ALSA: hda - Fix memory leak at codec creation
-rw-r--r--Documentation/sound/alsa/HD-Audio-Models.txt1
-rw-r--r--sound/pci/hda/hda_codec.c2
-rw-r--r--sound/pci/hda/patch_realtek.c134
3 files changed, 104 insertions, 33 deletions
diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt
index de8e10a94103..0d8d23581c44 100644
--- a/Documentation/sound/alsa/HD-Audio-Models.txt
+++ b/Documentation/sound/alsa/HD-Audio-Models.txt
@@ -139,6 +139,7 @@ ALC883/888
139 acer Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc) 139 acer Acer laptops (Travelmate 3012WTMi, Aspire 5600, etc)
140 acer-aspire Acer Aspire 9810 140 acer-aspire Acer Aspire 9810
141 acer-aspire-4930g Acer Aspire 4930G 141 acer-aspire-4930g Acer Aspire 4930G
142 acer-aspire-6530g Acer Aspire 6530G
142 acer-aspire-8930g Acer Aspire 8930G 143 acer-aspire-8930g Acer Aspire 8930G
143 medion Medion Laptops 144 medion Medion Laptops
144 medion-md2 Medion MD2 145 medion-md2 Medion MD2
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 562403a23488..462e2cedaa6a 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -972,8 +972,6 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr
972 snd_hda_codec_read(codec, nid, 0, 972 snd_hda_codec_read(codec, nid, 0,
973 AC_VERB_GET_SUBSYSTEM_ID, 0); 973 AC_VERB_GET_SUBSYSTEM_ID, 0);
974 } 974 }
975 if (bus->modelname)
976 codec->modelname = kstrdup(bus->modelname, GFP_KERNEL);
977 975
978 /* power-up all before initialization */ 976 /* power-up all before initialization */
979 hda_set_power_state(codec, 977 hda_set_power_state(codec,
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index d22b26068014..bf4b78a74a8f 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -224,6 +224,7 @@ enum {
224 ALC883_ACER, 224 ALC883_ACER,
225 ALC883_ACER_ASPIRE, 225 ALC883_ACER_ASPIRE,
226 ALC888_ACER_ASPIRE_4930G, 226 ALC888_ACER_ASPIRE_4930G,
227 ALC888_ACER_ASPIRE_6530G,
227 ALC888_ACER_ASPIRE_8930G, 228 ALC888_ACER_ASPIRE_8930G,
228 ALC883_MEDION, 229 ALC883_MEDION,
229 ALC883_MEDION_MD2, 230 ALC883_MEDION_MD2,
@@ -970,7 +971,7 @@ static void alc_automute_pin(struct hda_codec *codec)
970 } 971 }
971} 972}
972 973
973#if 0 /* it's broken in some acses -- temporarily disabled */ 974#if 0 /* it's broken in some cases -- temporarily disabled */
974static void alc_mic_automute(struct hda_codec *codec) 975static void alc_mic_automute(struct hda_codec *codec)
975{ 976{
976 struct alc_spec *spec = codec->spec; 977 struct alc_spec *spec = codec->spec;
@@ -1170,7 +1171,7 @@ static int alc_subsystem_id(struct hda_codec *codec,
1170 1171
1171 /* invalid SSID, check the special NID pin defcfg instead */ 1172 /* invalid SSID, check the special NID pin defcfg instead */
1172 /* 1173 /*
1173 * 31~30 : port conetcivity 1174 * 31~30 : port connectivity
1174 * 29~21 : reserve 1175 * 29~21 : reserve
1175 * 20 : PCBEEP input 1176 * 20 : PCBEEP input
1176 * 19~16 : Check sum (15:1) 1177 * 19~16 : Check sum (15:1)
@@ -1471,6 +1472,25 @@ static struct hda_verb alc888_acer_aspire_4930g_verbs[] = {
1471}; 1472};
1472 1473
1473/* 1474/*
1475 * ALC888 Acer Aspire 6530G model
1476 */
1477
1478static struct hda_verb alc888_acer_aspire_6530g_verbs[] = {
1479/* Bias voltage on for external mic port */
1480 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80},
1481/* Enable unsolicited event for HP jack */
1482 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
1483/* Enable speaker output */
1484 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
1485 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1486/* Enable headphone output */
1487 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP},
1488 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
1489 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00},
1490 { }
1491};
1492
1493/*
1474 * ALC889 Acer Aspire 8930G model 1494 * ALC889 Acer Aspire 8930G model
1475 */ 1495 */
1476 1496
@@ -1544,6 +1564,25 @@ static struct hda_input_mux alc888_2_capture_sources[2] = {
1544 } 1564 }
1545}; 1565};
1546 1566
1567static struct hda_input_mux alc888_acer_aspire_6530_sources[2] = {
1568 /* Interal mic only available on one ADC */
1569 {
1570 .num_items = 3,
1571 .items = {
1572 { "Ext Mic", 0x0 },
1573 { "CD", 0x4 },
1574 { "Int Mic", 0xb },
1575 },
1576 },
1577 {
1578 .num_items = 2,
1579 .items = {
1580 { "Ext Mic", 0x0 },
1581 { "CD", 0x4 },
1582 },
1583 }
1584};
1585
1547static struct hda_input_mux alc889_capture_sources[3] = { 1586static struct hda_input_mux alc889_capture_sources[3] = {
1548 /* Digital mic only available on first "ADC" */ 1587 /* Digital mic only available on first "ADC" */
1549 { 1588 {
@@ -6347,7 +6386,7 @@ static struct hda_channel_mode alc882_sixstack_modes[2] = {
6347}; 6386};
6348 6387
6349/* 6388/*
6350 * macbook pro ALC885 can switch LineIn to LineOut without loosing Mic 6389 * macbook pro ALC885 can switch LineIn to LineOut without losing Mic
6351 */ 6390 */
6352 6391
6353/* 6392/*
@@ -7047,7 +7086,7 @@ static struct hda_verb alc882_auto_init_verbs[] = {
7047#define alc882_loopbacks alc880_loopbacks 7086#define alc882_loopbacks alc880_loopbacks
7048#endif 7087#endif
7049 7088
7050/* pcm configuration: identiacal with ALC880 */ 7089/* pcm configuration: identical with ALC880 */
7051#define alc882_pcm_analog_playback alc880_pcm_analog_playback 7090#define alc882_pcm_analog_playback alc880_pcm_analog_playback
7052#define alc882_pcm_analog_capture alc880_pcm_analog_capture 7091#define alc882_pcm_analog_capture alc880_pcm_analog_capture
7053#define alc882_pcm_digital_playback alc880_pcm_digital_playback 7092#define alc882_pcm_digital_playback alc880_pcm_digital_playback
@@ -8068,7 +8107,7 @@ static struct snd_kcontrol_new alc883_fivestack_mixer[] = {
8068 { } /* end */ 8107 { } /* end */
8069}; 8108};
8070 8109
8071static struct snd_kcontrol_new alc883_tagra_mixer[] = { 8110static struct snd_kcontrol_new alc883_targa_mixer[] = {
8072 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 8111 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
8073 HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), 8112 HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
8074 HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT), 8113 HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
@@ -8088,7 +8127,7 @@ static struct snd_kcontrol_new alc883_tagra_mixer[] = {
8088 { } /* end */ 8127 { } /* end */
8089}; 8128};
8090 8129
8091static struct snd_kcontrol_new alc883_tagra_2ch_mixer[] = { 8130static struct snd_kcontrol_new alc883_targa_2ch_mixer[] = {
8092 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 8131 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
8093 HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), 8132 HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT),
8094 HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT), 8133 HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT),
@@ -8153,6 +8192,19 @@ static struct snd_kcontrol_new alc883_acer_aspire_mixer[] = {
8153 { } /* end */ 8192 { } /* end */
8154}; 8193};
8155 8194
8195static struct snd_kcontrol_new alc888_acer_aspire_6530_mixer[] = {
8196 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
8197 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
8198 HDA_CODEC_VOLUME("LFE Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
8199 HDA_BIND_MUTE("LFE Playback Switch", 0x0f, 2, HDA_INPUT),
8200 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
8201 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
8202 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
8203 HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT),
8204 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
8205 { } /* end */
8206};
8207
8156static struct snd_kcontrol_new alc888_lenovo_sky_mixer[] = { 8208static struct snd_kcontrol_new alc888_lenovo_sky_mixer[] = {
8157 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 8209 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
8158 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), 8210 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
@@ -8417,7 +8469,7 @@ static struct hda_verb alc883_2ch_fujitsu_pi2515_verbs[] = {
8417 { } /* end */ 8469 { } /* end */
8418}; 8470};
8419 8471
8420static struct hda_verb alc883_tagra_verbs[] = { 8472static struct hda_verb alc883_targa_verbs[] = {
8421 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, 8473 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
8422 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, 8474 {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
8423 8475
@@ -8626,8 +8678,8 @@ static void alc883_medion_md2_init_hook(struct hda_codec *codec)
8626} 8678}
8627 8679
8628/* toggle speaker-output according to the hp-jack state */ 8680/* toggle speaker-output according to the hp-jack state */
8629#define alc883_tagra_init_hook alc882_targa_init_hook 8681#define alc883_targa_init_hook alc882_targa_init_hook
8630#define alc883_tagra_unsol_event alc882_targa_unsol_event 8682#define alc883_targa_unsol_event alc882_targa_unsol_event
8631 8683
8632static void alc883_clevo_m720_mic_automute(struct hda_codec *codec) 8684static void alc883_clevo_m720_mic_automute(struct hda_codec *codec)
8633{ 8685{
@@ -8957,7 +9009,7 @@ static void alc889A_mb31_unsol_event(struct hda_codec *codec, unsigned int res)
8957#define alc883_loopbacks alc880_loopbacks 9009#define alc883_loopbacks alc880_loopbacks
8958#endif 9010#endif
8959 9011
8960/* pcm configuration: identiacal with ALC880 */ 9012/* pcm configuration: identical with ALC880 */
8961#define alc883_pcm_analog_playback alc880_pcm_analog_playback 9013#define alc883_pcm_analog_playback alc880_pcm_analog_playback
8962#define alc883_pcm_analog_capture alc880_pcm_analog_capture 9014#define alc883_pcm_analog_capture alc880_pcm_analog_capture
8963#define alc883_pcm_analog_alt_capture alc880_pcm_analog_alt_capture 9015#define alc883_pcm_analog_alt_capture alc880_pcm_analog_alt_capture
@@ -8978,6 +9030,7 @@ static const char *alc883_models[ALC883_MODEL_LAST] = {
8978 [ALC883_ACER] = "acer", 9030 [ALC883_ACER] = "acer",
8979 [ALC883_ACER_ASPIRE] = "acer-aspire", 9031 [ALC883_ACER_ASPIRE] = "acer-aspire",
8980 [ALC888_ACER_ASPIRE_4930G] = "acer-aspire-4930g", 9032 [ALC888_ACER_ASPIRE_4930G] = "acer-aspire-4930g",
9033 [ALC888_ACER_ASPIRE_6530G] = "acer-aspire-6530g",
8981 [ALC888_ACER_ASPIRE_8930G] = "acer-aspire-8930g", 9034 [ALC888_ACER_ASPIRE_8930G] = "acer-aspire-8930g",
8982 [ALC883_MEDION] = "medion", 9035 [ALC883_MEDION] = "medion",
8983 [ALC883_MEDION_MD2] = "medion-md2", 9036 [ALC883_MEDION_MD2] = "medion-md2",
@@ -9021,7 +9074,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
9021 SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G", 9074 SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G",
9022 ALC888_ACER_ASPIRE_4930G), 9075 ALC888_ACER_ASPIRE_4930G),
9023 SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G", 9076 SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
9024 ALC888_ACER_ASPIRE_4930G), 9077 ALC888_ACER_ASPIRE_6530G),
9025 /* default Acer -- disabled as it causes more problems. 9078 /* default Acer -- disabled as it causes more problems.
9026 * model=auto should work fine now 9079 * model=auto should work fine now
9027 */ 9080 */
@@ -9069,6 +9122,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
9069 SND_PCI_QUIRK(0x1462, 0x7267, "MSI", ALC883_3ST_6ch_DIG), 9122 SND_PCI_QUIRK(0x1462, 0x7267, "MSI", ALC883_3ST_6ch_DIG),
9070 SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG), 9123 SND_PCI_QUIRK(0x1462, 0x7280, "MSI", ALC883_6ST_DIG),
9071 SND_PCI_QUIRK(0x1462, 0x7327, "MSI", ALC883_6ST_DIG), 9124 SND_PCI_QUIRK(0x1462, 0x7327, "MSI", ALC883_6ST_DIG),
9125 SND_PCI_QUIRK(0x1462, 0x7350, "MSI", ALC883_6ST_DIG),
9072 SND_PCI_QUIRK(0x1462, 0xa422, "MSI", ALC883_TARGA_2ch_DIG), 9126 SND_PCI_QUIRK(0x1462, 0xa422, "MSI", ALC883_TARGA_2ch_DIG),
9073 SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG), 9127 SND_PCI_QUIRK(0x147b, 0x1083, "Abit IP35-PRO", ALC883_6ST_DIG),
9074 SND_PCI_QUIRK(0x1558, 0x0721, "Clevo laptop M720R", ALC883_CLEVO_M720), 9128 SND_PCI_QUIRK(0x1558, 0x0721, "Clevo laptop M720R", ALC883_CLEVO_M720),
@@ -9165,8 +9219,8 @@ static struct alc_config_preset alc883_presets[] = {
9165 .input_mux = &alc883_capture_source, 9219 .input_mux = &alc883_capture_source,
9166 }, 9220 },
9167 [ALC883_TARGA_DIG] = { 9221 [ALC883_TARGA_DIG] = {
9168 .mixers = { alc883_tagra_mixer, alc883_chmode_mixer }, 9222 .mixers = { alc883_targa_mixer, alc883_chmode_mixer },
9169 .init_verbs = { alc883_init_verbs, alc883_tagra_verbs}, 9223 .init_verbs = { alc883_init_verbs, alc883_targa_verbs},
9170 .num_dacs = ARRAY_SIZE(alc883_dac_nids), 9224 .num_dacs = ARRAY_SIZE(alc883_dac_nids),
9171 .dac_nids = alc883_dac_nids, 9225 .dac_nids = alc883_dac_nids,
9172 .dig_out_nid = ALC883_DIGOUT_NID, 9226 .dig_out_nid = ALC883_DIGOUT_NID,
@@ -9174,12 +9228,12 @@ static struct alc_config_preset alc883_presets[] = {
9174 .channel_mode = alc883_3ST_6ch_modes, 9228 .channel_mode = alc883_3ST_6ch_modes,
9175 .need_dac_fix = 1, 9229 .need_dac_fix = 1,
9176 .input_mux = &alc883_capture_source, 9230 .input_mux = &alc883_capture_source,
9177 .unsol_event = alc883_tagra_unsol_event, 9231 .unsol_event = alc883_targa_unsol_event,
9178 .init_hook = alc883_tagra_init_hook, 9232 .init_hook = alc883_targa_init_hook,
9179 }, 9233 },
9180 [ALC883_TARGA_2ch_DIG] = { 9234 [ALC883_TARGA_2ch_DIG] = {
9181 .mixers = { alc883_tagra_2ch_mixer}, 9235 .mixers = { alc883_targa_2ch_mixer},
9182 .init_verbs = { alc883_init_verbs, alc883_tagra_verbs}, 9236 .init_verbs = { alc883_init_verbs, alc883_targa_verbs},
9183 .num_dacs = ARRAY_SIZE(alc883_dac_nids), 9237 .num_dacs = ARRAY_SIZE(alc883_dac_nids),
9184 .dac_nids = alc883_dac_nids, 9238 .dac_nids = alc883_dac_nids,
9185 .adc_nids = alc883_adc_nids_alt, 9239 .adc_nids = alc883_adc_nids_alt,
@@ -9188,13 +9242,13 @@ static struct alc_config_preset alc883_presets[] = {
9188 .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), 9242 .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
9189 .channel_mode = alc883_3ST_2ch_modes, 9243 .channel_mode = alc883_3ST_2ch_modes,
9190 .input_mux = &alc883_capture_source, 9244 .input_mux = &alc883_capture_source,
9191 .unsol_event = alc883_tagra_unsol_event, 9245 .unsol_event = alc883_targa_unsol_event,
9192 .init_hook = alc883_tagra_init_hook, 9246 .init_hook = alc883_targa_init_hook,
9193 }, 9247 },
9194 [ALC883_TARGA_8ch_DIG] = { 9248 [ALC883_TARGA_8ch_DIG] = {
9195 .mixers = { alc883_base_mixer, alc883_chmode_mixer }, 9249 .mixers = { alc883_base_mixer, alc883_chmode_mixer },
9196 .init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs, 9250 .init_verbs = { alc883_init_verbs, alc880_gpio3_init_verbs,
9197 alc883_tagra_verbs }, 9251 alc883_targa_verbs },
9198 .num_dacs = ARRAY_SIZE(alc883_dac_nids), 9252 .num_dacs = ARRAY_SIZE(alc883_dac_nids),
9199 .dac_nids = alc883_dac_nids, 9253 .dac_nids = alc883_dac_nids,
9200 .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev), 9254 .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev),
@@ -9206,8 +9260,8 @@ static struct alc_config_preset alc883_presets[] = {
9206 .channel_mode = alc883_4ST_8ch_modes, 9260 .channel_mode = alc883_4ST_8ch_modes,
9207 .need_dac_fix = 1, 9261 .need_dac_fix = 1,
9208 .input_mux = &alc883_capture_source, 9262 .input_mux = &alc883_capture_source,
9209 .unsol_event = alc883_tagra_unsol_event, 9263 .unsol_event = alc883_targa_unsol_event,
9210 .init_hook = alc883_tagra_init_hook, 9264 .init_hook = alc883_targa_init_hook,
9211 }, 9265 },
9212 [ALC883_ACER] = { 9266 [ALC883_ACER] = {
9213 .mixers = { alc883_base_mixer }, 9267 .mixers = { alc883_base_mixer },
@@ -9255,6 +9309,24 @@ static struct alc_config_preset alc883_presets[] = {
9255 .unsol_event = alc_automute_amp_unsol_event, 9309 .unsol_event = alc_automute_amp_unsol_event,
9256 .init_hook = alc888_acer_aspire_4930g_init_hook, 9310 .init_hook = alc888_acer_aspire_4930g_init_hook,
9257 }, 9311 },
9312 [ALC888_ACER_ASPIRE_6530G] = {
9313 .mixers = { alc888_acer_aspire_6530_mixer },
9314 .init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs,
9315 alc888_acer_aspire_6530g_verbs },
9316 .num_dacs = ARRAY_SIZE(alc883_dac_nids),
9317 .dac_nids = alc883_dac_nids,
9318 .num_adc_nids = ARRAY_SIZE(alc883_adc_nids_rev),
9319 .adc_nids = alc883_adc_nids_rev,
9320 .capsrc_nids = alc883_capsrc_nids_rev,
9321 .dig_out_nid = ALC883_DIGOUT_NID,
9322 .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes),
9323 .channel_mode = alc883_3ST_2ch_modes,
9324 .num_mux_defs =
9325 ARRAY_SIZE(alc888_2_capture_sources),
9326 .input_mux = alc888_acer_aspire_6530_sources,
9327 .unsol_event = alc_automute_amp_unsol_event,
9328 .init_hook = alc888_acer_aspire_4930g_init_hook,
9329 },
9258 [ALC888_ACER_ASPIRE_8930G] = { 9330 [ALC888_ACER_ASPIRE_8930G] = {
9259 .mixers = { alc888_base_mixer, 9331 .mixers = { alc888_base_mixer,
9260 alc883_chmode_mixer }, 9332 alc883_chmode_mixer },
@@ -9361,7 +9433,7 @@ static struct alc_config_preset alc883_presets[] = {
9361 .init_hook = alc888_lenovo_ms7195_front_automute, 9433 .init_hook = alc888_lenovo_ms7195_front_automute,
9362 }, 9434 },
9363 [ALC883_HAIER_W66] = { 9435 [ALC883_HAIER_W66] = {
9364 .mixers = { alc883_tagra_2ch_mixer}, 9436 .mixers = { alc883_targa_2ch_mixer},
9365 .init_verbs = { alc883_init_verbs, alc883_haier_w66_verbs}, 9437 .init_verbs = { alc883_init_verbs, alc883_haier_w66_verbs},
9366 .num_dacs = ARRAY_SIZE(alc883_dac_nids), 9438 .num_dacs = ARRAY_SIZE(alc883_dac_nids),
9367 .dac_nids = alc883_dac_nids, 9439 .dac_nids = alc883_dac_nids,
@@ -11131,7 +11203,7 @@ static struct hda_verb alc262_toshiba_rx1_unsol_verbs[] = {
11131#define alc262_loopbacks alc880_loopbacks 11203#define alc262_loopbacks alc880_loopbacks
11132#endif 11204#endif
11133 11205
11134/* pcm configuration: identiacal with ALC880 */ 11206/* pcm configuration: identical with ALC880 */
11135#define alc262_pcm_analog_playback alc880_pcm_analog_playback 11207#define alc262_pcm_analog_playback alc880_pcm_analog_playback
11136#define alc262_pcm_analog_capture alc880_pcm_analog_capture 11208#define alc262_pcm_analog_capture alc880_pcm_analog_capture
11137#define alc262_pcm_digital_playback alc880_pcm_digital_playback 11209#define alc262_pcm_digital_playback alc880_pcm_digital_playback
@@ -12286,7 +12358,7 @@ static void alc268_auto_init_mono_speaker_out(struct hda_codec *codec)
12286 AC_VERB_SET_AMP_GAIN_MUTE, dac_vol2); 12358 AC_VERB_SET_AMP_GAIN_MUTE, dac_vol2);
12287} 12359}
12288 12360
12289/* pcm configuration: identiacal with ALC880 */ 12361/* pcm configuration: identical with ALC880 */
12290#define alc268_pcm_analog_playback alc880_pcm_analog_playback 12362#define alc268_pcm_analog_playback alc880_pcm_analog_playback
12291#define alc268_pcm_analog_capture alc880_pcm_analog_capture 12363#define alc268_pcm_analog_capture alc880_pcm_analog_capture
12292#define alc268_pcm_analog_alt_capture alc880_pcm_analog_alt_capture 12364#define alc268_pcm_analog_alt_capture alc880_pcm_analog_alt_capture
@@ -13197,7 +13269,7 @@ static int alc269_auto_create_analog_input_ctls(struct alc_spec *spec,
13197#define alc269_loopbacks alc880_loopbacks 13269#define alc269_loopbacks alc880_loopbacks
13198#endif 13270#endif
13199 13271
13200/* pcm configuration: identiacal with ALC880 */ 13272/* pcm configuration: identical with ALC880 */
13201#define alc269_pcm_analog_playback alc880_pcm_analog_playback 13273#define alc269_pcm_analog_playback alc880_pcm_analog_playback
13202#define alc269_pcm_analog_capture alc880_pcm_analog_capture 13274#define alc269_pcm_analog_capture alc880_pcm_analog_capture
13203#define alc269_pcm_digital_playback alc880_pcm_digital_playback 13275#define alc269_pcm_digital_playback alc880_pcm_digital_playback
@@ -14059,7 +14131,7 @@ static void alc861_toshiba_unsol_event(struct hda_codec *codec,
14059 alc861_toshiba_automute(codec); 14131 alc861_toshiba_automute(codec);
14060} 14132}
14061 14133
14062/* pcm configuration: identiacal with ALC880 */ 14134/* pcm configuration: identical with ALC880 */
14063#define alc861_pcm_analog_playback alc880_pcm_analog_playback 14135#define alc861_pcm_analog_playback alc880_pcm_analog_playback
14064#define alc861_pcm_analog_capture alc880_pcm_analog_capture 14136#define alc861_pcm_analog_capture alc880_pcm_analog_capture
14065#define alc861_pcm_digital_playback alc880_pcm_digital_playback 14137#define alc861_pcm_digital_playback alc880_pcm_digital_playback
@@ -14582,7 +14654,7 @@ static hda_nid_t alc861vd_dac_nids[4] = {
14582 14654
14583/* dac_nids for ALC660vd are in a different order - according to 14655/* dac_nids for ALC660vd are in a different order - according to
14584 * Realtek's driver. 14656 * Realtek's driver.
14585 * This should probably tesult in a different mixer for 6stack models 14657 * This should probably result in a different mixer for 6stack models
14586 * of ALC660vd codecs, but for now there is only 3stack mixer 14658 * of ALC660vd codecs, but for now there is only 3stack mixer
14587 * - and it is the same as in 861vd. 14659 * - and it is the same as in 861vd.
14588 * adc_nids in ALC660vd are (is) the same as in 861vd 14660 * adc_nids in ALC660vd are (is) the same as in 861vd
@@ -15027,7 +15099,7 @@ static void alc861vd_dallas_init_hook(struct hda_codec *codec)
15027#define alc861vd_loopbacks alc880_loopbacks 15099#define alc861vd_loopbacks alc880_loopbacks
15028#endif 15100#endif
15029 15101
15030/* pcm configuration: identiacal with ALC880 */ 15102/* pcm configuration: identical with ALC880 */
15031#define alc861vd_pcm_analog_playback alc880_pcm_analog_playback 15103#define alc861vd_pcm_analog_playback alc880_pcm_analog_playback
15032#define alc861vd_pcm_analog_capture alc880_pcm_analog_capture 15104#define alc861vd_pcm_analog_capture alc880_pcm_analog_capture
15033#define alc861vd_pcm_digital_playback alc880_pcm_digital_playback 15105#define alc861vd_pcm_digital_playback alc880_pcm_digital_playback
@@ -15206,7 +15278,7 @@ static void alc861vd_auto_init_hp_out(struct hda_codec *codec)
15206 hda_nid_t pin; 15278 hda_nid_t pin;
15207 15279
15208 pin = spec->autocfg.hp_pins[0]; 15280 pin = spec->autocfg.hp_pins[0];
15209 if (pin) /* connect to front and use dac 0 */ 15281 if (pin) /* connect to front and use dac 0 */
15210 alc861vd_auto_set_output_and_unmute(codec, pin, PIN_HP, 0); 15282 alc861vd_auto_set_output_and_unmute(codec, pin, PIN_HP, 0);
15211 pin = spec->autocfg.speaker_pins[0]; 15283 pin = spec->autocfg.speaker_pins[0];
15212 if (pin) 15284 if (pin)
@@ -16669,7 +16741,7 @@ static struct snd_kcontrol_new alc272_nc10_mixer[] = {
16669#endif 16741#endif
16670 16742
16671 16743
16672/* pcm configuration: identiacal with ALC880 */ 16744/* pcm configuration: identical with ALC880 */
16673#define alc662_pcm_analog_playback alc880_pcm_analog_playback 16745#define alc662_pcm_analog_playback alc880_pcm_analog_playback
16674#define alc662_pcm_analog_capture alc880_pcm_analog_capture 16746#define alc662_pcm_analog_capture alc880_pcm_analog_capture
16675#define alc662_pcm_digital_playback alc880_pcm_digital_playback 16747#define alc662_pcm_digital_playback alc880_pcm_digital_playback