Enable the subwoofer on Asus N551

The Asus N551 comes equipped with an external subwoofer, like a few other similar models.
Needless to say, the subwoofer doesn’t work in Linux out of the box.
Apparently, BIOS setup of the snd-hda-intel driver is only basic and the subwoofer amplifier is not connected to any codec output.
Searching the Net for a solution, I found a number of “fixes”, mainly in Arch or *buntu forums, but none worked satisfactorily in OpenSUSE (Tumbleweed, actually), maybe because of distribution, model or BIOS dependent details.
So I tweaked the fix found here and did what follows (with root privileges).

  1. Create file /etc/modprobe.d/50-asus-n551-hda-fix.conf which contains:

options snd-hda-intel patch=asus-n551-hda-fix.fw,asus-n551-hda-fix.fw

  1. Create file /lib/firmware/asus-n551-hda-fix.fw which contains:

[codec]
0x10ec0668 0x104313bf 0

[model]
asus-mode8

[pincfg]
0x1a 0x90170150

The first block addresses the Realtek ALC668 codec that drives the internal speakers.
The second identifies the correct setup for the sound board in the N551 (activating also the internal “capture” microphone, by the way).
The third connects the subwoofer jack to the “internal speaker” output of the codec.

  1. Reboot and have a lot of fun with OpenSUSE, the N551 with subwoofer and your favourite music!

The subwoofer acts as a “Right speaker” in Stereo mode, as a “Subwoofer” in 2.1 mode (but you need a genuine 2.1 source, the codec won’t synthesise it for you), and as a “Rear Right speaker” in 4.0 mode.

This was tested with a N551JW, BIOS rev. 207, openSUSE 20150819 (Tumbleweed) (x86_64) with Gnome 3.16.2.

It should work with similar models (ASUS N550, N56, …) and other OS versions with recent kernel and alsa, but I can’t test.

If this is not the case, try installing hdajackretask and launch it from a terminal.
A GUI opens, choose “Realtek ALC 668” in the codec combo box.
Tick the option “Show unconnected pins”.
Scroll down to Pin ID: 0x1a
Tick Override
Choose “Internal speaker” in the combo box.
Push “Install boot override” (root password needed) and close the “Ok, now reboot…” prompt.
DO NOT REBOOT at this stage.

Look for file** /lib/firmware/hda-jack-retask.fw** and open it. It should contain something like:


[codec]
**0x10ec0668 0x104313bf 0**      <<<<<<<<<

[pincfg]
0x12 0x99a30970
0x14 0x99130110
0x15 0x01214020
0x16 0x40000000
0x18 0x01a19840
0x19 0x411111f0
**0x1a 0x90170150**      <<<<<<<<<<<<<<<<<
0x1b 0x411111f0
0x1d 0x40c6832d
0x1e 0x411111f0
0x1f 0x411111f0

Check the two highligthed lines and change file /lib/firmware/asus-n551-hda-fix.fw accordingly, if needed.

Before rebooting, be sure to push “Remove boot override” in hdajackretask (apparently this override scrambles something in the microphone setup, beyond connecting the subwoofer).

Reboot with your fingers crossed.
Maybe checking that no speaker is muted, with alsamixer for instance, avoids the obvious.
If still no joy, look out for a better fix and let us know…

1 Like

It is possible to have a full 2.1 experience with the ASUS N551; just add the following to my former recommendations.

Uncomment and change the following two lines in /etc/pulse/daemon.conf


default-sample-channels = 3
default-channel-map = front-left,front-right,lfe

Please note that in openSUSE the following is the default, so no need touching that:


; enable-remixing = yes
; enable-lfe-remixing = yes
; lfe-crossover-freq = 120

Choose “Analog Surround 2.1 Output” in the Gnome Sound settings panel and enjoy a gorgeous 2.1 sound, with full bass from the subwoofer.

Thanks to impossiblyfunky for pointing out this Arch Linux link: https://wiki.archlinux.org/index.php/ASUS_G750JH#Sound

The following setup applies as stated to N551 models only; other similar models might require tweaking here and there.

