Summary
On my laptop (cheap whitelabel/OEM device, sold under the brand "Denver"),
the internal microphone (ES8336 codec, sof-essx8336 machine driver) only
records noise. As soon as any plug is inserted into the headphone jack
(even without audio playing), the internal microphone works correctly.
This suggests a jack-detection / GPIO polarity issue rather than a mixer
or clock problem.
On the same hardware, the microphone works correctly under Windows at
all times, regardless of whether headphones are plugged in.
Hardware
- Board: whitelabel/OEM ("Denver" branded), DMI strings not populated
by OEM (baseboard-product-name / system-product-name report "Default
string" via dmidecode)
- Codec: ES8336 (sof-essx8336)
- Platform: Intel Gemini Lake (Apollo Lake DSP class, topology
sof-glk-es8336-ssp2.tplg)
Kernel / Software
- Kernel: 7.1.8-1-cachyos
- Distro: CachyOS (Arch-based)
- SOF firmware: version 2:2:0-57864, ABI 3:22:1
- Current quirk mask: 0x2 (SSP2 only — no board-specific quirk applied,
presumably because DMI strings are not populated on this OEM board)
ACPI GPIO info (from DSDT, ESSX8336 device)
Method (_CRS, 0, NotSerialized)
{
I2cSerialBusV2 (0x0011, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "_SB.PCI0.I2C2", ...)
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
"_SB.GPO1", 0x00, ResourceConsumer, ,)
{ 0x001D } // GPIO 29, output
GpioInt (Edge, ActiveHigh, ExclusiveAndWake, PullDefault, 0x0000,
"_SB.GPO1", 0x00, ResourceConsumer, ,)
{ 0x0014 } // GPIO 20, interrupt (jack detect?)
}
dmesg (relevant excerpt)
[ 11.462771] sof-audio-pci-intel-apl 0000:00:0e.0: DSP detected with PCI class/subclass/prog-if 0x040100
[ 11.509085] sof-audio-pci-intel-apl 0000:00:0e.0: NHLT device BT(0) detected, ssp_mask 0x4
[ 11.509093] sof-audio-pci-intel-apl 0000:00:0e.0: DMICs detected in NHLT tables: 0
[ 11.509095] sof-audio-pci-intel-apl 0000:00:0e.0: NHLT device I2S(4) detected, ssp_mask 0x5
[ 11.517350] sof-audio-pci-intel-apl 0000:00:0e.0: Topology file: intel/sof-tplg/sof-glk-es8336-ssp2.tplg
[ 11.592718] sof-essx8336 sof-essx8336: quirk mask 0x2
[ 11.592726] sof-essx8336 sof-essx8336: quirk SSP2
[ 11.600658] es8316 i2c-ESSX8336:00: assuming static mclk
Steps to reproduce
- Boot Linux, do not connect anything to the headphone jack.
- Record from the internal mic (
arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav).
- Play back — only noise, no voice signal, regardless of
'Differential Mux' setting (lin1-rin1 / lin2-rin2, with or
without 20dB boost) or 'Mic Boost' setting.
- Insert any 3.5mm plug into the headphone jack (no audio playback
needed) and repeat step 2/3 — microphone now works correctly.
Expected behavior
Internal microphone should work correctly regardless of headphone
jack state, as it does on the same hardware under Windows.
Additional notes
- DMI strings on this board are unpopulated ("Default string"),
which likely prevents any existing sof_es8336_quirk_table DMI
match (similar to the existing Huawei Matebook D15 quirk) from
applying.
- Manually testing
quirk=64 (attempted JD_INVERTED bit) via
modprobe.d caused topology loading to fail entirely
(tplg ... component load failed -22), breaking all audio
output and input — reverted.
- Happy to test further quirk values or provide additional debug
output (alsa-info, sof-logger) if a maintainer can suggest safe
values to try, given the DSDT GPIO info above.
Summary
On my laptop (cheap whitelabel/OEM device, sold under the brand "Denver"),
the internal microphone (ES8336 codec, sof-essx8336 machine driver) only
records noise. As soon as any plug is inserted into the headphone jack
(even without audio playing), the internal microphone works correctly.
This suggests a jack-detection / GPIO polarity issue rather than a mixer
or clock problem.
On the same hardware, the microphone works correctly under Windows at
all times, regardless of whether headphones are plugged in.
Hardware
by OEM (baseboard-product-name / system-product-name report "Default
string" via dmidecode)
sof-glk-es8336-ssp2.tplg)
Kernel / Software
presumably because DMI strings are not populated on this OEM board)
ACPI GPIO info (from DSDT, ESSX8336 device)
Method (_CRS, 0, NotSerialized)
{
I2cSerialBusV2 (0x0011, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "_SB.PCI0.I2C2", ...)
GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
"_SB.GPO1", 0x00, ResourceConsumer, ,)
{ 0x001D } // GPIO 29, output
GpioInt (Edge, ActiveHigh, ExclusiveAndWake, PullDefault, 0x0000,
"_SB.GPO1", 0x00, ResourceConsumer, ,)
{ 0x0014 } // GPIO 20, interrupt (jack detect?)
}
dmesg (relevant excerpt)
[ 11.462771] sof-audio-pci-intel-apl 0000:00:0e.0: DSP detected with PCI class/subclass/prog-if 0x040100
[ 11.509085] sof-audio-pci-intel-apl 0000:00:0e.0: NHLT device BT(0) detected, ssp_mask 0x4
[ 11.509093] sof-audio-pci-intel-apl 0000:00:0e.0: DMICs detected in NHLT tables: 0
[ 11.509095] sof-audio-pci-intel-apl 0000:00:0e.0: NHLT device I2S(4) detected, ssp_mask 0x5
[ 11.517350] sof-audio-pci-intel-apl 0000:00:0e.0: Topology file: intel/sof-tplg/sof-glk-es8336-ssp2.tplg
[ 11.592718] sof-essx8336 sof-essx8336: quirk mask 0x2
[ 11.592726] sof-essx8336 sof-essx8336: quirk SSP2
[ 11.600658] es8316 i2c-ESSX8336:00: assuming static mclk
Steps to reproduce
arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav).'Differential Mux' setting (lin1-rin1 / lin2-rin2, with or
without 20dB boost) or 'Mic Boost' setting.
needed) and repeat step 2/3 — microphone now works correctly.
Expected behavior
Internal microphone should work correctly regardless of headphone
jack state, as it does on the same hardware under Windows.
Additional notes
which likely prevents any existing
sof_es8336_quirk_tableDMImatch (similar to the existing Huawei Matebook D15 quirk) from
applying.
quirk=64(attempted JD_INVERTED bit) viamodprobe.d caused topology loading to fail entirely
(
tplg ... component load failed -22), breaking all audiooutput and input — reverted.
output (alsa-info, sof-logger) if a maintainer can suggest safe
values to try, given the DSDT GPIO info above.