Skip to content

sof-essx8336: Internal mic only picks up noise unless headphone jack is physically inserted (OEM board with empty DMI strings) Closed #5889

Description

@Goldicode

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

  1. Boot Linux, do not connect anything to the headphone jack.
  2. Record from the internal mic (arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 test.wav).
  3. 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.
  4. 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.

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