Fixing Audio on the Huawei MateBook under Linux
Troubleshoot sound card detection and the internal microphone on a MateBook D 15 2022 running Arch Linux, extract DSP firmware from the Windows driver package, and configure AVS for playback and recording.
The Huawei MateBook D 15 2022 supports playback and recording under Windows, but Arch Linux did not detect its sound card after installation. Following advice from the Arch Linux forums, setting snd_intel_dspcfg.dsp_driver to 1 restores the speakers and headphones, but leaves the internal microphone unable to record.
The internal digital microphone requires the audio DSP. The HDA driver selected by dsp_driver=1 does not enable it. The default SOF driver also selects an ES8336 configuration from the ACPI information that does not match this machine, causing the sound card detection problem. The solution is to extract DSP firmware from Huawei’s Windows driver package and switch to the kernel’s AVS driver.
Environment
The hardware used to extract and apply the firmware from the Windows driver package is listed below:
| Item | Hardware |
|---|---|
| Model | MateBook D 15 2022, BoDE-WFH9 |
| DMI product name | BoDE-WXX9 |
| Mainboard | BoDE-WXX9-PCB-B3 |
| Audio controller | Intel Tiger Lake-LP, 8086:a0c8 |
| PCI subsystem | 152d:1371 |
| HDA audio codec | Conexant SN6140, 14f1:1f87 |
MateBooks of the same model or series may have different sound hardware and mainboards. The firmware and configuration below have only been tested on the hardware listed above. Before changing the configuration, check your machine’s details:
for dmi_field in sys_vendor product_name board_name; do
printf '%s: ' "$dmi_field"
cat "/sys/class/dmi/id/$dmi_field"
done
lspci -nnk -s 00:1f.3
Driver Selection
Use the dsp_driver parameter of snd_intel_dspcfg to select the Intel audio driver. The settings produce the following results:
| Value | Driver | Result |
|---|---|---|
1 | HDA, snd_hda_intel | Speakers and headphones work; the internal microphone is unavailable |
3 | SOF | Selects the ES8336 configuration; cannot register a sound card because its topology file is missing |
4 | AVS, snd_soc_avs | Playback and recording work after installing firmware, powering off and on, and setting the microphone gain |
HDA and the Digital Microphone
With dsp_driver=1, inspect the HDA codec information:
rg 'Codec:|Vendor Id:|Pin Default' /proc/asound/card*/codec\#*
The detected codec is a Conexant SN6140. The speakers, headphones, and external microphone jack connect to it. The internal digital microphone (DMIC) connects to the Intel DSP through a PDM interface and uses a separate audio path. The SOF digital microphone guide describes these interfaces and their processing in the DSP.
The kernel log also identifies the digital microphone channels:
DMICs detected in NHLT tables: 2
NHLT is an ACPI table that records digital audio interface information. Here, 2 indicates two digital microphone channels. HDA mode does not enable the DSP, so it can restore analog audio but cannot drive the internal digital microphone. In this mode, the Mic input in the desktop sound settings refers to the analog microphone input on the headset jack.
SOF and the ACPI Configuration
With automatic driver selection or dsp_driver=3, the kernel tries to load this topology file:
intel/sof-tplg/sof-tgl-es8336-dmic2ch.tplg
Similar messages requesting the corresponding firmware also appear when booting the live CD during a Debian installation.
A topology file describes the DSP’s audio processing pipelines and input and output interface configuration. The filename indicates that SOF selected the ES8336 configuration. The file was missing, so the driver did not register a sound card.
The reason for selecting ES8336 appears in the ACPI DSDT. The definition of device \_SB.PC00.I2C2.ESSX includes:
Name (_HID, "ESSX8336")
Name (_CID, "ESSX8336")
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
_STA always returns 0x0F. According to the ACPI specification, this means the firmware reports the device as present, enabled, and functioning. SOF’s Tiger Lake machine matching table uses this information to select sof-essx8336.
The system did not detect the corresponding I2C2 controller. The ESSX8336:00 device node had no physical_node and no bound driver. The chip detected on the HDA bus was SN6140.
During troubleshooting, Linux 7.1’s sound/soc/intel/common/soc-acpi-intel-tgl-match.c was modified to add a DMI match for vendor HUAWEI, product name BoDE-WXX9, and board name BoDE-WXX9-PCB-B3. The ES8336 entry’s machine_quirk callback returned NULL when these conditions matched, causing the kernel to skip that entry. After this change, SOF selected the generic HDA configuration.
Firmware Extraction
The AVS driver supports both the HDA audio devices and the digital microphone on this machine, but it requires compatible DSP firmware. The installed linux-firmware-intel 20260810-2 package provided generic AVS topology files for HDA, DMIC, and HDMI. It did not include the Tiger Lake base firmware:
intel/avs/tgl/dsp_basefw.bin
The firmware can be extracted from Huawei’s HUAWEI_Matebook_D_15_2022_ISST_10.29.0.6367.zip driver package, available from Huawei’s official website. Its INF files include this machine’s controller ID A0C8 and subsystem ID SUBSYS_1371152D. In particular, IntcOED.inf specifies Fw/dsp_fw_release.bin as the base firmware.
On Arch Linux, install the extraction and diagnostic tools and the required firmware package. This setup uses PipeWire for desktop audio:
sudo pacman -S --needed 7zip alsa-utils pciutils ripgrep \
linux-firmware-intel pipewire pipewire-pulse wireplumber
Download the Windows driver package named above and replace driver_archive with its actual path. The archive contains another ZIP archive and two nested NSIS installers. Extract them in sequence with 7-Zip:
driver_archive="/path/to/HUAWEI_Matebook_D_15_2022_ISST_10.29.0.6367.zip"
extract_root="$(mktemp -d /tmp/huawei-isst-XXXXXX)"
7z x "$driver_archive" "-o$extract_root/layer1"
nested_zip="$extract_root/layer1/HUAWEI_Matebook_D_15_2022_ISST_10.29.0.6367/HUAWEI_Matebook_D_15_2022_ISST_10.29.0.6367.zip"
7z x "$nested_zip" "-o$extract_root/layer2"
7z x "$extract_root/layer2/ISST_10.29.0.6367.exe" "-o$extract_root/layer3"
7z x "$extract_root/layer3/ISST_10.29.0.6367.exe" "-o$extract_root/payload"
firmware_file="$extract_root/payload/IntelSST/Fw/dsp_fw_release.bin"
sha256sum "$firmware_file"
The extracted firmware is 546764 bytes and has version 10.29.0.6313.
Linux 7.1 sets the minimum Tiger Lake firmware version to 10.29.0.5646 in its AVS platform configuration. The firmware loader requires the first three version components to match and the final component to be at least 5646. This firmware meets those requirements.
AVS Configuration
After confirming that the hardware details and firmware match those above, install the base firmware. Run the extraction and installation commands in the same terminal so that the firmware_file variable remains available:
sudo install -D -m 0644 \
"$firmware_file" \
/usr/lib/firmware/intel/avs/tgl/dsp_basefw.bin
Driver Parameters
First, inspect the existing configuration:
rg -n 'snd_intel_dspcfg|dsp_driver|dmic_detect' \
/etc/modprobe.d /usr/lib/modprobe.d
cat /proc/cmdline
Then edit /etc/modprobe.d/sound.conf and set dsp_driver=4:
options snd_intel_dspcfg dsp_driver=4
Check the other configuration files and remove duplicate dsp_driver settings.
Boot Images
On Arch Linux systems that use mkinitcpio, regenerate the boot images:
sudo mkinitcpio -P
Then reboot.
Audio Verification
Sound Card Status
After booting, check the active driver and sound cards:
lspci -nnk -s 00:1f.3
cat /sys/module/snd_intel_dspcfg/parameters/dsp_driver
cat /proc/asound/cards
arecord -l
The PCI driver should be snd_soc_avs, and dsp_driver should be 4. The sound card list should look like this. The card numbers may differ on your system:
0 [PROBE ]: AVS PROBE
1 [HDAudio ]: AVS HD-Audio
2 [DMIC ]: AVS DMIC
3 [HDMI ]: AVS HDMI
If the logs first report a missing hda-14f11f87-tplg.bin, then show trying to load fallback topology hda-generic-tplg.bin, and an HDA device appears in the sound card list, the driver has successfully loaded the generic topology.
Microphone Gain
Recording may still fail after the driver loads and the microphone is detected. You may need to set the microphone gain. Check it first:
amixer -c DMIC cget 'name=DMIC Volume'
If it is 0, set it to 100% and save the ALSA state:
amixer -q -c DMIC set DMIC 100%
sudo alsactl store DMIC
Then select AVS HDA as the output and AVS DMIC as the input in the desktop sound settings.
Playback and Recording Tests
Test the speakers in the desktop sound settings, then check the internal microphone with a recording application. To record directly through ALSA, use the device number listed by arecord -l. This example records five seconds from device 0 on the DMIC card:
arecord -D hw:CARD=DMIC,DEV=0 \
-f S32_LE -r 48000 -c 2 -d 5 /tmp/matebook-dmic.wav
Once recording finishes, open /tmp/matebook-dmic.wav in an audio player and check that the recorded sound is audible. If ALSA reports that the device is busy, use a desktop recording application to record through PipeWire from the selected AVS DMIC input.