pipewire/spa/plugins/alsa
Daniel Nouri 571ff40704 alsa: Fix IEC958 digital output not unmuted on path activation
When selecting an HDMI/DisplayPort (IEC958) output path, the hardware
mute switch remains in kernel default state (muted), causing no audio
output despite correct software routing.

Root cause: pa_alsa_path_select() only sets mute switches when
mute_during_activation is enabled. No mixer paths enable this setting,
making the switch configuration code unreachable for IEC958 paths.

Solution: Always set mute switches to match device mute status after
path activation, regardless of mute_during_activation setting.

Testing: Added test-alsa-path-select tool to verify the fix.
- Loads mixer path and calls pa_alsa_path_select()
- Verifies switch states match expected values
- Tested on AMD Radeon HDMI and Realtek ALC257 analog

Manual verification:
- Before: IEC958 switch OFF, no audio
- After: IEC958 switch set correctly, audio works

This bug was inherited from PulseAudio's ALSA mixer path code where
HDMI path configurations lack IEC958 unmute sections.

Fixes: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3261
See-Also: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/562
See-Also: 33be660e4b
See-Also: https://bugs.launchpad.net/hundredpapercuts/+bug/681996
2025-10-07 17:21:05 +02:00
..
acp alsa: Fix IEC958 digital output not unmuted on path activation 2025-10-07 17:21:05 +02:00
mixer Option of analog or iec958 stereo output, both merging volume switches 2025-07-21 12:19:13 +00:00
90-pipewire-alsa.rules Map Razer BlackShark v3 ACP 2025-08-27 15:55:02 +00:00
acp-tool.c spa: acp: make spa-acp-tool debug output easier to read 2025-03-09 16:15:56 +02:00
alsa-acp-device.c alsa: report extra latency for FireWire drivers 2025-09-07 18:23:31 +00:00
alsa-compress-offload-device.c spa: alsa: avoid potential uninitialized variable use 2024-09-18 19:54:13 +00:00
alsa-compress-offload-sink.c alsa-compress-offload-sink: Improve write_queued_output_buffers comments 2025-07-18 10:53:59 +02:00
alsa-pcm-device.c spa: alsa: avoid potential uninitialized variable use 2024-09-18 19:54:13 +00:00
alsa-pcm-sink.c spa: acp: get and emit UCM information for SplitPCM devices 2024-12-21 16:03:19 +02:00
alsa-pcm-source.c spa: acp: get and emit UCM information for SplitPCM devices 2024-12-21 16:03:19 +02:00
alsa-pcm.c alsa: Use the minimum period size as headroom for SOF cards 2025-09-25 16:30:08 +03:00
alsa-pcm.h alsa: Use the minimum period size as headroom for SOF cards 2025-09-25 16:30:08 +03:00
alsa-seq-bridge.c alsa: clear port before adding to free list 2025-08-04 11:02:02 +02:00
alsa-seq.c control: improve UMP to Midi conversiom 2025-08-19 18:33:59 +02:00
alsa-seq.h seq: rework port handling 2025-07-30 17:32:02 +02:00
alsa-udev.c alsa-udev: support alsa.use-ucm 2025-06-17 12:54:39 +02:00
alsa.c meson: fix build with missing libudev-devel 2024-02-06 11:49:40 +01:00
alsa.h spa: remove unnecessary indirection for some spa_log_topics 2023-10-06 13:08:24 +00:00
compress-offload-api-util.c alsa-compress-offload: Add device object and udev based autodetection 2023-09-02 08:28:22 +00:00
compress-offload-api-util.h alsa-compress-offload: Add device object and udev based autodetection 2023-09-02 08:28:22 +00:00
compress-offload-api.c alsa-compress-offload-sink: Remove unused variable 2025-07-18 10:53:52 +02:00
compress-offload-api.h alsa-compress-offload: Add device object and udev based autodetection 2023-09-02 08:28:22 +00:00
meson.build meson: fix build with missing libudev-devel 2024-02-06 11:49:40 +01:00
test-hw-params.c treewide: use SPDX tags to specify copyright information 2023-02-16 10:54:48 +00:00
test-timer.c fix compilation some more 2024-06-18 15:41:12 +02:00