Re: [PATCH 1/2] ALSA: hda/hdmi: Add helper function to check if a device is HDMI codec

Péter Ujfalusi
2023-11-28T10:15:40Z

On 28/11/2023 12:02, Takashi Iwai wrote:
> On Tue, 28 Nov 2023 10:53:56 +0100,
> Péter Ujfalusi wrote:
>>
>>
>>
>> On 28/11/2023 11:39, Takashi Iwai wrote:
>>> Hm... I still find it's a bad move to use an exported symbol from
>>> another codec driver.
>>
>> The other option is to check for 0x4 (or address 2), but I'm not sure if
>> this is Intel only or universally true for HDMI codecs.
>>
>>> And, I wonder what if you have a system that has only one HDMI codec
>>> without analog one? Would it still work with your change?
>>
>> Yes, it works with only HDMI codec (for example on SoundWire laptops) or
>> with UP2 board which only have HDMI audio support by default.
>
> Interesting. With your patch 2, hdac_hda_hdmi_codec is without the
> DAPM definitions, and even if that's the only one that is registered,
> it will still work? So it means that it works without DAPM
> definitions at all?

Well, it is a bit more 'interesting' from that angle.
for patch two we needed:
https://lore.kernel.org/linux-sound/20231124124015.15878-1-peter.ujfalusi@linux.intel.com/

The reason is that prior to patch 2 the analog codec would create the
DAPM widgets for the HDMI also and the DAPM route would be available but
the HDMI would still not work:
we had PCMs for HDMI but non operational ones.

If we had a codec+HDMI then we would have the warnings that the second
codec is registering the same DAPM widgets again.

With the linked patch plus this series we will not register the DAPM
widgets and the machine driver would drop the routes.
The PCMs will be still created and they will be still non functional but
we will have no warning when the system have two codecs.

The core HDA+patch_hdmi is needed for the hdac_hda to have working HDMI
audio, but the patch init is after the codec driver's probe:

# dmesg | grep peter
[ 4088.698111] [peter] hdac_hda_dev_probe: is_hdmi_codec(): 0
[ 4088.698112] [peter] hdac_hda_dev_probe: hdev->is_hdmi: 0
[ 4088.698114] [peter] hdac_hda_dev_probe: snd_hda_device_is_hdmi(): 1
[ 4088.862882] [peter] patch_i915_tgl_hdmi: ENTER
[ 4088.862886] [peter] alloc_intel_hdmi: ENTER
[ 4088.872269] [peter] generic_hdmi_build_pcms: ENTER
[ 4088.872279] [peter] hdac_hda_codec_probe: is_hdmi_codec(): 1

We need to know if the codec is HDMI or not in hdac_hda_dev_probe()

I would rather not risk to move the hdac_hda as Intel only using address
2 as HDMI indication - which I'm still not sure if it is Intel only or
generic HDA convention.

--
Péter