Intel HDA's HDMI audio output on docked Thinkpad T410S not appearing to Pulse

Having a hard time getting my Thinkpad’s dock HDMI output to be usable as an audio output. Has worked fine for years in various flavors of modern Windows. I have been having effectively the same issue with a “missing” HDMI audio output on Mint 20.2 Cinnamon and now Leap 15.3. Leap’s video output from the same port is a lot more stable, and I really want to stick with it if I can get it working, but this machine is an HTPC and I need the HDMI audio output working.

/sbin/lspci is showing the ID’d sound hardware in my T410s as “Intel Corporation 5 Series/3400 Series Chipset High Definition Audio,” and the kernel driver snd_hda_intel is being used. The HDMI port is only on the dock; analog audio ports are on the machine itself. The system does sees able to see the dock’s HDMI output at some level - /proc/asound/card0/codec#3 is “Intel IbexPeak HDMI” - but only the analog outputs are visible in pavucontrol and YAST.

I’ve worked through some of the basic openSUSE docs on audio troubleshooting, including the Intel HDA specific guide. Unfortunately things seem to be a little out of date in those documents.

…In particular, the Intel HDA guide looks like it might be leading me to a way to “force” the system to identify the HDMI port as a digital output through codec selection. But I installed kernel-source as instructed, and there is no /alsa subdir in /usr/src/linux-5.3.18-59.27/Documentation/sound, nor is there an ALSA-Configuration.txt at that path, which is apparently where I’m supposed to get the “best” module name to put into 50-sound.conf. There is an alsa-configuration.rst file, but this appears to be a different deal and contains no lists of module names as depicted in the support doc.

What can I try next?

I would start with checking if HDMI is supported by Pulse Audio, on my T550 using “pactl list” I see:

Card #0 
        Name: alsa_card.pci-0000_00_03.0 
        Driver: module-alsa-card.c 
        Owner Module: 6 
        Properties: 
                alsa.card = "0" 
                alsa.card_name = "HDA Intel HDMI" 
                alsa.long_card_name = "HDA Intel HDMI at 0xf1230000 irq 51" 
                alsa.driver_name = "snd_hda_intel" 
                device.bus_path = "pci-0000:00:03.0" 
                sysfs.path = "/devices/pci0000:00/0000:00:03.0/sound/card0" 
                device.bus = "pci" 
                device.vendor.id = "8086" 
                device.vendor.name = "Intel Corporation" 
                device.product.id = "160c" 
                device.product.name = "Broadwell-U Audio Controller" 
                device.form_factor = "internal" 
                device.string = "0" 
                device.description = "Built-in Audio" 
                module-udev-detect.discovered = "1" 
                device.icon_name = "audio-card-pci" 
        Profiles: 
                output:hdmi-stereo: Digital Stereo (HDMI) Output (sinks: 1, sources: 0, priority: 5900, available: no) 
                output:hdmi-surround: Digital Surround 5.1 (HDMI) Output (sinks: 1, sources: 0, priority: 800, available: no) 
                output:hdmi-surround71: Digital Surround 7.1 (HDMI) Output (sinks: 1, sources: 0, priority: 800, available: no) 
                output:hdmi-stereo-extra1: Digital Stereo (HDMI 2) Output (sinks: 1, sources: 0, priority: 5700, available: no) 
                output:hdmi-surround-extra1: Digital Surround 5.1 (HDMI 2) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                output:hdmi-surround71-extra1: Digital Surround 7.1 (HDMI 2) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                output:hdmi-stereo-extra2: Digital Stereo (HDMI 3) Output (sinks: 1, sources: 0, priority: 5700, available: no) 
                output:hdmi-surround-extra2: Digital Surround 5.1 (HDMI 3) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                output:hdmi-surround71-extra2: Digital Surround 7.1 (HDMI 3) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                output:hdmi-stereo-extra3: Digital Stereo (HDMI 4) Output (sinks: 1, sources: 0, priority: 5700, available: no) 
                output:hdmi-surround-extra3: Digital Surround 5.1 (HDMI 4) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                output:hdmi-surround71-extra3: Digital Surround 7.1 (HDMI 4) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                output:hdmi-stereo-extra4: Digital Stereo (HDMI 5) Output (sinks: 1, sources: 0, priority: 5700, available: no) 
                output:hdmi-surround-extra4: Digital Surround 5.1 (HDMI 5) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                output:hdmi-surround71-extra4: Digital Surround 7.1 (HDMI 5) Output (sinks: 1, sources: 0, priority: 600, available: no) 
                off: Off (sinks: 0, sources: 0, priority: 0, available: yes) 
        Active Profile: off 
        Ports: 
                hdmi-output-0: HDMI / DisplayPort (type: HDMI, priority: 5900, latency offset: 0 usec, not available) 
                        Properties: 
                                device.icon_name = "video-display" 
                        Part of profile(s): output:hdmi-stereo, output:hdmi-surround, output:hdmi-surround71 
                hdmi-output-1: HDMI / DisplayPort 2 (type: HDMI, priority: 5800, latency offset: 0 usec, not available) 
                        Properties: 
                                device.icon_name = "video-display" 
                        Part of profile(s): output:hdmi-stereo-extra1, output:hdmi-surround-extra1, output:hdmi-surround71-extra1 
                hdmi-output-2: HDMI / DisplayPort 3 (type: HDMI, priority: 5700, latency offset: 0 usec, not available) 
                        Properties: 
                                device.icon_name = "video-display" 
                        Part of profile(s): output:hdmi-stereo-extra2, output:hdmi-surround-extra2, output:hdmi-surround71-extra2 
                hdmi-output-3: HDMI / DisplayPort 4 (type: HDMI, priority: 5600, latency offset: 0 usec, not available) 
                        Properties: 
                                device.icon_name = "video-display" 
                        Part of profile(s): output:hdmi-stereo-extra3, output:hdmi-surround-extra3, output:hdmi-surround71-extra3 
                hdmi-output-4: HDMI / DisplayPort 5 (type: HDMI, priority: 5500, latency offset: 0 usec, not available) 
                        Properties: 
                                device.icon_name = "video-display" 
                        Part of profile(s): output:hdmi-stereo-extra4, output:hdmi-surround-extra4, output:hdmi-surround71-extra4 

