I am stumped trying to find out why multi-channel sound is not working on the HDMI outputs of my Ice Lake laptop. What could be doing this? Is it the driver (sof-hda-dsp)? Is it ALSA? Is it pipewire? Is it pulse audio? How can I tell? I am running Fedora 36 with pipewire and wireplumber.
Something is recognizing that there are 8 channels of sound for the HDMI outputs. From /proc/asound/card0/codec#2 (there are three copies of these with different nodes):
Node 0x03 [Audio Output] wcaps 0x6611: 8-Channels Digital
Device: name=“HDMI 1”, type=“HDMI”, device=4
Converter: stream=3, channel=0
Digital: Enabled KAE
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0x1a]: 16 24 32
formats [0x5]: PCM AC3
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Node 0x04 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0b000094: OUT Detect HBR HDMI DP
Pin Default 0x18560010: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Devices: 0
Connection: 0
But pulseaudio is only seeing two channels for these outputs. From pactl list sinks (there are again three of these with different numbers):
Sink #49
State: RUNNING
Name: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_4__sink
Description: Ice Lake-LP Smart Sound Technology Audio Controller HDMI / DisplayPort 2 Output
Driver: PipeWire
Sample Specification: s24-32le 2ch 48000Hz
Channel Map: front-left,front-right
Owner Module: 4294967295
Mute: no
Volume: front-left: 62865 / 96% / -1.08 dB, front-right: 62865 / 96% / -1.08 dB
balance 0.00
Base Volume: 65536 / 100% / 0.00 dB
Monitor Source: alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_4__sink.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE DECIBEL_VOLUME LATENCY
Properties:
alsa.card = “0”
alsa.card_name = “sof-hda-dsp”
alsa.class = “generic”
alsa.device = “4”
alsa.driver_name = “snd_soc_skl_hda_dsp”
alsa.id = “HDMI2 (*)”
alsa.long_card_name = “LENOVO-81Q9-LenovoYogaC940_14IIL-LNVNB161216”
alsa.mixer_device = “_ucm0001.hw:sofhdadsp”
alsa.name = “”
alsa.resolution_bits = “16”
alsa.subclass = “generic-mix”
alsa.subdevice = “0”
alsa.subdevice_name = “subdevice #0”
api.alsa.card.longname = “LENOVO-81Q9-LenovoYogaC940_14IIL-LNVNB161216”
api.alsa.card.name = “sof-hda-dsp”
api.alsa.open.ucm = “true”
api.alsa.path = “hw:sofhdadsp,4”
api.alsa.pcm.card = “0”
api.alsa.pcm.stream = “playback”
audio.channels = “2”
audio.position = “FL,FR”
card.profile.device = “1”
device.api = “alsa”
device.class = “sound”
device.id = “42”
device.profile.description = “HDMI / DisplayPort 2 Output”
device.profile.name = “HiFi: hw:sofhdadsp,4: sink”
device.routes = “1”
factory.name = “api.alsa.pcm.sink”
media.class = “Audio/Sink”
device.description = “Ice Lake-LP Smart Sound Technology Audio Controller”
node.name = “alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp_4__sink”
node.nick = “HDMI / DisplayPort 2 Output”
node.pause-on-idle = “false”
object.path = “alsa:pcm:0:hw:sofhdadsp,4:playback”
priority.driver = “680”
priority.session = “680”
factory.id = “18”
clock.quantum-limit = “8192”
client.id = “33”
node.driver = “true”
factory.mode = “merge”
audio.adapt.follower = “”
library.name = “audioconvert/libspa-audioconvert”
object.id = “48”
object.serial = “49”
node.max-latency = “4096/48000”
api.acp.auto-port = “false”
api.acp.auto-profile = “false”
api.alsa.card = “0”
api.alsa.use-acp = “true”
device.bus = “pci”
device.bus_path = “pci-0000:00:1f.3-platform-skl_hda_dsp_generic”
device.enum.api = “udev”
device.icon_name = “audio-card-analog-pci”
device.name = “alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic”
device.nick = “sof-hda-dsp”
device.plugged.usec = “6818548”
device.product.id = “0x34c8”
device.product.name = “Ice Lake-LP Smart Sound Technology Audio Controller”
device.subsystem = “sound”
sysfs.path = “/sys/devices/pci0000:00/0000:00:1f.3/skl_hda_dsp_generic/sound/card0”
device.vendor.id = “0x8086”
device.vendor.name = “Intel Corporation”
device.string = “0”
Ports:
[Out] HDMI2: HDMI / DisplayPort 2 Output (type: HDMI, priority: 600, availability group: HDMI/DP,pcm=4, available)
Active Port: [Out] HDMI2
Formats:
pcm