From a593bcb0ec3ebbca363271db7a24a2517a68f326 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 17 Jan 2024 13:03:37 +0100 Subject: [PATCH] 6.1-stable patches added patches: asoc-sof-intel-hda-codec-delay-the-codec-device-registration.patch --- ...-delay-the-codec-device-registration.patch | 100 ++++++++++++++++++ queue-6.1/series | 1 + 2 files changed, 101 insertions(+) create mode 100644 queue-6.1/asoc-sof-intel-hda-codec-delay-the-codec-device-registration.patch diff --git a/queue-6.1/asoc-sof-intel-hda-codec-delay-the-codec-device-registration.patch b/queue-6.1/asoc-sof-intel-hda-codec-delay-the-codec-device-registration.patch new file mode 100644 index 00000000000..ef6d82c8500 --- /dev/null +++ b/queue-6.1/asoc-sof-intel-hda-codec-delay-the-codec-device-registration.patch @@ -0,0 +1,100 @@ +From c344ef36dbc2fe920ec7291b68b11fe867a2c8f6 Mon Sep 17 00:00:00 2001 +From: Peter Ujfalusi +Date: Thu, 7 Dec 2023 11:54:25 +0200 +Subject: ASoC: SOF: Intel: hda-codec: Delay the codec device registration + +From: Peter Ujfalusi + +commit c344ef36dbc2fe920ec7291b68b11fe867a2c8f6 upstream. + +The current code flow is: +1. snd_hdac_device_register() +2. set parameters needed by the hdac driver +3. request_codec_module() + the hdac driver is probed at this point + +During boot the codec drivers are not loaded when the hdac device is +registered, it is going to be probed later when loading the codec module, +which point the parameters are set. + +On module remove/insert +rmmod snd_sof_pci_intel_tgl +modprobe snd_sof_pci_intel_tgl + +The codec module remains loaded and the driver will be probed when the +hdac device is created right away, before the parameters for the driver +has been configured: + +1. snd_hdac_device_register() + the hdac driver is probed at this point +2. set parameters needed by the hdac driver +3. request_codec_module() + will be a NOP as the module is already loaded + +Move the snd_hdac_device_register() later, to be done right before +requesting the codec module to make sure that the parameters are all set +before the device is created: + +1. set parameters needed by the hdac driver +2. snd_hdac_device_register() +3. request_codec_module() + +This way at the hdac driver probe all parameters will be set in all cases. + +Link: https://github.com/thesofproject/linux/issues/4731 +Fixes: a0575b4add21 ("ASoC: hdac_hda: Conditionally register dais for HDMI and Analog") +Signed-off-by: Peter Ujfalusi +Reviewed-by: Bard Liao +Reviewed-by: Pierre-Louis Bossart +Link: https://lore.kernel.org/r/20231207095425.19597-1-peter.ujfalusi@linux.intel.com +Signed-off-by: Mark Brown +Link: https://lore.kernel.org/r/ZYvUIxtrqBQZbNlC@shine.dominikbrodowski.net +Link: https://bugzilla.kernel.org/show_bug.cgi?id=218304 +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman +--- + sound/soc/sof/intel/hda-codec.c | 18 +++++++++--------- + 1 file changed, 9 insertions(+), 9 deletions(-) + +--- a/sound/soc/sof/intel/hda-codec.c ++++ b/sound/soc/sof/intel/hda-codec.c +@@ -54,8 +54,16 @@ static int request_codec_module(struct h + + static int hda_codec_load_module(struct hda_codec *codec) + { +- int ret = request_codec_module(codec); ++ int ret; ++ ++ ret = snd_hdac_device_register(&codec->core); ++ if (ret) { ++ dev_err(&codec->core.dev, "failed to register hdac device\n"); ++ put_device(&codec->core.dev); ++ return ret; ++ } + ++ ret = request_codec_module(codec); + if (ret <= 0) { + codec->probe_id = HDA_CODEC_ID_GENERIC; + ret = request_codec_module(codec); +@@ -112,7 +120,6 @@ EXPORT_SYMBOL_NS(hda_codec_jack_check, S + static struct hda_codec *hda_codec_device_init(struct hdac_bus *bus, int addr, int type) + { + struct hda_codec *codec; +- int ret; + + codec = snd_hda_codec_device_init(to_hda_bus(bus), addr, "ehdaudio%dD%d", bus->idx, addr); + if (IS_ERR(codec)) { +@@ -122,13 +129,6 @@ static struct hda_codec *hda_codec_devic + + codec->core.type = type; + +- ret = snd_hdac_device_register(&codec->core); +- if (ret) { +- dev_err(bus->dev, "failed to register hdac device\n"); +- put_device(&codec->core.dev); +- return ERR_PTR(ret); +- } +- + return codec; + } + diff --git a/queue-6.1/series b/queue-6.1/series index 8a077696792..f1d0915cf3f 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -81,3 +81,4 @@ arm-sun9i-smp-fix-return-code-check-of-of_property_m.patch drm-crtc-fix-uninitialized-variable-use.patch alsa-hda-realtek-fix-mute-and-mic-mute-leds-for-hp-envy-x360-13-ay0xxx.patch acpi-resource-add-another-dmi-match-for-the-tongfang-gmxxgxx.patch +asoc-sof-intel-hda-codec-delay-the-codec-device-registration.patch -- 2.47.3