On 27/11/2023 17:43, Takashi Iwai wrote:
On Mon, 27 Nov 2023 16:40:57 +0100,
--- a/include/sound/hdaudio.h +++ b/include/sound/hdaudio.h @@ -95,6 +95,7 @@ struct hdac_device { bool lazy_cache:1; /* don't wake up for writes */ bool caps_overwriting:1; /* caps overwrite being in process */ bool cache_coef:1; /* cache COEF read/write too */
- bool is_hdmi:1; /* a HDMI/DP codec */ unsigned int registered:1; /* codec was registered */
};
--- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -2597,6 +2597,7 @@ static int patch_generic_hdmi(struct hda_codec *codec) }
generic_hdmi_init_per_pins(codec);
- codec->core.is_hdmi = true; return 0;
}
@@ -3472,6 +3473,7 @@ static int patch_simple_hdmi(struct hda_codec *codec, spec->pcm_playback = simple_pcm_playback;
codec->patch_ops = simple_hdmi_patch_ops;
codec->core.is_hdmi = true;
return 0;
}
I see, so this is what I was not sure how to do ;) I will rework the series and resend tomorrow.
Thanks for the code snippet, I will make you as author of it, if it is OK for you.
Sure, no problem.
The flag does not work with SOF stack which uses the hdac_hda codec driver:
patch_generic_hdmi() and patch_simple_hdmi() is not entered at all, so the flag is not set.
The codec driver have is_hdmi_codec() helper to check the struct hda_pcm.pcm_type, but that is not set early enough either.
The is HDMI or not needs to be known in hdac_hda_dev_probe(), I think this was one of the reason I have opted to have the exported function. We just don't have other information at the dev probe time.
# dmesg | grep peter [ 3.810841] [peter] hdac_hda_dev_probe: is_hdmi_codec(): 0 [ 3.810846] [peter] hdac_hda_dev_probe: hdev->is_hdmi: 0 [ 3.810848] [peter] hdac_hda_dev_probe: snd_hda_device_is_hdmi(): 0 ... [ 3.814497] [peter] hdac_hda_dev_probe: is_hdmi_codec(): 0 [ 3.814499] [peter] hdac_hda_dev_probe: hdev->is_hdmi: 0 [ 3.814500] [peter] hdac_hda_dev_probe: snd_hda_device_is_hdmi(): 1 ... [ 3.986610] [peter] generic_hdmi_build_pcms: ENTER [ 3.986627] [peter] hdac_hda_codec_probe: is_hdmi_codec(): 1 ... [ 3.996383] [peter] snd_hda_parse_pin_defcfg: ENTER [ 4.001562] [peter] hdac_hda_codec_probe: is_hdmi_codec(): 0