Bug 65961

Summary: No subwoofer on Asus AIO ET2700inks-b011c
Product: Drivers Reporter: Michaël Becquet (neonlight)
Component: Sound(ALSA)Assignee: Jaroslav Kysela (perex)
Status: RESOLVED CODE_FIX    
Severity: normal CC: tiwai
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 3.11.6 Subsystem:
Regression: No Bisected commit-id:
Attachments: alsa-info.txt with subwoofer connect, all settings by default.
codecgraph
Patch to add a bass speaker pin
Simplified patch to add bass speaker pin

Description Michaël Becquet 2013-11-27 11:30:19 UTC
Created attachment 116421 [details]
alsa-info.txt with subwoofer connect, all settings by default.

Hello,

I own an Asus all-in-one pc with an external subwoofer connected on a dedicated stack.
I've tested all I've read from here and there (often Asus laptops models concerned) and I can say the subwoofer is connected on pin 0x16, so it is now playing with right channel. But now all I can do with pulse don't modify this fact. I don't know what to test now.

I ask myself another question : Alsa detects the used codec is ALC887-VD, but Asus windows driver for this pc is Realteak ALC663. Does this significate something ?
Comment 1 Takashi Iwai 2013-11-27 11:46:02 UTC
So, it's similar as other laptops, the LFE is assigned to the right channel white the left channel is dead?  Which pin config did you try?

The lack of channel map support in PA is an issue in PA, so there is no many thing the driver can do for now.

And, it's definitely ALC887 variants, if you look at the codec vendor id :)
Comment 2 Michaël Becquet 2013-11-27 12:44:41 UTC
Thanks for your help.

I've already tried things concerning Asus N55SF and other models, but the big difference is the codec used, so adding model=asus-mode-something is useless.

I've used hda-jack-retask to override and unmute pin 0x16.
So after that I have subwoofer playing right channel, left channel is playing ok.
Adding 2.1 support to pulse doesn't change anything for the remapping.

I've just generated a codecgraph if it can help.
Comment 3 Michaël Becquet 2013-11-27 12:48:04 UTC
Created attachment 116431 [details]
codecgraph
Comment 4 Takashi Iwai 2013-11-27 13:48:34 UTC
OK, then could you try the patch below?  You can remove all options for snd-hda-intel now.
Comment 5 Takashi Iwai 2013-11-27 13:49:05 UTC
Created attachment 116441 [details]
Patch to add a bass speaker pin
Comment 6 Michaël Becquet 2013-11-27 15:57:02 UTC
Thanks Takashi,

I'd like to apply the patch but I should have misunderstood something.

Tried to apply to my actual kernel source from openSuSe : error (I think it's normal).
Last version from git is 1.0.25 so I've downloaded latest kernel 3.12.1 and same error to apply the patch, it seems there is missing lines in realtek_patch.c.

patching file sound/pci/hda/patch_realtek.c
Hunk #1 succeeded at 1728 (offset -54 lines).
Hunk #2 succeeded at 1863 (offset -54 lines).
Hunk #3 succeeded at 2056 (offset -54 lines).
Hunk #4 succeeded at 2102 (offset -54 lines).
Hunk #5 FAILED at 4734.
Hunk #6 FAILED at 4942.
Hunk #7 FAILED at 4955.
3 out of 7 hunks FAILED -- saving rejects to file sound/pci/hda/patch_realtek.c.rej

patch_realtek.c.rej 

--- sound/pci/hda/patch_realtek.c
+++ sound/pci/hda/patch_realtek.c
@@ -4734,7 +4753,7 @@
 };
 
 /* override the 2.1 chmap */
-static void alc662_fixup_bass_chmap(struct hda_codec *codec,
+static void alc_fixup_bass_chmap(struct hda_codec *codec,
 				    const struct hda_fixup *fix, int action)
 {
 	if (action == HDA_FIXUP_ACT_BUILD) {
@@ -4942,7 +4961,7 @@
 	},
 	[ALC662_FIXUP_BASS_CHMAP] = {
 		.type = HDA_FIXUP_FUNC,
-		.v.func = alc662_fixup_bass_chmap,
+		.v.func = alc_fixup_bass_chmap,
 		.chained = true,
 		.chain_id = ALC662_FIXUP_ASUS_MODE4
 	},
@@ -4955,7 +4974,7 @@
 	},
 	[ALC662_FIXUP_BASS_1A_CHMAP] = {
 		.type = HDA_FIXUP_FUNC,
-		.v.func = alc662_fixup_bass_chmap,
+		.v.func = alc_fixup_bass_chmap,
 		.chained = true,
 		.chain_id = ALC662_FIXUP_BASS_1A,
 	},
Comment 7 Takashi Iwai 2013-11-27 16:06:28 UTC
OK, then try the following patch instead.  This should be applicable to 3.11 and 3.12.  This won't set up the channel mapping, but as PulseAudio doesn't take it account, it's more or less a subtle thing.
Comment 8 Takashi Iwai 2013-11-27 16:07:25 UTC
Created attachment 116451 [details]
Simplified patch to add bass speaker pin
Comment 9 Michaël Becquet 2013-11-28 13:52:23 UTC
Hello Takashi,

Tried your patch, compiled and installed whole sound.

So now I'm in the position I was when I override pin 0x16 with hda-jack-retask, subwoofer output with right channel.

Tested pulseaudio declarations as for Asus N55SF but same thing.

HDA Analyzer output:

Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  Control: name="Bass Speaker Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=1, idx=0, ofs=0
  Control: iface="card", name="Speaker Surround Phantom Jack", index=0, device=0
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals: [0x00 0x00]
  Pincap 0x00000036: IN OUT Detect Trigger
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=0x00, enabled=0
  Power: setting=D0, actual=D0
  Connection: 1
     0x0e

What can I do now ?
Comment 10 Takashi Iwai 2013-11-28 14:55:41 UTC
The LFE-only channel map support is included only from 3.13 and later.  This is the very first patch provides.

But, as already mentioned, it's basically a missing feature in PA that doesn't refer to the channel map, so there is nothing to do from the kernel side.

That being said, merging these fix patches would be the option for now here in this bugzilla.  The rest must be handled in PA side.

So I merged the patches (the simplified one for easier backport and the additional patch for the LFE-only chmap) in sound git tree.  It'll be included either in 3.13-rc2 or 3.13-rc3.