[alsa-devel] Surround speaker connection on Acer 8951G

Sergey 'Jin' Bostandzhyan jin at mediatomb.cc
Mon Nov 25 18:39:02 CET 2019


Hi Takashi,

sorry - it's me again about the Acer 8951G LFE speaker.

On Fri, Aug 30, 2019 at 01:45:10PM +0200, Sergey 'Jin' Bostandzhyan wrote:
> > > The below HDA_FIXUP_VERBS does the trick, so I do have all 6 speakers working, 
> > > finally!
> > > 
> > > {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x02}
> > 
> > Actually this must be paired with the corresponding bit of GPIO_DATA,
> > too.  Is the bit 0x02 of GPIO_DATA set or cleared?  Usually setting it
> > turns on the amp, but sometimes inverted.
> 
> If I understood everything correctly, then the bit is set, meaning that the
> GPIO signal is configured as output. I'll be honest, I exported the
> hda-analyzer setting as a python script (nice feature btw) and deducted the
> fixup verb setting from there (relevant part of the hda-analyzer export below):
> 
> def set(nid, verb, param):
>   verb = (nid << 24) | (verb << 8) | param
>   res = ioctl(FD, IOCTL_VERB_WRITE, struct.pack('II', verb, 0))  
> 
> set(0x01, 0x717,   0x02) # 0x01071702 (SET_GPIO_DIRECTION)

it seems I indeed missed something here regarding GPIO_DATA, I really am
not sure what the influence is, but after updating to Fedora 31 my LFE
stopped working, even with the self compiled 5.4-rc8 kernel which I am running
now (all the time before I was on Fedora 29 and I just backported my patch to 
5.2.x and compiled the modules outside the tree after being done with the 
patch submission).

So ultimately, it seems I now need to do the following in my fixup
(original commit was 00066e9733f629e536f6b7957de2ce11a85fe15a):

--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -8875,7 +8875,7 @@ static const struct hda_fixup alc662_fixups[] = {
                .v.verbs = (const struct hda_verb[]) {
                        {0x01, AC_VERB_SET_GPIO_MASK, 0x02},
                        {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x02},
-                       {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
+                       {0x01, AC_VERB_SET_GPIO_DATA, 0x02},
                        { }
                },
                .chained = true,

My question is: could something on the outside have influence on that? I am
really very, very sure that I have tested LFE on kernel 5.4-rc before 
submitting the original patch and it has been working as submitted.
Why did the behavior change now? What else could I have missed?

I guess I have to submit the above change again, but I would like to make
sure that I am not missing something else somewhere, something that could cause
a change of behavior yet again after some future update.

Kind regards,
Jin






More information about the Alsa-devel mailing list