Fwd: Front speakers doesn't work in multichannel output, regression in ALC888
diff mbox

Message ID CAN8ccibvTO=yuE1MaE4m224oA6f3Dygx_T0Vrj3GySh=WduxcQ@mail.gmail.com
State New
Headers show

Commit Message

Raymond Yau July 11, 2015, 1:18 a.m. UTC
> >
> >
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/mixer/paths/analog-output-lineout.conf

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


  * 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,
     },

Patch
diff mbox

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