Skip to content

[BUG] ASUS ExpertBook B3404CMA ALC294 speakers require coef 0x1b bit 10 #5865

Description

@richicru

[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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions