aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_realtek.c
diff options
context:
space:
mode:
authorTobin Davis <tdavis@dsl-only.net>2007-02-07 10:04:25 -0500
committerJaroslav Kysela <perex@suse.cz>2007-02-09 03:04:00 -0500
commit2cf9f0fc69358e15e78f936c220cfe8aa208111d (patch)
treeedadf5589860e7d99ff76ad84e3106d67422c7c7 /sound/pci/hda/patch_realtek.c
parent288e5c35f96fefb6c5e0dc8838834c94cff616f6 (diff)
[ALSA] hda-codec - Add support for Fujitsu PI1556 Realtek ALC880
This patch adds support for the Fujitsu PI1556 laptop. Issue: Volume knob on system maxes out lower than alsamixer (0x35 vs 0x40). Everything else works, and audio quality is good at 0x35. Signed-off-by: Tobin Davis <tdavis@dsl-only.net> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r--sound/pci/hda/patch_realtek.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 583295deaecd..145682b78071 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -52,6 +52,7 @@ enum {
52 ALC880_ASUS_DIG, 52 ALC880_ASUS_DIG,
53 ALC880_ASUS_W1V, 53 ALC880_ASUS_W1V,
54 ALC880_ASUS_DIG2, 54 ALC880_ASUS_DIG2,
55 ALC880_FUJITSU,
55 ALC880_UNIWILL_DIG, 56 ALC880_UNIWILL_DIG,
56 ALC880_UNIWILL, 57 ALC880_UNIWILL,
57 ALC880_UNIWILL_P53, 58 ALC880_UNIWILL_P53,
@@ -1073,6 +1074,20 @@ static struct snd_kcontrol_new alc880_uniwill_mixer[] = {
1073 { } /* end */ 1074 { } /* end */
1074}; 1075};
1075 1076
1077static struct snd_kcontrol_new alc880_fujitsu_mixer[] = {
1078 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
1079 HDA_BIND_MUTE("Headphone Playback Switch", 0x0c, 2, HDA_INPUT),
1080 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
1081 HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT),
1082 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
1083 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
1084 HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
1085 HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
1086 HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
1087 HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
1088 { } /* end */
1089};
1090
1076static struct snd_kcontrol_new alc880_uniwill_p53_mixer[] = { 1091static struct snd_kcontrol_new alc880_uniwill_p53_mixer[] = {
1077 HDA_CODEC_VOLUME("HPhone Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 1092 HDA_CODEC_VOLUME("HPhone Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
1078 HDA_BIND_MUTE("HPhone Playback Switch", 0x0c, 2, HDA_INPUT), 1093 HDA_BIND_MUTE("HPhone Playback Switch", 0x0c, 2, HDA_INPUT),
@@ -1388,6 +1403,11 @@ static struct hda_verb alc880_uniwill_p53_init_verbs[] = {
1388 { } 1403 { }
1389}; 1404};
1390 1405
1406static struct hda_verb alc880_beep_init_verbs[] = {
1407 { 0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(5) },
1408 { }
1409};
1410
1391/* toggle speaker-output according to the hp-jack state */ 1411/* toggle speaker-output according to the hp-jack state */
1392static void alc880_uniwill_automute(struct hda_codec *codec) 1412static void alc880_uniwill_automute(struct hda_codec *codec)
1393{ 1413{
@@ -2357,6 +2377,8 @@ static const char *alc880_models[ALC880_MODEL_LAST] = {
2357 [ALC880_ASUS_DIG] = "asus-dig", 2377 [ALC880_ASUS_DIG] = "asus-dig",
2358 [ALC880_ASUS_DIG2] = "asus-dig2", 2378 [ALC880_ASUS_DIG2] = "asus-dig2",
2359 [ALC880_UNIWILL_DIG] = "uniwill", 2379 [ALC880_UNIWILL_DIG] = "uniwill",
2380 [ALC880_UNIWILL_P53] = "uniwill-p53",
2381 [ALC880_FUJITSU] = "fujitsu",
2360 [ALC880_F1734] = "F1734", 2382 [ALC880_F1734] = "F1734",
2361 [ALC880_LG] = "lg", 2383 [ALC880_LG] = "lg",
2362 [ALC880_LG_LW] = "lg-lw", 2384 [ALC880_LG_LW] = "lg-lw",
@@ -2427,6 +2449,7 @@ static struct snd_pci_quirk alc880_cfg_tbl[] = {
2427 SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG), 2449 SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG),
2428 SND_PCI_QUIRK(0x1734, 0x10ac, "FSC", ALC880_UNIWILL), 2450 SND_PCI_QUIRK(0x1734, 0x10ac, "FSC", ALC880_UNIWILL),
2429 SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734), 2451 SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734),
2452 SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU),
2430 2453
2431 SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_LG), 2454 SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_LG),
2432 SND_PCI_QUIRK(0x1854, 0x0068, "LG w1", ALC880_LG), 2455 SND_PCI_QUIRK(0x1854, 0x0068, "LG w1", ALC880_LG),
@@ -2635,7 +2658,21 @@ static struct alc_config_preset alc880_presets[] = {
2635 .num_dacs = ARRAY_SIZE(alc880_asus_dac_nids), 2658 .num_dacs = ARRAY_SIZE(alc880_asus_dac_nids),
2636 .dac_nids = alc880_asus_dac_nids, 2659 .dac_nids = alc880_asus_dac_nids,
2637 .num_channel_mode = ARRAY_SIZE(alc880_w810_modes), 2660 .num_channel_mode = ARRAY_SIZE(alc880_w810_modes),
2638 .channel_mode = alc880_w810_modes, 2661 .channel_mode = alc880_threestack_modes,
2662 .input_mux = &alc880_capture_source,
2663 .unsol_event = alc880_uniwill_p53_unsol_event,
2664 .init_hook = alc880_uniwill_p53_hp_automute,
2665 },
2666 [ALC880_FUJITSU] = {
2667 .mixers = { alc880_fujitsu_mixer,
2668 alc880_pcbeep_mixer, },
2669 .init_verbs = { alc880_volume_init_verbs,
2670 alc880_uniwill_p53_init_verbs,
2671 alc880_beep_init_verbs },
2672 .num_dacs = ARRAY_SIZE(alc880_dac_nids),
2673 .dac_nids = alc880_dac_nids,
2674 .num_channel_mode = ARRAY_SIZE(alc880_2_jack_modes),
2675 .channel_mode = alc880_2_jack_modes,
2639 .input_mux = &alc880_capture_source, 2676 .input_mux = &alc880_capture_source,
2640 .unsol_event = alc880_uniwill_p53_unsol_event, 2677 .unsol_event = alc880_uniwill_p53_unsol_event,
2641 .init_hook = alc880_uniwill_p53_hp_automute, 2678 .init_hook = alc880_uniwill_p53_hp_automute,