Some Thinkpad T410S laptops uses dual graphics with Intel builtin GPU + NVIDIA Quadro NVS 3100M, and you need working driver for Nvidia. Nouveau driver may work.
For HDMI sound you need working HDCP. Try to use DP port on a laptop.
It is better to use USB audio card.

I cannot copy/paste directly from the T410s machine right now, but yeah, none of my visible profiles on pactl are HDMI - all analog just as in the graphic frontends. As i said, I have had no problem using the DisplayPort –> HDMI output under Windows to send audio as well as video so I’m not sure why both Mint and openSUSE are missing this ability in this particular chipset.

I did mis-speak - it’s actually a DP port; the laptop itself has one as does the dock. This particular T410s has only the Intel chipset, no NVIDIA. I do have tons of USB audio cards but unfortunately, to keep the routing as simple as possible in a home audio system that is already too complicated for anyone but me in this household, I really need the DP / HDMI audio output working. Any suggestions on getting HDCP going next?

Thank you both for your input!

Further to any help other’s may offer on this thread, could you provide a bit more diagnostic information?

Do so with your Thinkpad plugged into the docking port and HDMI setup such that you think you should be hearing audio. Then with PC connected to the Internet, open an Xterm/Konsole and with regular user permissions send the following command to run the diagnostic script (which will provide more info):


/usr/sbin/alsa-info.sh

Select the SHARE/UPLOAD information when prompted and let the script run to completion. Take a look in the xterm/konsole after diagnostic script execution is complete, and it will provide you a URL/address where the diagnostic information was uploaded. Please post that link here.

That may give us some clues as to where the issue starts.

I received a fleeting, near-invisible permissions error running the alsa-info script the first time, so I su’d for the second run and the output for the dmesg section was totally different. I think that probably contains the answer, or a very strong clue in any event - when run as root, dmesg is providing complaints about an inability to bind the “i915 codec” for HDMI audio. This is found in lines 1094 and 1095 of the output file.

http://alsa-project.org/db/?f=c1689a3f6285464cc53a2ff701e668f02c7608f9

Not sure what my next step from here should be though. Thanks for this, I’m feeling pretty hopeful about this now!

@VeganThatEatsTheRich:

Possibly, the interworking with “Pipewire” –

  • Today’s patch “openSUSE-2021-1385” provided the hint –

Adjust dependencies to allow pipewire-pulseaudio as well


 > systemctl **--user** list-unit-files | grep -i 'pipe'
pipewire-media-session.service                                        masked    enabled      
pipewire.service                                                      masked    disabled     
pipewire.socket                                                       masked    enabled      
 > 

The issue may well be that, the User Pipewire systemd services are enabled by default …

  • With Pulse still being active …

<https://wiki.archlinux.org/title/PipeWire&gt;

