What is hiding the 8-channel nature of the HDMI outputs on my laptop?

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

Did you install by scratch on F36 or was it an update from earlier versions? Did you always use the default settings from /usr/share? You might have some old config files ?

And please give us more infos like:
inxi -Fzx in terminal and post the output as </> Preformatted text here.

I think the last scratch install was around F32 with upgrades from there. I did do some customization when I was involved in getting the sof firmware to work for the digital mic and the extra speakers on the laptop, but I think that these have all been overwritten by subsequent upgrades to the sof system.

idefix> inxi -Fzx
System:
  Kernel: 5.18.10-200.fc36.x86_64 arch: x86_64 bits: 64 compiler: gcc
    v: 2.37-27.fc36 Desktop: Xfce v: 4.16.0
    Distro: Fedora release 36 (Thirty Six)
Machine:
  Type: Convertible System: LENOVO product: 81Q9 v: Lenovo Yoga C940-14IIL
    serial: <superuser required>
  Mobo: LENOVO model: LNVNB161216 v: SDK0R32862 WIN
    serial: <superuser required> UEFI: LENOVO v: AUCN57WW date: 08/18/2020
Battery:
  ID-1: BAT1 charge: 49.9 Wh (91.9%) condition: 54.3/60.0 Wh (90.5%)
    volts: 8.6 min: 7.7 model: Simplo BASE-BAT status: charging
  Device-1: hidpp_battery_2 model: Logitech Wireless Mouse MX Master 3
    charge: 50% (should be ignored) status: N/A
CPU:
  Info: quad core model: Intel Core i7-1065G7 bits: 64 type: MT MCP
    arch: Ice Lake rev: 5 cache: L1: 320 KiB L2: 2 MiB L3: 8 MiB
  Speed (MHz): avg: 1036 high: 1101 min/max: 400/3900 cores: 1: 957 2: 923
    3: 1100 4: 1101 5: 984 6: 1100 7: 1023 8: 1100 bogomips: 23961
  Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Graphics:
  Device-1: Intel Iris Plus Graphics G7 vendor: Lenovo driver: i915 v: kernel
    arch: Gen11 bus-ID: 00:02.0
  Device-2: IMC Networks Integrated Camera type: USB driver: uvcvideo
    bus-ID: 3-1:2
  Display: x11 server: X.Org v: 1.20.14 with: Xwayland v: 22.1.2 driver: X:
    loaded: modesetting unloaded: fbdev,vesa gpu: i915
    resolution: 3840x2160~60Hz
  OpenGL: renderer: Mesa Intel Iris Plus Graphics (ICL GT2)
    v: 4.6 Mesa 22.1.3 direct render: Yes
Audio:
  Device-1: Intel Ice Lake-LP Smart Sound Audio vendor: Lenovo
    driver: sof-audio-pci-intel-icl bus-ID: 00:1f.3
  Sound Server-1: ALSA v: k5.18.10-200.fc36.x86_64 running: yes
  Sound Server-2: PulseAudio v: 15.0 running: no
  Sound Server-3: PipeWire v: 0.3.54 running: yes
Network:
  Device-1: Intel Ice Lake-LP PCH CNVi WiFi driver: iwlwifi v: kernel
    bus-ID: 00:14.3
  IF: wlp0s20f3 state: up mac: <filter>
Bluetooth:
  Device-1: Intel AX201 Bluetooth type: USB driver: btusb v: 0.8
    bus-ID: 3-10:5
  Report: bt-adapter ID: hci0 rfk-id: 3 state: down
    bt-service: enabled,running rfk-block: hardware: no software: yes
    address: <filter>
Drives:
  Local Storage: total: 1.82 TiB used: 448.25 GiB (24.1%)
  ID-1: /dev/nvme0n1 vendor: Samsung model: SSD 970 EVO Plus 2TB
    size: 1.82 TiB temp: 44.9 C
Partition:
  ID-1: / size: 1.82 TiB used: 447.98 GiB (24.1%) fs: btrfs
    dev: /dev/nvme0n1p3
  ID-2: /boot size: 973.4 MiB used: 256.4 MiB (26.3%) fs: ext4
    dev: /dev/nvme0n1p2
  ID-3: /boot/efi size: 598.8 MiB used: 14 MiB (2.3%) fs: vfat
    dev: /dev/nvme0n1p1
  ID-4: /home size: 1.82 TiB used: 447.98 GiB (24.1%) fs: btrfs
    dev: /dev/nvme0n1p3
Swap:
  ID-1: swap-1 type: zram size: 8 GiB used: 0 KiB (0.0%) dev: /dev/zram0
Sensors:
  System Temperatures: cpu: 61.0 C mobo: N/A
  Fan Speeds (RPM): N/A
Info:
  Processes: 352 Uptime: 6h 30m Memory: 15.09 GiB used: 5.56 GiB (36.8%)
  Init: systemd target: graphical (5) Compilers: gcc: 12.1.1 Packages: N/A
  note: see --pkg Shell: tcsh v: 6.24.01 inxi: 3.3.19

I propose you then to check with an new created user to see if the default works.

Since when you have this problems ? Could be that the new kernel needs an upgrade of firmware? Did you check if there is something new available?

The problem appears to have been active for some time, in that sound to my 5.1 speakers was not great, but I only investigated closely yesterday and today. My system was fully updated both yesterday and this morning, using sudo dnf update. I’ll try with a new user.

No difference with a fresh user. The HDMI outputs are still listed as 2-channel by pactl list short sinks and speaker-test -D hw:0,4 -cN works only for N=2.

It looks as if SOF does not support multi-channel sound at all through integrated HDMI channels on Intel CPUs. I’m not sure whether this is a permanent situation.