pipewire/spa/plugins/alsa/acp
Daniel Nouri f030e1dc03 alsa: Enable IEC958 switches on device activation
IEC958 (S/PDIF, HDMI, DisplayPort) switches default to muted in ALSA
drivers, causing no audio output on digital devices.

While UCM configurations and mixer paths can handle IEC958 unmuting,
several scenarios lack coverage:
- Pro-audio profiles (bypass UCM and mixer paths by design)
- Devices without UCM configurations
- Devices with incomplete mixer path definitions
- Cards with multiple HDMI/DP outputs (indexed switches)

This ensures IEC958 switches are enabled during device activation and
port changes. The implementation uses the device mixer when available,
falls back to the card mixer for pro-audio profiles, and enables all
IEC958 switches regardless of index.

Safe for all configurations: the operation is idempotent and provides
defense-in-depth even when UCM or mixer paths handle it correctly.

Tested on AMD Rembrandt GPU with 3 HDMI outputs in pro-audio mode.
2025-10-31 08:22:44 +00:00
..
acp.c alsa: Enable IEC958 switches on device activation 2025-10-31 08:22:44 +00:00
acp.h spa: alsa: Read and expose channel count and position from ELD 2025-10-10 09:34:43 +00:00
alsa-mixer.c alsa: Fix IEC958 digital output not unmuted on path activation 2025-10-31 08:22:44 +00:00
alsa-mixer.h spa: acp: Allow Volume control which supports mute to be used as a hardware mute 2025-05-05 07:40:29 +00:00
alsa-ucm.c spa: alsa: fix some coverity warnings 2025-06-14 14:38:26 +03:00
alsa-ucm.h spa: acp: indicate ALSA UCM profile errors in UIs 2025-03-13 21:25:55 +00:00
alsa-util.c spa: alsa: Read and expose channel count and position from ELD 2025-10-10 09:34:43 +00:00
alsa-util.h spa: alsa: Read and expose channel count and position from ELD 2025-10-10 09:34:43 +00:00
array.h *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
card.h spa: alsa: Add option to use ELD-detected channels 2025-10-10 09:34:43 +00:00
channelmap.h acp: use global max channels if defined 2025-10-24 17:16:03 +02:00
compat.c *: unify config.h handling 2025-05-30 10:24:13 +00:00
compat.h spa: alsa: fix some coverity warnings 2025-06-14 14:38:26 +03:00
conf-parser.c config.h is a local header, not a system one 2021-06-10 09:04:16 +10:00
conf-parser.h alsa-acp: Add libacp based card device 2020-07-06 12:20:09 +02:00
device-port.h *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
dynarray.h *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
hashmap.h *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
idxset.h *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
llist.h alsa-acp: Add libacp based card device 2020-07-06 12:20:09 +02:00
meson.build refactor: Remove test-alsa-path-select tool 2025-10-31 08:22:44 +00:00
proplist.h *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00
volume.h *: don't include standard C headers inside of extern "C" 2025-05-30 09:48:28 +01:00