[BUG] ASUS ExpertBook B3404CMA ALC294 internal speakers require coefficient 0x1b bit 10
Summary
The internal speakers are silent on an ASUS ExpertBook B3404CMA under Linux,
although the HDA route is active and unmuted. The same speakers work under
Windows 11.
Comparing full ALC294 dumps from the Realtek Windows driver and Linux isolated
the required initialization: vendor coefficient 0x1b must be 0x4e4b rather
than 0x4a4b. Writing that one value immediately restores speaker output.
Hardware and software
- Product: ASUS ExpertBook B3404CMA
- HDA controller: Intel Meteor Lake-P
8086:7e28
- Codec: Realtek ALC294
10ec:0294
- Codec subsystem: ASUS
1043:3870
- Codec revision:
0x100004
- BIOS tested: B3404CMA.311
- Linux kernels tested:
7.0.0-27-generic, 7.0.0-28-generic
- Audio path: SOF IPC4 with
snd_sof_intel_hda_generic
- Windows Realtek driver used for comparison:
6.0.9629.1
Linux state before the fix
- Speaker pin
0x14 is configured as output and routes to DAC 0x02.
- The pin and DAC amplifiers are unmuted.
- Standard EAPD is enabled.
- All four codec GPIO lines are disabled and low.
- Coefficient
0x1b reads 0x4a4b.
Windows also leaves all codec GPIO lines disabled and low, but reads
coefficient 0x1b as 0x4e4b.
Confirmed reproduction
With no headphones connected and audio playing at low volume:
sudo hda-verb /dev/snd/hwC0D0 0x20 SET_COEF_INDEX 0x1b
sudo hda-verb /dev/snd/hwC0D0 0x20 SET_PROC_COEF 0x4e4b
sudo hda-verb /dev/snd/hwC0D0 0x20 SET_COEF_INDEX 0x1b
sudo hda-verb /dev/snd/hwC0D0 0x20 GET_PROC_COEF 0
The final readback is 0x4e4b, and the internal speakers immediately begin
working. Restoring 0x4a4b disables them again.
The changed bit is bit 10 (0x0400).
Existing upstream code
Mainline already writes exactly this value in
ALC294_FIXUP_ASUS_COEF_1B, currently selected for ASUS UX431DA
1043:1b11. That fixup is chained to ALC289_FIXUP_ASUS_GA401 and
ALC289_FIXUP_ASUS_GA502, which also alter preferred DAC routing and NID
0x19 pin configuration.
Since only the coefficient write was tested and required on B3404CMA, the
proposed patch adds a dedicated, unchained fixup for 1043:3870 rather than
reusing unrelated machine configuration.
Patch:
https://github.com/richicru/asus-b3404cma-linux-audio/blob/main/kernel/0001-sound-hda-realtek-fix-ASUS-B3404CMA-speakers.patch
Full investigation and reversible test:
https://github.com/richicru/asus-b3404cma-linux-audio
Other tests already ruled out
- BIOS update from B3404CMA.305 to B3404CMA.311.
- Legacy HDA instead of SOF.
model=alc294-bass-speaker.
- ASUS alias
hda_model=1043:10a1.
- Upstream
alc_fixup_gpio4 sequence using mask 0x04.
- Coefficient
0x62=0xa007; the codec immediately masked it back to
0xa000 after the index was correctly reselected.
Raw Windows dumps are not attached publicly because RtHDDump includes device
instance identifiers and registry data. All 130 coefficients were compared;
the complete relevant difference tables are in the linked repository.
[BUG] ASUS ExpertBook B3404CMA ALC294 internal speakers require coefficient 0x1b bit 10
Summary
The internal speakers are silent on an ASUS ExpertBook B3404CMA under Linux,
although the HDA route is active and unmuted. The same speakers work under
Windows 11.
Comparing full ALC294 dumps from the Realtek Windows driver and Linux isolated
the required initialization: vendor coefficient
0x1bmust be0x4e4bratherthan
0x4a4b. Writing that one value immediately restores speaker output.Hardware and software
8086:7e2810ec:02941043:38700x1000047.0.0-27-generic,7.0.0-28-genericsnd_sof_intel_hda_generic6.0.9629.1Linux state before the fix
0x14is configured as output and routes to DAC0x02.0x1breads0x4a4b.Windows also leaves all codec GPIO lines disabled and low, but reads
coefficient
0x1bas0x4e4b.Confirmed reproduction
With no headphones connected and audio playing at low volume:
The final readback is
0x4e4b, and the internal speakers immediately beginworking. Restoring
0x4a4bdisables them again.The changed bit is bit 10 (
0x0400).Existing upstream code
Mainline already writes exactly this value in
ALC294_FIXUP_ASUS_COEF_1B, currently selected for ASUS UX431DA1043:1b11. That fixup is chained toALC289_FIXUP_ASUS_GA401andALC289_FIXUP_ASUS_GA502, which also alter preferred DAC routing and NID0x19pin configuration.Since only the coefficient write was tested and required on B3404CMA, the
proposed patch adds a dedicated, unchained fixup for
1043:3870rather thanreusing unrelated machine configuration.
Patch:
https://github.com/richicru/asus-b3404cma-linux-audio/blob/main/kernel/0001-sound-hda-realtek-fix-ASUS-B3404CMA-speakers.patch
Full investigation and reversible test:
https://github.com/richicru/asus-b3404cma-linux-audio
Other tests already ruled out
model=alc294-bass-speaker.hda_model=1043:10a1.alc_fixup_gpio4sequence using mask0x04.0x62=0xa007; the codec immediately masked it back to0xa000after the index was correctly reselected.Raw Windows dumps are not attached publicly because RtHDDump includes device
instance identifiers and registry data. All 130 coefficients were compared;
the complete relevant difference tables are in the linked repository.