The must have

1) Create file /etc/modprobe.d/50-asus-n551-hda-fix.conf with the following content:


options snd-hda-intel patch=,asus-n551-hda-fix.fw

Please note the comma after the = sign: the codec to be patched is in the second card.
The first card (HDMI codec) needs no patching.

2) Create file /lib/firmware/asus-n551-hda-fix.fw with the following content:


[codec]
0x10ec0668 0x104313bf 0

[pincfg]
0x1a 0x90170151

This is needed to connect pin “0x1a” (wired to the yellow jack on the N551 right side) to the “Internal speaker (LFE)” DAC output “0x90170151” on the Realtek ALC668 codec.

3) Add the following line either to ~/.config/pulse/daemon.conf on a per-user basis or to /etc/pulse/daemon.conf on a system-wide basis:


lfe-crossover-freq = 250

The beer can size “SonicMaster” subwoofer shipped with the N551 has a resonance at about 160 Hz, the internal speakers show a resonance at about 380 Hz: a 250 Hz crossover allows both to perform at their best.
The Pulseaudio default at 120 Hz would cut off most of the output from the SonicMaster.

**At this point you should be able to select “Analog Surround 2.1 Output” on your desktop sound panel or on Pulseaudio Volume Control and enjoy 2.1 audio on the N551.
**
The optionals

A) The following lines added to daemon.conf yield a somewhat clearer sound, matching one of the native PCM formats of the ALC668 at 24 bits/48 kHz:


default-sample-format = s24le
default-sample-rate = 48000
alternate-sample-rate = 44100

I didn’t hear any further improvement with other options available on my test unit.

B) The following lines might be added to daemon.conf if your system occasionally refuses to engage properly the 2.1 output, even though they seem not to be essential and are usually overridden by something else in the system.


default-sample-channels = 3
default-channel-map = front-left,front-right,lfe

NOTES

The individual volume controls for the subwoofer in the desktop sound panel or pavucontrol don’t work; use alsamixer if you need to adjust the subwoofer output independently of the master output volume.

The internal stereo mic works, but to enable the headphone mic (when inserted) you have to play with hdajackretask and find a line to add to [pincfg] in asus-n551-hda-fix.fw [see point 2) above]: apparently there is no automatic sensing to assess whether the jack inserted in the black side socket should be treated as a headset, a headphone, an external speaker or an external mic.

HINTS for other similar models

Apparently every ASUS model has its own wiring and codec and many hints found over the net, like using asus-modeX on the snd_hda_intel kernel module options, may apply to ASUS motherboards rather than laptops; so you may have to tweak the setup to your specific model.

H1) Try hdajacksensetest with everything unplugged, then with the subwoofer plugged in: it should show which pin is connected to the subwoofer jack so that it can be checked with hdajackretask according to post#1 in this thread.


LT_B:/home/bruno # hdajacksensetest -c 1 -a
Pin 0x12 (Internal Mic): present = No
Pin 0x14 (Internal Speaker): present = No
Pin 0x15 (Black Headphone, Right side): present = No
Pin 0x16 (Not connected): present = No
Pin 0x18 (Not connected): present = No
Pin 0x19 (Not connected): present = No
Pin 0x1a (Internal Speaker): present = Yes    **<<<<<<< check this one <<<<**
Pin 0x1b (Not connected): present = No
Pin 0x1d (Not connected): present = No
Pin 0x1e (Not connected): present = No
Pin 0x1f (Not connected): present = No
LT_B:/home/bruno #

H2) Many ASUS laptops appear to use the ALC662 codec; accordingly, hdajackretask might suggest that the first lines in asus--hda-fix.fw should read something like:


[codec]
0x10ec0662 0x.......

[pincfg]
0x.. 0x.........

H3) Play with hdajackretask until you find a suitable setup (see post#1 for details)

H4) Larger models like the N751 might require a lower crossover frequency for best performance, maybe 200 to 220 Hz.
Models with integrated subwoofer or array speakers, like some ROG models, might need some experiments to find their resonant frequencies and then guess the best crossover frequency.