diff options
author | Tobin Davis <tdavis@dsl-only.net> | 2007-02-07 10:04:25 -0500 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2007-02-09 03:04:00 -0500 |
commit | 2cf9f0fc69358e15e78f936c220cfe8aa208111d (patch) | |
tree | edadf5589860e7d99ff76ad84e3106d67422c7c7 | |
parent | 288e5c35f96fefb6c5e0dc8838834c94cff616f6 (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>
-rw-r--r-- | Documentation/sound/alsa/ALSA-Configuration.txt | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 39 |
2 files changed, 39 insertions, 1 deletions
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt index 4f82145a9390..c30ff1bb2d10 100644 --- a/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/Documentation/sound/alsa/ALSA-Configuration.txt | |||
@@ -785,6 +785,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
785 | asus-dig ASUS with SPDIF out | 785 | asus-dig ASUS with SPDIF out |
786 | asus-dig2 ASUS with SPDIF out (using GPIO2) | 786 | asus-dig2 ASUS with SPDIF out (using GPIO2) |
787 | uniwill 3-jack | 787 | uniwill 3-jack |
788 | fujitsu Fujitsu Laptops (Pi1536) | ||
788 | F1734 2-jack | 789 | F1734 2-jack |
789 | lg LG laptop (m1 express dual) | 790 | lg LG laptop (m1 express dual) |
790 | lg-lw LG LW20/LW25 laptop | 791 | lg-lw LG LW20/LW25 laptop |
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 | ||
1077 | static 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 | |||
1076 | static struct snd_kcontrol_new alc880_uniwill_p53_mixer[] = { | 1091 | static 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 | ||
1406 | static 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 */ |
1392 | static void alc880_uniwill_automute(struct hda_codec *codec) | 1412 | static 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, |