diff options
-rw-r--r-- | Documentation/sound/alsa/HD-Audio-Models.txt | 1 | ||||
-rw-r--r-- | sound/pci/hda/alc880_quirks.c | 84 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 13 |
3 files changed, 14 insertions, 84 deletions
diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt index 6387b41f35af..24df3ab41932 100644 --- a/Documentation/sound/alsa/HD-Audio-Models.txt +++ b/Documentation/sound/alsa/HD-Audio-Models.txt | |||
@@ -8,7 +8,6 @@ ALC880 | |||
8 | 5stack-digout 5-jack in back, 2-jack in front, a SPDIF out | 8 | 5stack-digout 5-jack in back, 2-jack in front, a SPDIF out |
9 | 6stack 6-jack in back, 2-jack in front | 9 | 6stack 6-jack in back, 2-jack in front |
10 | 6stack-digout 6-jack with a SPDIF out | 10 | 6stack-digout 6-jack with a SPDIF out |
11 | w810 3-jack | ||
12 | z71v 3-jack (HP shared SPDIF) | 11 | z71v 3-jack (HP shared SPDIF) |
13 | asus 3-jack (ASUS Mobo) | 12 | asus 3-jack (ASUS Mobo) |
14 | asus-w1v ASUS W1V | 13 | asus-w1v ASUS W1V |
diff --git a/sound/pci/hda/alc880_quirks.c b/sound/pci/hda/alc880_quirks.c index 3b88bc561e16..41aecda30a87 100644 --- a/sound/pci/hda/alc880_quirks.c +++ b/sound/pci/hda/alc880_quirks.c | |||
@@ -10,7 +10,6 @@ enum { | |||
10 | ALC880_3ST_DIG, | 10 | ALC880_3ST_DIG, |
11 | ALC880_5ST, | 11 | ALC880_5ST, |
12 | ALC880_5ST_DIG, | 12 | ALC880_5ST_DIG, |
13 | ALC880_W810, | ||
14 | ALC880_Z71V, | 13 | ALC880_Z71V, |
15 | ALC880_6ST, | 14 | ALC880_6ST, |
16 | ALC880_6ST_DIG, | 15 | ALC880_6ST_DIG, |
@@ -226,56 +225,11 @@ static const struct snd_kcontrol_new alc880_six_stack_mixer[] = { | |||
226 | }; | 225 | }; |
227 | 226 | ||
228 | 227 | ||
229 | /* | ||
230 | * ALC880 W810 model | ||
231 | * | ||
232 | * W810 has rear IO for: | ||
233 | * Front (DAC 02) | ||
234 | * Surround (DAC 03) | ||
235 | * Center/LFE (DAC 04) | ||
236 | * Digital out (06) | ||
237 | * | ||
238 | * The system also has a pair of internal speakers, and a headphone jack. | ||
239 | * These are both connected to Line2 on the codec, hence to DAC 02. | ||
240 | * | ||
241 | * There is a variable resistor to control the speaker or headphone | ||
242 | * volume. This is a hardware-only device without a software API. | ||
243 | * | ||
244 | * Plugging headphones in will disable the internal speakers. This is | ||
245 | * implemented in hardware, not via the driver using jack sense. In | ||
246 | * a similar fashion, plugging into the rear socket marked "front" will | ||
247 | * disable both the speakers and headphones. | ||
248 | * | ||
249 | * For input, there's a microphone jack, and an "audio in" jack. | ||
250 | * These may not do anything useful with this driver yet, because I | ||
251 | * haven't setup any initialization verbs for these yet... | ||
252 | */ | ||
253 | |||
254 | static const hda_nid_t alc880_w810_dac_nids[3] = { | 228 | static const hda_nid_t alc880_w810_dac_nids[3] = { |
255 | /* front, rear/surround, clfe */ | 229 | /* front, rear/surround, clfe */ |
256 | 0x02, 0x03, 0x04 | 230 | 0x02, 0x03, 0x04 |
257 | }; | 231 | }; |
258 | 232 | ||
259 | /* fixed 6 channels */ | ||
260 | static const struct hda_channel_mode alc880_w810_modes[1] = { | ||
261 | { 6, NULL } | ||
262 | }; | ||
263 | |||
264 | /* Pin assignment: Front = 0x14, Surr = 0x15, CLFE = 0x16, HP = 0x1b */ | ||
265 | static const struct snd_kcontrol_new alc880_w810_base_mixer[] = { | ||
266 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
267 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | ||
268 | HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | ||
269 | HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT), | ||
270 | HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0, HDA_OUTPUT), | ||
271 | HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | ||
272 | HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT), | ||
273 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | ||
274 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
275 | { } /* end */ | ||
276 | }; | ||
277 | |||
278 | |||
279 | /* | 233 | /* |
280 | * Z710V model | 234 | * Z710V model |
281 | * | 235 | * |
@@ -594,27 +548,6 @@ static const struct hda_verb alc880_pin_5stack_init_verbs[] = { | |||
594 | }; | 548 | }; |
595 | 549 | ||
596 | /* | 550 | /* |
597 | * W810 pin configuration: | ||
598 | * front = 0x14, surround = 0x15, clfe = 0x16, HP = 0x1b | ||
599 | */ | ||
600 | static const struct hda_verb alc880_pin_w810_init_verbs[] = { | ||
601 | /* hphone/speaker input selector: front DAC */ | ||
602 | {0x13, AC_VERB_SET_CONNECT_SEL, 0x0}, | ||
603 | |||
604 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
605 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
606 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
607 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
608 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
609 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
610 | |||
611 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
612 | {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
613 | |||
614 | { } | ||
615 | }; | ||
616 | |||
617 | /* | ||
618 | * Z71V pin configuration: | 551 | * Z71V pin configuration: |
619 | * Speaker-out = 0x14, HP = 0x15, Mic = 0x18, Line-in = 0x1a, Mic2 = 0x1b (?) | 552 | * Speaker-out = 0x14, HP = 0x15, Mic = 0x18, Line-in = 0x1a, Mic2 = 0x1b (?) |
620 | */ | 553 | */ |
@@ -1204,7 +1137,6 @@ static const char * const alc880_models[ALC880_MODEL_LAST] = { | |||
1204 | [ALC880_CLEVO] = "clevo", | 1137 | [ALC880_CLEVO] = "clevo", |
1205 | [ALC880_5ST] = "5stack", | 1138 | [ALC880_5ST] = "5stack", |
1206 | [ALC880_5ST_DIG] = "5stack-digout", | 1139 | [ALC880_5ST_DIG] = "5stack-digout", |
1207 | [ALC880_W810] = "w810", | ||
1208 | [ALC880_Z71V] = "z71v", | 1140 | [ALC880_Z71V] = "z71v", |
1209 | [ALC880_6ST] = "6stack", | 1141 | [ALC880_6ST] = "6stack", |
1210 | [ALC880_6ST_DIG] = "6stack-digout", | 1142 | [ALC880_6ST_DIG] = "6stack-digout", |
@@ -1223,7 +1155,6 @@ static const char * const alc880_models[ALC880_MODEL_LAST] = { | |||
1223 | }; | 1155 | }; |
1224 | 1156 | ||
1225 | static const struct snd_pci_quirk alc880_cfg_tbl[] = { | 1157 | static const struct snd_pci_quirk alc880_cfg_tbl[] = { |
1226 | SND_PCI_QUIRK(0x1019, 0x0f69, "Coeus G610P", ALC880_W810), | ||
1227 | SND_PCI_QUIRK(0x1019, 0xa880, "ECS", ALC880_5ST_DIG), | 1158 | SND_PCI_QUIRK(0x1019, 0xa880, "ECS", ALC880_5ST_DIG), |
1228 | SND_PCI_QUIRK(0x1019, 0xa884, "Acer APFV", ALC880_6ST), | 1159 | SND_PCI_QUIRK(0x1019, 0xa884, "Acer APFV", ALC880_6ST), |
1229 | SND_PCI_QUIRK(0x1025, 0x0070, "ULI", ALC880_3ST_DIG), | 1160 | SND_PCI_QUIRK(0x1025, 0x0070, "ULI", ALC880_3ST_DIG), |
@@ -1265,7 +1196,6 @@ static const struct snd_pci_quirk alc880_cfg_tbl[] = { | |||
1265 | SND_PCI_QUIRK(0x1584, 0x9054, "Uniwill", ALC880_F1734), | 1196 | SND_PCI_QUIRK(0x1584, 0x9054, "Uniwill", ALC880_F1734), |
1266 | SND_PCI_QUIRK(0x1584, 0x9070, "Uniwill", ALC880_UNIWILL), | 1197 | SND_PCI_QUIRK(0x1584, 0x9070, "Uniwill", ALC880_UNIWILL), |
1267 | SND_PCI_QUIRK(0x1584, 0x9077, "Uniwill P53", ALC880_UNIWILL_P53), | 1198 | SND_PCI_QUIRK(0x1584, 0x9077, "Uniwill P53", ALC880_UNIWILL_P53), |
1268 | SND_PCI_QUIRK(0x161f, 0x203d, "W810", ALC880_W810), | ||
1269 | SND_PCI_QUIRK(0x1695, 0x400d, "EPoX", ALC880_5ST_DIG), | 1199 | SND_PCI_QUIRK(0x1695, 0x400d, "EPoX", ALC880_5ST_DIG), |
1270 | SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG), | 1200 | SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG), |
1271 | SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734), | 1201 | SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734), |
@@ -1377,18 +1307,6 @@ static const struct alc_config_preset alc880_presets[] = { | |||
1377 | .channel_mode = alc880_sixstack_modes, | 1307 | .channel_mode = alc880_sixstack_modes, |
1378 | .input_mux = &alc880_6stack_capture_source, | 1308 | .input_mux = &alc880_6stack_capture_source, |
1379 | }, | 1309 | }, |
1380 | [ALC880_W810] = { | ||
1381 | .mixers = { alc880_w810_base_mixer }, | ||
1382 | .init_verbs = { alc880_volume_init_verbs, | ||
1383 | alc880_pin_w810_init_verbs, | ||
1384 | alc880_gpio2_init_verbs }, | ||
1385 | .num_dacs = ARRAY_SIZE(alc880_w810_dac_nids), | ||
1386 | .dac_nids = alc880_w810_dac_nids, | ||
1387 | .dig_out_nid = ALC880_DIGOUT_NID, | ||
1388 | .num_channel_mode = ARRAY_SIZE(alc880_w810_modes), | ||
1389 | .channel_mode = alc880_w810_modes, | ||
1390 | .input_mux = &alc880_capture_source, | ||
1391 | }, | ||
1392 | [ALC880_Z71V] = { | 1310 | [ALC880_Z71V] = { |
1393 | .mixers = { alc880_z71v_mixer }, | 1311 | .mixers = { alc880_z71v_mixer }, |
1394 | .init_verbs = { alc880_volume_init_verbs, | 1312 | .init_verbs = { alc880_volume_init_verbs, |
@@ -1499,7 +1417,7 @@ static const struct alc_config_preset alc880_presets[] = { | |||
1499 | alc880_uniwill_p53_init_verbs }, | 1417 | alc880_uniwill_p53_init_verbs }, |
1500 | .num_dacs = ARRAY_SIZE(alc880_asus_dac_nids), | 1418 | .num_dacs = ARRAY_SIZE(alc880_asus_dac_nids), |
1501 | .dac_nids = alc880_asus_dac_nids, | 1419 | .dac_nids = alc880_asus_dac_nids, |
1502 | .num_channel_mode = ARRAY_SIZE(alc880_w810_modes), | 1420 | .num_channel_mode = ARRAY_SIZE(alc880_threestack_modes), |
1503 | .channel_mode = alc880_threestack_modes, | 1421 | .channel_mode = alc880_threestack_modes, |
1504 | .input_mux = &alc880_capture_source, | 1422 | .input_mux = &alc880_capture_source, |
1505 | .unsol_event = alc880_uniwill_p53_unsol_event, | 1423 | .unsol_event = alc880_uniwill_p53_unsol_event, |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index a39146528c24..1cad6748e337 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -4405,6 +4405,7 @@ enum { | |||
4405 | ALC880_FIXUP_GPIO2, | 4405 | ALC880_FIXUP_GPIO2, |
4406 | ALC880_FIXUP_MEDION_RIM, | 4406 | ALC880_FIXUP_MEDION_RIM, |
4407 | ALC880_FIXUP_LG, | 4407 | ALC880_FIXUP_LG, |
4408 | ALC880_FIXUP_W810, | ||
4408 | }; | 4409 | }; |
4409 | 4410 | ||
4410 | static const struct alc_fixup alc880_fixups[] = { | 4411 | static const struct alc_fixup alc880_fixups[] = { |
@@ -4432,9 +4433,21 @@ static const struct alc_fixup alc880_fixups[] = { | |||
4432 | { } | 4433 | { } |
4433 | } | 4434 | } |
4434 | }, | 4435 | }, |
4436 | [ALC880_FIXUP_W810] = { | ||
4437 | .type = ALC_FIXUP_PINS, | ||
4438 | .v.pins = (const struct alc_pincfg[]) { | ||
4439 | /* disable bogus unused pins */ | ||
4440 | { 0x17, 0x411111f0 }, | ||
4441 | { } | ||
4442 | }, | ||
4443 | .chained = true, | ||
4444 | .chain_id = ALC880_FIXUP_GPIO2, | ||
4445 | }, | ||
4435 | }; | 4446 | }; |
4436 | 4447 | ||
4437 | static const struct snd_pci_quirk alc880_fixup_tbl[] = { | 4448 | static const struct snd_pci_quirk alc880_fixup_tbl[] = { |
4449 | SND_PCI_QUIRK(0x1019, 0x0f69, "Coeus G610P", ALC880_FIXUP_W810), | ||
4450 | SND_PCI_QUIRK(0x161f, 0x203d, "W810", ALC880_FIXUP_W810), | ||
4438 | SND_PCI_QUIRK(0x161f, 0x205d, "Medion Rim 2150", ALC880_FIXUP_MEDION_RIM), | 4451 | SND_PCI_QUIRK(0x161f, 0x205d, "Medion Rim 2150", ALC880_FIXUP_MEDION_RIM), |
4439 | SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_FIXUP_LG), | 4452 | SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_FIXUP_LG), |
4440 | SND_PCI_QUIRK(0x1854, 0x005f, "LG P1 Express", ALC880_FIXUP_LG), | 4453 | SND_PCI_QUIRK(0x1854, 0x005f, "LG P1 Express", ALC880_FIXUP_LG), |