Unfortunately, running with root permissions is not as useful, as the interest is with the regular user account/permissions and not with root permissions. So possibly most of the below for your ThinkPad 420s may be partly meaningless, as its the wrong user. But I will try anyway.

When you ran with root permissions (?) I don’t see pipewire … Your PC audio hardware codec is the Conexant CX20585 for analog audio. I note for HDMI Codec: Intel IbexPeak HDMI.

Unfortunately, APLAY only shows analog audio and not the HDMI. I also see no HDMI entries in the mixer. Clearly the issue is with the alsa sound driver loading. Yet I note the kernel module “snd_hda_codec_hdmi” is loaded.

As you noted the dmesg reports:


   12.042999] snd_hda_codec_hdmi hdaudioC0D3: No i915 binding for Intel HDMI/DP codec
   12.072449] hdaudio hdaudioC0D3: Unable to bind the codec 

That indicates an issue.

But before spending time investigating that, … I note there is an ‘ArchLinux’ wiki for this Thinkpad ( Laptop/Lenovo - ArchWiki ), and they recommend you use a module in a config file upon boot. I recommend you apply the code not as in the Arch Linux wiki, but rather instead, if not already created, create a text file: /etc/modprobe.d/50-sound.conf

Put this line in that file:


options snd-hda-intel model=thinkpad

reboot and test. If it doesn’t work, remove that entry.

Out out of curiousity, despite your getting errors when running the alsa-info.sh script as a regular user, is it not possible to run it? Seeing the diagnostic info with regular user permissions is important to better understand the issue.

Here’s the alsa-info output run from the regular user: http://alsa-project.org/db/?f=846000773ecd43272f4a4628429b46c38722b9b8 - please note that this is after I’ve added the 50-sound.conf file and included the snd-hda-intel line specified:

…and unfortunately, this had no effect or improvement. Adding that line to 50-sound.conf was one of the things I’d originally hoped to try, once I could identify the desired module, so thanks for helping me try that much at least!

Yep, sorry about that. As stated before, I had a permissions issue flash before my eyes on first run, so I presumed that getting useful output would require root. Turns out it was just warning me that it couldn’t run dmesg. Eh, so su me…?

(Apologies for that terrible pun, but incidentally, the root output of alsa-info.sh after the 50-sound.conf “update” is here. I haven’t diffed the before-and-after personally, though I did check the dmesg section of the reports and I can see the issue with the i915 binding is clearly stated in both).

My unit is the T410s (released 2010), a generation or thereabouts before the T420s (released 2011). Probably does not make much or any difference in this particular case, though! As already stated, I’d been honing in a config file solution originally via the Leap support documentation, but so far no dice with that.

I am seeing that there are a fair number of results on various Linux forums for that dmesg ‘no i915 binding’ message, some of them having to do with enabling kernel mode setting. I’m not totally sure of the best way to try this just yet, and I’m guessing it may involve GRUB, but I have no clue.

Thanks. It appears very similar to the one run with root permissions. Given the module did not work in the 50-sound.conf file, I recommend you remove that line, as it does no good.

Could you check the BIOS to confirm HDMI is still enabled? I don’t think this the issue, but its worth checking.

I note 2 bug reports on this issue:

Based on what you posted, and what surfing indicated to me, there appears to have been a regression in the GNU/Linux kernel in regard to the alsa driver and HDMI for the Thinkpad 410S. I think you may be best to raise a bug report on the openSUSE LEAP-15.3 kernel. That will get the attention of the SUSE-GmBH alsa sound driver packager/kernel developer, who is also an alsa sound driver developer, and he might be the best person on this planet !! to help you on this.

Apologies that I am not able to help further.
.

In my case, the i915 graphics driver was not registering this audio component with the kernel. This failure can happen at various stages of loading and initializing the i915 graphics driver. For me, it was due to the lack of availability of Kernel Mode Setting (KMS). The i915 driver requires KMS to operate properly and will not initialize and register the required audio components if it is not enabled.

I fixed this by adding the following line to /etc/modprobe.d/modesetting.conf:

options i915 modeset=1

Yep, I already found and tried that one too - made no difference. I also went ahead and tried forcing load in initramfs using dracut config files (at least to the best of my n00b ability, and I did see a difference in relatively earlier load time in dmesg), but that too did not work out.

Yep, it’s enabled at the BIOS.

These are all great tips - thanks, and no apologies needed whatsoever; I really (really!) appreciate all the help. At this point I suspect you’re probably right on that this is a legitimate bug, so I will go ahead and try to post a bug report today or tomorrow. For the moment, though, I’m going to go ahead and swap in another machine for the T410s, and hopefully this will find a resolution at some point so it can go back into service.