All of lore.kernel.org
 help / color / mirror / Atom feed
* HDA/HiFi-mic.conf: Internal mic incorrectly gated by external Mic Jack on ALC287 without Input Source enum
       [not found] <18b857154c001f00-webhooks-bot@alsa-project.org>
@ 2026-06-12 13:03 ` GitHub issues - opened
  0 siblings, 0 replies; only message in thread
From: GitHub issues - opened @ 2026-06-12 13:03 UTC (permalink / raw)
  To: alsa-devel

alsa-project/alsa-ucm-conf issue #785 was opened from fabianmartins:

### Machine
- **Model:** Lenovo Legion Pro 7 16IAX10H (DMI product name: 83F5)
- **Codec:** Realtek ALC287 (Vendor Id: 0x10ec0287, Subsystem Id: 0x17aa3906)
- **Driver:** sof-hda-dsp
- **BIOS:** Q7CN44WW
- **alsa-ucm-conf version:** 1.2.16

### Problem

On this machine, the internal microphone (Node 0x12, Pin Default 0x90a60140: `[Fixed] Mic at Int N/A`) is reported as unavailable by PipeWire/WirePlumber because the UCM configuration assigns the wrong `JackControl`.

The codec exposes:
- `Internal Mic Phantom Jack` = on (always-on, internal mic present)
- `Mic Jack` = off (external 3.5mm jack, nothing plugged in)
- **No** `Input Source` or `Capture Source` enum control

### Root Cause

In `ucm2/HDA/HiFi-mic.conf`, the `If.micsetup` condition checks for an `Input Source` / `Capture Source` enum. When neither exists, it enters the `True` branch which unconditionally sets:

```
DeviceMicJack "Mic Jack"
```

This associates the internal mic device with the external jack's availability. Since `Mic Jack` = off (no external mic plugged in), PipeWire's ACP marks the mic route as `available: no`, and GNOME reports no microphone available.

The internal mic hardware works perfectly — direct ALSA recording (`arecord -D hw:1,0`) succeeds.

### Expected Behavior

The internal mic should have no `JackControl` (or use `Internal Mic Phantom Jack`) so its availability is not tied to the external jack state.

### Proposed Fix

In the `True` branch of `If.micsetup` (the "no source selector enum" fallback), add a condition: if `Internal Mic Phantom Jack` exists, don't assign `DeviceMicJack "Mic Jack"`. Something like:

```
True {
    Define {
        DeviceMicName "Mic"
        DeviceMicComment "Stereo Microphone"
        DeviceMicJack "Mic Jack"
        DeviceMicPriority 200
    }

    If.internalmic_phantom {
        Condition {
            Type ControlExists
            Control "iface=CARD,name='Internal Mic Phantom Jack'"
        }
        True.Define.DeviceMicJack ""
    }
}
```

This preserves the existing behavior for machines with only an external mic jack, while correctly handling machines where the sole capture device is the internal mic.

### Codec Dump (relevant excerpt)

```
Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
  Pincap 0x00000020: IN
  Pin Default 0x90a60140: [Fixed] Mic at Int N/A
    Conn = Digital, Color = Unknown
    DefAssociation = 0x4, Sequence = 0x0
    Misc = NO_PRESENCE

Node 0x19 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  Pincap 0x00003724: IN Detect
    Vref caps: HIZ 50 GRD 80 100
  Pin Default 0x03a11030: [Jack] Mic at Ext Left
    Conn = 1/8, Color = Black
    DefAssociation = 0x3, Sequence = 0x0
```

### ALSA Controls

```
Internal Mic Phantom Jack: values=on
Mic Jack: values=off
(No 'Input Source' or 'Capture Source' control exists)
```

Issue URL     : https://github.com/alsa-project/alsa-ucm-conf/issues/785
Repository URL: https://github.com/alsa-project/alsa-ucm-conf

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-06-12 13:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <18b857154c001f00-webhooks-bot@alsa-project.org>
2026-06-12 13:03 ` HDA/HiFi-mic.conf: Internal mic incorrectly gated by external Mic Jack on ALC287 without Input Source enum GitHub issues - opened

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.