http://www.alsa-project.org/db/?f=30b3f0087374b914a20dbe20a618fb892a5d6fd5
Are there any offical specificaion ?
So far most review only mention stereo speakers and subwoofer, the
service
guide only show how to replace two internal speakers
Service manual mentions
"Dolby®-certified surround sound system with two built-in stereo
speakers and
one subwoofer supporting low-frequency effects"
so all additional channels what I'm hearing in Windows is emulated. I
hope
that it is clear now that my laptop has two internal speakers and one subwoofer.
https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/commit/sound/pc
i/hda?id=8e38395360844806041ea69ab9690f5f174bc40c
You need to define your 2.1 chmap if the subwoofer only use left channel
Compiling and running PulseAudio from git
http://colin.guthr.ie/2010/09/compiling-and-running-pulseaudio-from-git/
In Fedora 22 workaround with setting "Line out (front)" for 0x15 pin
doesn't
work.
Sound on my system is totally fucked up.
http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/modules/alsa/mixe...
Are you sure that it is alsa driver bug since pulseaudio seem not using line out jack to mute internal speakers ?
by adding new hint alt_config , you can use alt_config to select different set of pin config
diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c index 03b7399..683a0ab 100644 --- a/sound/pci/hda/hda_auto_parser.c +++ b/sound/pci/hda/hda_auto_parser.c @@ -952,6 +952,7 @@ void snd_hda_pick_fixup(struct hda_codec *codec, const struct snd_pci_quirk *q; int id = HDA_FIXUP_ID_NOT_SET; const char *name = NULL; + int i;
if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) return; @@ -966,6 +967,9 @@ void snd_hda_pick_fixup(struct hda_codec *codec, return; }
+ if (!snd_hda_get_int_hint(codec, "alt_config", &i)) + codec->alt_config = i; + if (codec->modelname && models) { while (models->name) { if (!strcmp(codec->modelname, models->name)) { diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 8e02cdf..f406835 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1914,6 +1914,31 @@ static void alc889_fixup_mba21_vref(struct hda_codec *codec, alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids)); }
+static void alc888_fixup_acer_aspire_4930g(struct hda_codec *codec, + const struct hda_fixup *fix, int action) +{ + struct hda_pintbl subwoofer_config[] = { + { 0x16, 0x90170111 }, /* internal subwoofer */ + {} + }; + struct hda_pintbl alt_config[] = { + { 0x15, 0x02014010}, + { 0x1a, 0x02014011}, + { 0x18, 0x02014012}, + {} + }; + snd_hda_apply_pincfgs(codec, subwoofer_config); + switch(codec->alt_config){ + case 1: + codec_info(codec, "5.1 External Speaker\n"); + snd_hda_apply_pincfgs(codec, alt_config); + break; + default: + codec_info(codec, "use [Hint]\nalt_config=1 for 5.1 External Speaker\n"); + break; + } +} + /* Don't take HP output as primary * Strangely, the speaker output doesn't work on Vaio Z and some Vaio * all-in-one desktop PCs (for example VGC-LN51JGB) through DAC 0x05 @@ -2048,12 +2073,8 @@ static const struct hda_fixup alc882_fixups[] = { .v.func = alc889_fixup_coef, }, [ALC882_FIXUP_ACER_ASPIRE_4930G] = { - .type = HDA_FIXUP_PINS, - .v.pins = (const struct hda_pintbl[]) { - { 0x16, 0x99130111 }, /* CLFE speaker */ - { 0x17, 0x99130112 }, /* surround speaker */ - { } - }, + .type = HDA_FIXUP_FUNC, + .v.func = alc888_fixup_acer_aspire_4930g, .chained = true, .chain_id = ALC882_FIXUP_GPIO1, },