Linux Sound subsystem development
 help / color / mirror / Atom feed
* [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users
@ 2026-04-22  3:03 Kuninori Morimoto
  2026-04-22  3:04 ` [RFC][PATCH v4 1/2] ASoC: topology: make sure to call snd_soc_remove_pcm_runtime() Kuninori Morimoto
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Kuninori Morimoto @ 2026-04-22  3:03 UTC (permalink / raw)
  To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
	Cezary Rojewski, linux-sound


Hi Mark, Cezary

Topology is using (A), but its paired (B) might not be called.
Because of it, it will be hungup, because soc_cleanup_card_resources()
will access to devm_kzalloc():ed link (= rtd->link) which was already
lost in that timing.
    
	(A) snd_soc_add_pcm_runtimes()
	(B) snd_soc_remove_pcm_runtime()
    
To solve this issue, it uses devres_alloc() and call (B) in topology.

But I can't test it. It needs Acked-by / Tested-by from Cezary.
I added [RFC]

v3 -> v4
	- call topology snd_soc_remove_pcm_runtime()
	- rebind() function will handle all cards by itself.

v2 -> v3
	- separate bind/unbind/rebind and unbind list handling
	- tidyup git-log and Subject

v1 -> v2
	- tidyup handling of client_mutex


Kuninori Morimoto (2):
  ASoC: topology: make sure to call snd_soc_remove_pcm_runtime()
  ASoC: core: use Complete rebind cards by default for all users

 include/sound/soc.h      |  6 ++--
 sound/soc/soc-card.c     |  4 +--
 sound/soc/soc-core.c     | 67 ++++++++++------------------------------
 sound/soc/soc-devres.c   |  7 -----
 sound/soc/soc-topology.c | 55 +++++++++++++++++++++++++++++----
 5 files changed, 71 insertions(+), 68 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC][PATCH v4 1/2] ASoC: topology: make sure to call snd_soc_remove_pcm_runtime()
  2026-04-22  3:03 [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users Kuninori Morimoto
@ 2026-04-22  3:04 ` Kuninori Morimoto
  2026-04-22  3:04 ` [RFC][PATCH v4 2/2] ASoC: core: use Complete rebind cards by default for all users Kuninori Morimoto
  2026-04-26 14:53 ` [RFC][PATCH v4 0/2] " Cezary Rojewski
  2 siblings, 0 replies; 6+ messages in thread
From: Kuninori Morimoto @ 2026-04-22  3:04 UTC (permalink / raw)
  To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
	Cezary Rojewski, linux-sound

soc-topology will call (A), so it needs to call (B) when link was released.
Otherwise, soc_cleanup_card_resources() will access to devm_kzalloc():ed
link (= rtd->link) which was already lost in that timing.

	(A) snd_soc_add_pcm_runtimes()
	(B) snd_soc_remove_pcm_runtime()

To solve this issue, it uses devres_alloc() and call (B)

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 sound/soc/soc-topology.c | 55 +++++++++++++++++++++++++++++++++++-----
 1 file changed, 49 insertions(+), 6 deletions(-)

diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 85679c8e02299..4542d6c8c01ac 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -419,6 +419,11 @@ static void soc_tplg_remove_dai(struct snd_soc_component *comp,
 	list_del(&dobj->list);
 }
 
+static void soc_tplg_remove_pcm(struct snd_soc_card *card, struct snd_soc_dai_link *link)
+{
+	snd_soc_remove_pcm_runtime(card, snd_soc_get_pcm_runtime(card, link));
+}
+
 /* remove link configurations */
 static void soc_tplg_remove_link(struct snd_soc_component *comp,
 	struct snd_soc_dobj *dobj, int pass)
@@ -436,8 +441,7 @@ static void soc_tplg_remove_link(struct snd_soc_component *comp,
 
 	/* Ignored links do not need to be removed, they are not added */
 	if (!link->ignore)
-		snd_soc_remove_pcm_runtime(comp->card,
-				snd_soc_get_pcm_runtime(comp->card, link));
+		soc_tplg_remove_pcm(comp->card, link);
 }
 
 /* unload dai link */
@@ -1463,20 +1467,51 @@ static void set_link_flags(struct snd_soc_dai_link *link,
 			1 : 0;
 }
 
+struct tplg_link {
+	struct snd_soc_card *card;			// card pointer which connect link
+	struct snd_soc_dai_link link;
+	struct snd_soc_dai_link_component dlc[3];	// cpu + codec + platform
+};
+
+static void soc_tplg_link_release(struct device *dev, void *res)
+{
+	struct tplg_link *tplg_link = *(struct tplg_link **)res;
+
+	soc_tplg_remove_pcm(tplg_link->card, &tplg_link->link);
+}
+
 /* create the FE DAI link */
 static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
 	struct snd_soc_tplg_pcm *pcm)
 {
+	struct tplg_link *tplg_link;
+	struct tplg_link **ptr;
 	struct snd_soc_dai_link *link;
 	struct snd_soc_dai_link_component *dlc;
 	int ret;
 
-	/* link + cpu + codec + platform */
-	link = devm_kzalloc(tplg->dev, sizeof(*link) + (3 * sizeof(*dlc)), GFP_KERNEL);
-	if (link == NULL)
+	/*
+	 * [NOTE]
+	 *
+	 * It will call (A), so it needs to call (B) when link was released.
+	 * Otherwise, soc_cleanup_card_resources() will access to devm_kzalloc():ed
+	 * link (= rtd->link) which was already lost in that timing.
+	 *
+	 *	(A) snd_soc_add_pcm_runtimes()
+	 *	(B) snd_soc_remove_pcm_runtime()
+	 *
+	 * To solve this issue, it uses devres_alloc() and call soc_tplg_link_release()
+	 * which will call (B)
+	 */
+	tplg_link = devm_kzalloc(tplg->dev, sizeof(*tplg_link), GFP_KERNEL);
+	ptr = devres_alloc(soc_tplg_link_release, sizeof(*ptr), GFP_KERNEL);
+	if (!tplg_link || !ptr)
 		return -ENOMEM;
 
-	dlc = (struct snd_soc_dai_link_component *)(link + 1);
+	tplg_link->card = tplg->comp->card;	// will be used in soc_tplg_link_release()
+
+	link = &tplg_link->link;		// will be used in soc_tplg_link_release()
+	dlc =  tplg_link->dlc;
 
 	link->cpus	= &dlc[0];
 	link->num_cpus	 = 1;
@@ -1539,9 +1574,17 @@ static int soc_tplg_fe_link_create(struct soc_tplg *tplg,
 	if (ret < 0) {
 		if (ret != -EPROBE_DEFER)
 			dev_err(tplg->dev, "ASoC: adding FE link failed\n");
+		devres_free(ptr);
 		goto err;
 	}
 
+	/*
+	 * make sure to call snd_soc_remove_pcm_runtime()
+	 * see above [NOTE]
+	 */
+	*ptr = tplg_link;
+	devres_add(tplg->dev, ptr);
+
 	list_add(&link->dobj.list, &tplg->comp->dobj_list);
 
 	return 0;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [RFC][PATCH v4 2/2] ASoC: core: use Complete rebind cards by default for all users
  2026-04-22  3:03 [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users Kuninori Morimoto
  2026-04-22  3:04 ` [RFC][PATCH v4 1/2] ASoC: topology: make sure to call snd_soc_remove_pcm_runtime() Kuninori Morimoto
@ 2026-04-22  3:04 ` Kuninori Morimoto
  2026-04-26 14:53 ` [RFC][PATCH v4 0/2] " Cezary Rojewski
  2 siblings, 0 replies; 6+ messages in thread
From: Kuninori Morimoto @ 2026-04-22  3:04 UTC (permalink / raw)
  To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
	Cezary Rojewski, linux-sound

commit a3375522bb5e2 ("ASoC: core: Complete support for card rebinding")
supports complete card rebinding, but it uses unbalanced pair functions
It added devm_snd_soc_bind_card() (= bind), but its inverse function is
snd_soc_unregister_card() (= unregister), and it adds new
devm_snd_soc_register_deferrable_card() (= register), but it doesn't have
inverse function (= merged with above inverse of bind function).

This feature is mainly used on Intel driver, but all driver can use it.
Let's use it on all drivers.

bin/unbind functions are soc-core.c local, so let's rename it.
It added new rebind function.
	snd_soc_bind_card()	-> soc_card_bind()
	snd_soc_unbind_card()	-> soc_card_unbind()
	snd_soc_rebind_card()	-> soc_card_rebind()

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 include/sound/soc.h    |  6 ++--
 sound/soc/soc-card.c   |  4 +--
 sound/soc/soc-core.c   | 67 ++++++++++--------------------------------
 sound/soc/soc-devres.c |  7 -----
 4 files changed, 22 insertions(+), 62 deletions(-)

diff --git a/include/sound/soc.h b/include/sound/soc.h
index 453548988d381..87bcb33cbde65 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -431,7 +431,10 @@ struct snd_soc_jack_pin;
 int snd_soc_register_card(struct snd_soc_card *card);
 void snd_soc_unregister_card(struct snd_soc_card *card);
 int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card);
-int devm_snd_soc_register_deferrable_card(struct device *dev, struct snd_soc_card *card);
+
+/* REMOVE ME */
+#define devm_snd_soc_register_deferrable_card	devm_snd_soc_register_card
+
 #ifdef CONFIG_PM_SLEEP
 int snd_soc_suspend(struct device *dev);
 int snd_soc_resume(struct device *dev);
@@ -1087,7 +1090,6 @@ struct snd_soc_card {
 	unsigned int fully_routed:1;
 	unsigned int probed:1;
 	unsigned int component_chaining:1;
-	struct device *devres_dev;
 
 	void *drvdata;
 };
diff --git a/sound/soc/soc-card.c b/sound/soc/soc-card.c
index 235427d690617..04d1c2ec11484 100644
--- a/sound/soc/soc-card.c
+++ b/sound/soc/soc-card.c
@@ -151,7 +151,7 @@ int snd_soc_card_probe(struct snd_soc_card *card)
 		 * about "late_probe".
 		 *
 		 * see
-		 *	snd_soc_bind_card()
+		 *	soc_card_bind()
 		 *	snd_soc_card_late_probe()
 		 */
 		card->probed = 1;
@@ -176,7 +176,7 @@ int snd_soc_card_late_probe(struct snd_soc_card *card)
 	 * for all cases.
 	 *
 	 * see
-	 *	snd_soc_bind_card()
+	 *	soc_card_bind()
 	 *	snd_soc_card_probe()
 	 */
 	card->probed = 1;
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 13e933d2883e8..9b1ae88127d79 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -2147,7 +2147,7 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card)
 	}
 }
 
-static void snd_soc_unbind_card(struct snd_soc_card *card)
+static void soc_card_unbind(struct snd_soc_card *card)
 {
 	if (snd_soc_card_is_instantiated(card)) {
 		card->instantiated = false;
@@ -2155,7 +2155,7 @@ static void snd_soc_unbind_card(struct snd_soc_card *card)
 	}
 }
 
-static int snd_soc_bind_card(struct snd_soc_card *card)
+static int soc_card_bind(struct snd_soc_card *card)
 {
 	struct snd_soc_pcm_runtime *rtd;
 	struct snd_soc_component *component;
@@ -2314,46 +2314,16 @@ static int snd_soc_bind_card(struct snd_soc_card *card)
 	return ret;
 }
 
-static void devm_card_bind_release(struct device *dev, void *res)
+static void soc_card_rebind(void)
 {
-	snd_soc_unregister_card(*(struct snd_soc_card **)res);
-}
+	struct snd_soc_card *card, *c;
 
-static int devm_snd_soc_bind_card(struct device *dev, struct snd_soc_card *card)
-{
-	struct snd_soc_card **ptr;
-	int ret;
+	list_for_each_entry_safe(card, c, &unbind_card_list, list) {
+		int ret = soc_card_bind(card);
 
-	ptr = devres_alloc(devm_card_bind_release, sizeof(*ptr), GFP_KERNEL);
-	if (!ptr)
-		return -ENOMEM;
-
-	ret = snd_soc_bind_card(card);
-	if (ret == 0 || ret == -EPROBE_DEFER) {
-		*ptr = card;
-		devres_add(dev, ptr);
-	} else {
-		devres_free(ptr);
+		if (ret != -EPROBE_DEFER)
+			list_del_init(&card->list);
 	}
-
-	return ret;
-}
-
-static int snd_soc_rebind_card(struct snd_soc_card *card)
-{
-	int ret;
-
-	if (card->devres_dev) {
-		devres_destroy(card->devres_dev, devm_card_bind_release, NULL, NULL);
-		ret = devm_snd_soc_bind_card(card->devres_dev, card);
-	} else {
-		ret = snd_soc_bind_card(card);
-	}
-
-	if (ret != -EPROBE_DEFER)
-		list_del_init(&card->list);
-
-	return ret;
 }
 
 /* probes a new socdev */
@@ -2578,14 +2548,10 @@ int snd_soc_register_card(struct snd_soc_card *card)
 
 	guard(mutex)(&client_mutex);
 
-	if (card->devres_dev) {
-		ret = devm_snd_soc_bind_card(card->devres_dev, card);
-		if (ret == -EPROBE_DEFER) {
-			list_add(&card->list, &unbind_card_list);
-			ret = 0;
-		}
-	} else {
-		ret = snd_soc_bind_card(card);
+	ret = soc_card_bind(card);
+	if (ret == -EPROBE_DEFER) {
+		list_add(&card->list, &unbind_card_list);
+		ret = 0;
 	}
 
 	return ret;
@@ -2602,7 +2568,7 @@ void snd_soc_unregister_card(struct snd_soc_card *card)
 {
 	guard(mutex)(&client_mutex);
 
-	snd_soc_unbind_card(card);
+	soc_card_unbind(card);
 	list_del(&card->list);
 
 	dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name);
@@ -2832,7 +2798,8 @@ static void snd_soc_del_component_unlocked(struct snd_soc_component *component)
 
 	if (card) {
 		instantiated = card->instantiated;
-		snd_soc_unbind_card(card);
+
+		soc_card_unbind(card);
 		if (instantiated)
 			list_add(&card->list, &unbind_card_list);
 	}
@@ -2879,7 +2846,6 @@ int snd_soc_add_component(struct snd_soc_component *component,
 			  struct snd_soc_dai_driver *dai_drv,
 			  int num_dai)
 {
-	struct snd_soc_card *card, *c;
 	int ret;
 	int i;
 	guard(mutex)(&client_mutex);
@@ -2907,8 +2873,7 @@ int snd_soc_add_component(struct snd_soc_component *component,
 	/* see for_each_component */
 	list_add(&component->list, &component_list);
 
-	list_for_each_entry_safe(card, c, &unbind_card_list, list)
-		snd_soc_rebind_card(card);
+	soc_card_rebind();
 
 err_cleanup:
 	if (ret < 0)
diff --git a/sound/soc/soc-devres.c b/sound/soc/soc-devres.c
index d33f83ec24f27..c6364caabc0ec 100644
--- a/sound/soc/soc-devres.c
+++ b/sound/soc/soc-devres.c
@@ -83,13 +83,6 @@ int devm_snd_soc_register_card(struct device *dev, struct snd_soc_card *card)
 }
 EXPORT_SYMBOL_GPL(devm_snd_soc_register_card);
 
-int devm_snd_soc_register_deferrable_card(struct device *dev, struct snd_soc_card *card)
-{
-	card->devres_dev = dev;
-	return snd_soc_register_card(card);
-}
-EXPORT_SYMBOL_GPL(devm_snd_soc_register_deferrable_card);
-
 #ifdef CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM
 
 static void devm_dmaengine_pcm_release(struct device *dev, void *res)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users
  2026-04-22  3:03 [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users Kuninori Morimoto
  2026-04-22  3:04 ` [RFC][PATCH v4 1/2] ASoC: topology: make sure to call snd_soc_remove_pcm_runtime() Kuninori Morimoto
  2026-04-22  3:04 ` [RFC][PATCH v4 2/2] ASoC: core: use Complete rebind cards by default for all users Kuninori Morimoto
@ 2026-04-26 14:53 ` Cezary Rojewski
  2026-04-26 23:18   ` Kuninori Morimoto
  2 siblings, 1 reply; 6+ messages in thread
From: Cezary Rojewski @ 2026-04-26 14:53 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
	linux-sound

[-- Attachment #1: Type: text/plain, Size: 2185 bytes --]

On 2026-04-22 5:03 AM, Kuninori Morimoto wrote:
> 
> Hi Mark, Cezary
> 
> Topology is using (A), but its paired (B) might not be called.
> Because of it, it will be hungup, because soc_cleanup_card_resources()
> will access to devm_kzalloc():ed link (= rtd->link) which was already
> lost in that timing.
>      
> 	(A) snd_soc_add_pcm_runtimes()
> 	(B) snd_soc_remove_pcm_runtime()
>      
> To solve this issue, it uses devres_alloc() and call (B) in topology.
> 
> But I can't test it. It needs Acked-by / Tested-by from Cezary.
> I added [RFC]
> 
> v3 -> v4
> 	- call topology snd_soc_remove_pcm_runtime()
> 	- rebind() function will handle all cards by itself.
> 
> v2 -> v3
> 	- separate bind/unbind/rebind and unbind list handling
> 	- tidyup git-log and Subject
> 
> v1 -> v2
> 	- tidyup handling of client_mutex

I've tested it out and results (KASAN) are very similar to the previous 
revisions.  Attaching exemplary dmesg for the exact same order of 
operations as last time.

In regard to technical part, I have to disagree with the approach taken 
in v4.  The goal behind the series: make the code implementing the 
re-binding feature easier to follow.  Here, the following are added:

- soc_tplg_remove_pcm()
- soc_tplg_link_release()
- struct tplg_link

There is soc_tplg_remove_link() already, I believe introducing 
soc_tplg_link_release(), an "unbalanced" function goes against the goal 
of the patch.  Internal struct is a heavy hitter, I'd argue it alone 
defeats the purpose of the patch.

The delta of this series 1) when compared against the proposition of 
mine 2) - attachment found in v3 review:

1) 5 files changed, 71 insertions(+), 68 deletions(-)
2) 3 files changed, 17 insertions(+), 57 deletions(-)

Perhaps we can achieve the goal in multiple steps.  Simplify the code 
implementing the feature by merging 2) and work from there if you 
believe the readability still isn't where it should be.

Side note: leaving the current function names as is would make it easier 
to review the series. Right now, after 'git am' I have to rename 
everything myself and amend the changes to even begin accessing the 
actual impact of the code.


Kind regards,
Czarek

[-- Attachment #2: dmesg_rfc_v4.txt --]
[-- Type: text/plain, Size: 38109 bytes --]

Summary of operations:

blacklist snd_soc_avs
blacklist snd_soc_pcm3168a
blacklist snd_soc_pcm3168a_i2c
boot machine
modprobe snd_soc_avs
modprobe snd_soc_pcm3168a
modprobe snd_soc_pcm3168a_i2c
rmmod snd_soc_avs_pcm3168a


[    0.000000] Linux version 7.0.0-rc2+ (crojewsk@crojewsk-ctrl) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #1924 SMP PREEMPT_DYNAMIC Sun Apr 26 16:09:25 CEST 2026

(...)

[  243.744327] snd_soc_core: unknown parameter 'dybdbg' ignored
[  243.746438] snd_soc_core:snd_soc_register_dai: faux_driver snd-soc-dummy: ASoC: Registered DAI 'snd-soc-dummy-dai'
[  243.796639] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Capability version: 0x0
[  243.796651] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: HDA capability ID: 0x2
[  243.796657] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Found ML capability
[  243.796673] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Capability version: 0x0
[  243.796677] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: HDA capability ID: 0x3
[  243.796682] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Found PP capability offset=800
[  243.796699] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Capability version: 0x0
[  243.796703] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: HDA capability ID: 0x1
[  243.796708] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Found GTS capability offset=500
[  243.796724] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Capability version: 0x0
[  243.796728] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: HDA capability ID: 0x5
[  243.796733] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Found DRSM capability
[  243.796748] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Capability version: 0x0
[  243.796753] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: HDA capability ID: 0x4
[  243.796757] snd_hda_core:snd_hdac_bus_parse_capabilities: snd_soc_avs 0000:00:1f.3: Found SPB capability
[  243.796773] snd_hda_ext_core:snd_hdac_ext_bus_get_ml_capabilities: snd_soc_avs 0000:00:1f.3: In snd_hdac_ext_bus_get_ml_capabilities Link count: 2
[  243.798620] snd_soc_avs 0000:00:1f.3: bound 0000:00:02.0 (ops intel_audio_component_bind_ops [i915])
[  243.800639] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power enable
[  243.800661] snd_hda_core:snd_hdac_set_codec_wakeup: snd_soc_avs 0000:00:1f.3: enable codec wakeup
[  243.803669] snd_hda_core:snd_hdac_set_codec_wakeup: snd_soc_avs 0000:00:1f.3: disable codec wakeup
[  243.809459] snd_hda_core:snd_hdac_bus_reset_link: snd_soc_avs 0000:00:1f.3: codec_mask = 0x4
[  243.809600] snd_soc_avs:probe_codec: snd_soc_avs 0000:00:1f.3: codec #2 probed OK: 0x8086281f
[  243.828220] snd_soc_core:snd_soc_register_dai: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: Registered DAI 'hda-codec-binding-dai'
[  243.830435] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power disable
[  243.961267] snd_soc_avs:avs_dsp_process_notification: snd_soc_avs 0000:00:1f.3: FW READY 0x9b080000
[  243.969006] snd_soc_avs 0000:00:1f.3: Unrecognized hw config: 10
[  243.970941] snd_soc_avs 0000:00:1f.3: Unrecognized fw param: 26
[  243.971406] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'Probe Extraction CPU DAI'
[  243.971420] snd_soc_avs:avs_register_dmic_board: snd_soc_avs 0000:00:1f.3: no DMIC endpoints present
[  243.971968] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'SSP0 Pin'
[  243.971989] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'SSP2 Pin'
[  243.972301] snd_soc_avs:avs_register_sdw_boards: snd_soc_avs 0000:00:1f.3: find sdw board: sdw:0:0:025d:0711:00
[  243.972312] snd_soc_avs:avs_register_sdw_boards: snd_soc_avs 0000:00:1f.3: find sdw board: sdw:0:1:025d:1308:00
[  243.988330] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_probe_mb avs_probe_mb.2.auto: dai_link (null)
[  243.988347] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_probe_mb avs_probe_mb.2.auto:   [0] cpu0 <-> codec0
[  243.988363] snd_soc_core:snd_soc_add_pcm_runtime: avs_probe_mb avs_probe_mb.2.auto: ASoC: binding Compress Probe Capture
[  243.989109] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding Probe Extraction widget
[  243.989256] snd_soc_core:snd_soc_new_compress: avs_probe_mb avs_probe_mb.2.auto: Compress ASoC: snd-soc-dummy-dai <-> Probe Extraction CPU DAI mapping ok
[  243.991197] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto: dai_link (null)
[  243.991214] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto:   [0] cpu0 <-> codec0
[  243.991226] snd_soc_core:snd_soc_add_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: binding SSP0-Codec-dac
[  243.991238] snd_soc_core:soc_dai_link_sanity_check: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: Component i2c-PCM3168A:00 not found for link SSP0-Codec-dac
[  243.991255] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link (null)
[  243.991272] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  243.991284] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding hda-card-binding-link
[  243.992340] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power enable
[  243.992365] snd_hda_core:snd_hdac_set_codec_wakeup: snd_soc_avs 0000:00:1f.3: enable codec wakeup
[  243.995402] snd_hda_core:snd_hdac_set_codec_wakeup: snd_soc_avs 0000:00:1f.3: disable codec wakeup
[  243.997683] snd_hda_ext_core:snd_hdac_ext_bus_link_get: snd_soc_avs 0000:00:1f.3: codec_mask = 0x4
[  244.018560] snd_hda_codec_hdmi:snd_hda_hdmi_generic_build_pcms: snd_hda_codec_intelhdmi hda-8086281f:0:02: hdmi: pcm_num set to 4
[  244.018679] snd_hda_codec_intelhdmi hda-8086281f:0:02: creating for HDMI 0 0
[  244.018703] snd_hda_codec_intelhdmi hda-8086281f:0:02: skipping capture dai for HDMI 0
[  244.018711] snd_hda_codec_intelhdmi hda-8086281f:0:02: creating for HDMI 1 1
[  244.018731] snd_hda_codec_intelhdmi hda-8086281f:0:02: skipping capture dai for HDMI 1
[  244.018739] snd_hda_codec_intelhdmi hda-8086281f:0:02: creating for HDMI 2 2
[  244.018758] snd_hda_codec_intelhdmi hda-8086281f:0:02: skipping capture dai for HDMI 2
[  244.018766] snd_hda_codec_intelhdmi hda-8086281f:0:02: creating for HDMI 3 3
[  244.018785] snd_hda_codec_intelhdmi hda-8086281f:0:02: skipping capture dai for HDMI 3
[  244.018816] snd_soc_core:snd_soc_register_dai: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: Registered DAI 'HDMI 0'
[  244.018827] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: adding HDMI 0 Playback widget
[  244.018891] snd_soc_core:snd_soc_register_dai: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: Registered DAI 'HDMI 1'
[  244.018901] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: adding HDMI 1 Playback widget
[  244.018965] snd_soc_core:snd_soc_register_dai: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: Registered DAI 'HDMI 2'
[  244.018975] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: adding HDMI 2 Playback widget
[  244.019049] snd_soc_core:snd_soc_register_dai: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: Registered DAI 'HDMI 3'
[  244.019059] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_hda_codec_intelhdmi hda-8086281f:0:02: ASoC: adding HDMI 3 Playback widget
[  244.019307] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'hdaudio-cpu0'
[  244.019319] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding hdaudio-cpu0 Tx widget
[  244.019413] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'hdaudio-cpu1'
[  244.019423] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding hdaudio-cpu1 Tx widget
[  244.019511] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'hdaudio-cpu2'
[  244.019521] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding hdaudio-cpu2 Tx widget
[  244.019618] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'hdaudio-cpu3'
[  244.019628] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding hdaudio-cpu3 Tx widget
[  244.020914] snd_soc_avs:__avs_component_probe: avs_hdaudio avs_hdaudio.4.auto: probing avs_hdaudio.4.auto card AVS HDMI
[  244.020944] snd_soc_core:soc_tplg_load_header: avs_hdaudio avs_hdaudio.4.auto: ASoC: Got 0x524 bytes of type 8 version 0 vendor 0 at pass 0
[  244.021058] snd_soc_avs:avs_manifest: snd_soc_avs 0000:00:1f.3: init config lookup failed: -2
[  244.021071] snd_soc_core:soc_tplg_load_header: avs_hdaudio avs_hdaudio.4.auto: ASoC: Got 0xa90 bytes of type 5 version 0 vendor 0 at pass 3
[  244.021085] snd_soc_core:soc_tplg_dapm_widget_elems_load: avs_hdaudio avs_hdaudio.4.auto: ASoC: adding 8 DAPM widgets
[  244.021097] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi1_fe id 17
[  244.021285] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi1_be id 17
[  244.021442] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi2_fe id 17
[  244.021628] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi2_be id 17
[  244.021785] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi3_fe id 17
[  244.021955] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi3_be id 17
[  244.022111] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi4_fe id 17
[  244.022281] snd_soc_core:soc_tplg_dapm_widget_create: avs_hdaudio avs_hdaudio.4.auto: ASoC: creating DAPM widget hdmi4_be id 17
[  244.022438] snd_soc_core:soc_tplg_load_header: avs_hdaudio avs_hdaudio.4.auto: ASoC: Got 0xe40 bytes of type 7 version 0 vendor 0 at pass 4
[  244.022519] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'HDMI1-dai'
[  244.022529] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding HDMI1-playback widget
[  244.022661] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link HDMI1
[  244.022671] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.022683] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding HDMI1
[  244.023133] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'HDMI2-dai'
[  244.023145] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding HDMI2-playback widget
[  244.023284] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link HDMI2
[  244.023294] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.023306] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding HDMI2
[  244.023883] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'HDMI3-dai'
[  244.023895] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding HDMI3-playback widget
[  244.024026] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link HDMI3
[  244.024037] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.024049] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding HDMI3
[  244.024518] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'HDMI4-dai'
[  244.024529] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding HDMI4-playback widget
[  244.024663] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link HDMI4
[  244.024674] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.024685] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding HDMI4
[  244.025134] snd_soc_core:soc_tplg_pcm_elems_load: avs_hdaudio avs_hdaudio.4.auto: ASoC: adding 4 PCM DAIs
[  244.025148] snd_soc_core:soc_tplg_load_header: avs_hdaudio avs_hdaudio.4.auto: ASoC: Got 0x630 bytes of type 4 version 0 vendor 0 at pass 5
[  244.025162] snd_soc_core:soc_tplg_dapm_graph_elems_load: avs_hdaudio avs_hdaudio.4.auto: ASoC: adding 12 DAPM routes for index 0
[  244.025917] avs_hdaudio avs_hdaudio.4.auto: ASoC: Parent card not yet available, widget card binding deferred
[  244.026308] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link (null)
[  244.026320] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.026331] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding hda-8086281f:0:02 link0
[  244.026616] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link (null)
[  244.026626] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.026636] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding hda-8086281f:0:02 link1
[  244.026913] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link (null)
[  244.026923] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.026932] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding hda-8086281f:0:02 link2
[  244.027198] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto: dai_link (null)
[  244.027207] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_hdaudio avs_hdaudio.4.auto:   [0] cpu0 <-> codec0
[  244.027217] snd_soc_core:snd_soc_add_pcm_runtime: avs_hdaudio avs_hdaudio.4.auto: ASoC: binding hda-8086281f:0:02 link3
[  244.027554] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #0 ((null))
[  244.027564] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: hda-codec-binding-dai <-> snd-soc-dummy-dai mapping ok
[  244.027892] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #0 HDMI1 (*)
[  244.027941] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: snd-soc-dummy-dai <-> HDMI1-dai mapping ok
[  244.028143] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #1 HDMI2 (*)
[  244.028174] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: snd-soc-dummy-dai <-> HDMI2-dai mapping ok
[  244.028346] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #2 HDMI3 (*)
[  244.028376] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: snd-soc-dummy-dai <-> HDMI3-dai mapping ok
[  244.028551] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #3 HDMI4 (*)
[  244.028582] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: snd-soc-dummy-dai <-> HDMI4-dai mapping ok
[  244.028639] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #5 ((null))
[  244.028645] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: HDMI 0 <-> hdaudio-cpu0 mapping ok
[  244.028701] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #6 ((null))
[  244.028706] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: HDMI 1 <-> hdaudio-cpu1 mapping ok
[  244.028762] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #7 ((null))
[  244.028767] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: HDMI 2 <-> hdaudio-cpu2 mapping ok
[  244.028819] snd_soc_core:soc_create_pcm: avs_hdaudio avs_hdaudio.4.auto: ASoC: registered pcm #8 ((null))
[  244.028824] snd_soc_core:soc_new_pcm: avs_hdaudio avs_hdaudio.4.auto: HDMI 3 <-> hdaudio-cpu3 mapping ok
[  244.028835] snd_soc_core:dapm_connect_dai_routes: avs_hdaudio avs_hdaudio.4.auto: connected DAI link avs_hdaudio.4.auto:hdaudio-cpu0 Tx -> hda-8086281f:0:02:HDMI 0 Playback
[  244.028848] snd_soc_core:dapm_connect_dai_routes: avs_hdaudio avs_hdaudio.4.auto: connected DAI link avs_hdaudio.4.auto:hdaudio-cpu1 Tx -> hda-8086281f:0:02:HDMI 1 Playback
[  244.028859] snd_soc_core:dapm_connect_dai_routes: avs_hdaudio avs_hdaudio.4.auto: connected DAI link avs_hdaudio.4.auto:hdaudio-cpu2 Tx -> hda-8086281f:0:02:HDMI 2 Playback
[  244.028870] snd_soc_core:dapm_connect_dai_routes: avs_hdaudio avs_hdaudio.4.auto: connected DAI link avs_hdaudio.4.auto:hdaudio-cpu3 Tx -> hda-8086281f:0:02:HDMI 3 Playback
[  244.028884] avs_hdaudio avs_hdaudio.4.auto: avs_card_late_probe: mapping HDMI converter 1 to PCM 0 (000000003a4a367a)
[  244.028892] avs_hdaudio avs_hdaudio.4.auto: avs_card_late_probe: mapping HDMI converter 2 to PCM 1 (0000000074918243)
[  244.028898] avs_hdaudio avs_hdaudio.4.auto: avs_card_late_probe: mapping HDMI converter 3 to PCM 2 (000000009ef6d577)
[  244.028904] avs_hdaudio avs_hdaudio.4.auto: avs_card_late_probe: mapping HDMI converter 4 to PCM 3 (00000000f42b2b26)
[  244.041491] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power enable
[  244.046059] input: AVS HDMI HDMI/DP as /devices/platform/avs_hdaudio.4.auto/sound/card1/input3
[  244.046968] input: AVS HDMI HDMI/DP,pcm=1 as /devices/platform/avs_hdaudio.4.auto/sound/card1/input4
[  244.047860] input: AVS HDMI HDMI/DP,pcm=2 as /devices/platform/avs_hdaudio.4.auto/sound/card1/input5
[  244.048529] input: AVS HDMI HDMI/DP,pcm=3 as /devices/platform/avs_hdaudio.4.auto/sound/card1/input6
[  246.543804] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power disable
[  246.577246] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power disable
[  265.018282] pcm3168a i2c-PCM3168A:00: supply VDD1 not found, using dummy regulator
[  265.019449] pcm3168a i2c-PCM3168A:00: supply VDD2 not found, using dummy regulator
[  265.019959] pcm3168a i2c-PCM3168A:00: supply VCCAD1 not found, using dummy regulator
[  265.020419] pcm3168a i2c-PCM3168A:00: supply VCCAD2 not found, using dummy regulator
[  265.020852] pcm3168a i2c-PCM3168A:00: supply VCCDA1 not found, using dummy regulator
[  265.021254] pcm3168a i2c-PCM3168A:00: supply VCCDA2 not found, using dummy regulator
[  265.027399] snd_soc_core:snd_soc_register_dai: pcm3168a i2c-PCM3168A:00: ASoC: Registered DAI 'pcm3168a-dac'
[  265.027431] snd_soc_core:snd_soc_register_dai: pcm3168a i2c-PCM3168A:00: ASoC: Registered DAI 'pcm3168a-adc'
[  265.027447] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto: dai_link (null)
[  265.027457] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto:   [0] cpu0 <-> codec0
[  265.027469] snd_soc_core:snd_soc_add_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: binding SSP0-Codec-dac
[  265.027771] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto: dai_link (null)
[  265.027780] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto:   [0] cpu0 <-> codec0
[  265.027790] snd_soc_core:snd_soc_add_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: binding SSP2-Codec-adc
[  265.028643] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding ssp0 Tx widget
[  265.028687] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding ssp0 Rx widget
[  265.028732] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding ssp2 Tx widget
[  265.028778] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding ssp2 Rx widget
[  265.030033] snd_soc_avs:__avs_component_probe: avs_pcm3168a avs_pcm3168a.3.auto: probing avs_pcm3168a.3.auto card AVS I2S PCM3168A
[  265.030059] snd_soc_core:soc_tplg_load_header: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: Got 0xed0 bytes of type 8 version 0 vendor 0 at pass 0
[  265.030229] snd_soc_avs:avs_manifest: snd_soc_avs 0000:00:1f.3: init config lookup failed: -2
[  265.030371] snd_soc_core:soc_tplg_load_header: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: Got 0xc14 bytes of type 5 version 0 vendor 0 at pass 3
[  265.030383] snd_soc_core:soc_tplg_dapm_widget_elems_load: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: adding 6 DAPM widgets
[  265.030393] snd_soc_core:soc_tplg_dapm_widget_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: creating DAPM widget ssp0p_fe id 17
[  265.030652] snd_soc_core:soc_tplg_dapm_widget_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: creating DAPM widget ssp0p_be id 17
[  265.030795] snd_soc_core:soc_tplg_dapm_widget_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: creating DAPM widget ssp2c_fe id 17
[  265.031133] snd_soc_core:soc_tplg_dapm_widget_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: creating DAPM widget ssp2c_be id 17
[  265.031315] snd_soc_core:soc_tplg_dapm_widget_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: creating DAPM widget ssp0c_fe id 4
[  265.031396] snd_soc_core:soc_tplg_control_dmixer_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: adding mixer kcontrol DSP Volume with access 0x7
[  265.031442] snd_soc_core:soc_tplg_dapm_widget_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: template ssp0c_fe with 1/0/0 (mixer/enum/bytes) control
[  265.031694] snd_soc_core:soc_tplg_dapm_widget_create: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: creating DAPM widget ssp0c_be id 17
[  265.031846] snd_soc_core:soc_tplg_load_header: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: Got 0xab0 bytes of type 7 version 0 vendor 0 at pass 4
[  265.031930] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'Audio I2S0-dai'
[  265.031940] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding Audio I2S0-playback widget
[  265.032070] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto: dai_link Audio I2S0
[  265.032080] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto:   [0] cpu0 <-> codec0
[  265.032091] snd_soc_core:snd_soc_add_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: binding Audio I2S0
[  265.032562] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'Audio I2S2-dai'
[  265.032571] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding Audio I2S2-capture widget
[  265.032695] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto: dai_link Audio I2S2
[  265.032704] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto:   [0] cpu0 <-> codec0
[  265.032713] snd_soc_core:snd_soc_add_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: binding Audio I2S2
[  265.033141] snd_soc_core:snd_soc_register_dai: snd_soc_avs 0000:00:1f.3: ASoC: Registered DAI 'I2S0 Reference-dai'
[  265.033149] snd_soc_core:snd_soc_dapm_new_dai_widgets: snd_soc_avs 0000:00:1f.3: ASoC: adding I2S0 Reference-capture widget
[  265.033272] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto: dai_link I2S0 Reference
[  265.033280] snd_soc_core:snd_soc_compensate_channel_connection_map: avs_pcm3168a avs_pcm3168a.3.auto:   [0] cpu0 <-> codec0
[  265.033290] snd_soc_core:snd_soc_add_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: binding I2S0 Reference
[  265.033630] snd_soc_core:soc_tplg_pcm_elems_load: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: adding 3 PCM DAIs
[  265.033639] snd_soc_core:soc_tplg_load_header: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: Got 0x4a4 bytes of type 4 version 0 vendor 0 at pass 5
[  265.033650] snd_soc_core:soc_tplg_dapm_graph_elems_load: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: adding 9 DAPM routes for index 0
[  265.034156] avs_pcm3168a avs_pcm3168a.3.auto: ASoC: Parent card not yet available, widget card binding deferred
[  265.047589] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power enable
[  265.047610] snd_hda_core:snd_hdac_set_codec_wakeup: snd_soc_avs 0000:00:1f.3: enable codec wakeup
[  265.050630] snd_hda_core:snd_hdac_set_codec_wakeup: snd_soc_avs 0000:00:1f.3: disable codec wakeup
[  265.072724] snd_soc_avs:avs_dsp_process_notification: snd_soc_avs 0000:00:1f.3: FW READY 0x9b080000
[  265.122940] snd_soc_core:snd_soc_dapm_new_dai_widgets: pcm3168a i2c-PCM3168A:00: ASoC: adding Playback widget
[  265.123008] snd_soc_core:snd_soc_dapm_new_dai_widgets: pcm3168a i2c-PCM3168A:00: ASoC: adding Capture widget
[  265.128920] snd_soc_core:soc_create_pcm: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: registered pcm #0 ((null))
[  265.128931] snd_soc_core:soc_new_pcm: avs_pcm3168a avs_pcm3168a.3.auto: pcm3168a-dac <-> SSP0 Pin mapping ok
[  265.129025] snd_soc_core:soc_create_pcm: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: registered pcm #1 ((null))
[  265.129034] snd_soc_core:soc_new_pcm: avs_pcm3168a avs_pcm3168a.3.auto: pcm3168a-adc <-> SSP2 Pin mapping ok
[  265.129331] snd_soc_core:soc_create_pcm: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: registered pcm #0 Audio I2S0 (*)
[  265.129392] snd_soc_core:soc_new_pcm: avs_pcm3168a avs_pcm3168a.3.auto: snd-soc-dummy-dai <-> Audio I2S0-dai mapping ok
[  265.129674] snd_soc_core:soc_create_pcm: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: registered pcm #1 Audio I2S2 (*)
[  265.129732] snd_soc_core:soc_new_pcm: avs_pcm3168a avs_pcm3168a.3.auto: snd-soc-dummy-dai <-> Audio I2S2-dai mapping ok
[  265.130006] snd_soc_core:soc_create_pcm: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: registered pcm #2 I2S0 Reference (*)
[  265.130056] snd_soc_core:soc_new_pcm: avs_pcm3168a avs_pcm3168a.3.auto: snd-soc-dummy-dai <-> I2S0 Reference-dai mapping ok
[  265.130071] snd_soc_core:snd_soc_dapm_link_dai_widgets: pcm3168a i2c-PCM3168A:00: Playback -> DAC1
[  265.130088] snd_soc_core:snd_soc_dapm_link_dai_widgets: pcm3168a i2c-PCM3168A:00: Playback -> DAC2
[  265.130104] snd_soc_core:snd_soc_dapm_link_dai_widgets: pcm3168a i2c-PCM3168A:00: Playback -> DAC3
[  265.130120] snd_soc_core:snd_soc_dapm_link_dai_widgets: pcm3168a i2c-PCM3168A:00: Playback -> DAC4
[  265.130138] snd_soc_core:snd_soc_dapm_link_dai_widgets: pcm3168a i2c-PCM3168A:00: ADC1 -> Capture
[  265.130154] snd_soc_core:snd_soc_dapm_link_dai_widgets: pcm3168a i2c-PCM3168A:00: ADC2 -> Capture
[  265.130170] snd_soc_core:snd_soc_dapm_link_dai_widgets: pcm3168a i2c-PCM3168A:00: ADC3 -> Capture
[  265.130186] snd_soc_core:dapm_connect_dai_routes: avs_pcm3168a avs_pcm3168a.3.auto: connected DAI link avs_pcm3168a.3.auto:ssp0 Tx -> i2c-PCM3168A:00:Playback
[  265.130205] snd_soc_core:dapm_connect_dai_routes: avs_pcm3168a avs_pcm3168a.3.auto: connected DAI link i2c-PCM3168A:00:Capture -> avs_pcm3168a.3.auto:ssp2 Rx
[  267.623138] snd_hda_core:snd_hdac_display_power: snd_soc_avs 0000:00:1f.3: display power disable
[  293.064303] ==================================================================
[  293.064386] BUG: KASAN: slab-use-after-free in snd_soc_tplg_component_remove+0x5a/0x430 [snd_soc_core]
[  293.064518] Read of size 8 at addr ffff88812af23a50 by task rmmod/1213

[  293.064585] CPU: 10 UID: 0 PID: 1213 Comm: rmmod Tainted: G S                  7.0.0-rc2+ #1924 PREEMPT(full) 
[  293.064596] Tainted: [S]=CPU_OUT_OF_SPEC
[  293.064598] Hardware name: Intel Corporation MBL RVP (CPU:RaptorLake)/MBL RVP (ID:05), BIOS SB_RPLA.01.01.00.01.01.014.D-00000000 Jan 21 2025
[  293.064602] Call Trace:
[  293.064605]  <TASK>
[  293.064608]  dump_stack_lvl+0x70/0x90
[  293.064620]  print_report+0xce/0x610
[  293.064630]  ? snd_soc_tplg_component_remove+0x5a/0x430 [snd_soc_core]
[  293.064726]  ? kasan_complete_mode_report_info+0x64/0x1f0
[  293.064733]  ? snd_soc_tplg_component_remove+0x5a/0x430 [snd_soc_core]
[  293.064836]  kasan_report+0xe2/0x120
[  293.064844]  ? snd_soc_tplg_component_remove+0x5a/0x430 [snd_soc_core]
[  293.064949]  __asan_load8+0x82/0xb0
[  293.064957]  snd_soc_tplg_component_remove+0x5a/0x430 [snd_soc_core]
[  293.065059]  ? __pfx_mutex_unlock+0x10/0x10
[  293.065070]  avs_remove_topology+0x12/0x20 [snd_soc_avs]
[  293.065125]  avs_component_remove+0x10e/0x160 [snd_soc_avs]
[  293.065181]  snd_soc_component_remove+0x3b/0x50 [snd_soc_core]
[  293.065286]  soc_remove_component+0x101/0x110 [snd_soc_core]
[  293.065391]  soc_cleanup_card_resources+0x1a0/0x490 [snd_soc_core]
[  293.065496]  snd_soc_unregister_card+0x12b/0x180 [snd_soc_core]
[  293.065601]  devm_card_release+0x21/0x30 [snd_soc_core]
[  293.065704]  release_nodes+0x84/0x180
[  293.065716]  devres_release_all+0xff/0x150
[  293.065724]  ? __pfx_devres_release_all+0x10/0x10
[  293.065734]  device_unbind_cleanup+0x1a/0x120
[  293.065741]  device_release_driver_internal+0x2d4/0x330
[  293.065748]  ? __kasan_check_write+0x18/0x20
[  293.065756]  driver_detach+0x85/0xf0
[  293.065764]  bus_remove_driver+0xc4/0x180
[  293.065771]  driver_unregister+0x51/0x80
[  293.065778]  platform_driver_unregister+0x16/0x20
[  293.065786]  avs_pcm3168a_driver_exit+0x14/0xbe0 [snd_soc_avs_pcm3168a]
[  293.065793]  __do_sys_delete_module.constprop.0+0x258/0x440
[  293.065802]  ? __kasan_check_write+0x18/0x20
[  293.065808]  ? __pfx___do_sys_delete_module.constprop.0+0x10/0x10
[  293.065814]  ? __pfx__raw_spin_lock_irqsave+0x10/0x10
[  293.065821]  ? __rcu_read_unlock+0x3a/0x80
[  293.065831]  ? get_from_partial_node+0x228/0x3a0
[  293.065840]  ? __account_obj_stock+0xa4/0x370
[  293.065850]  __x64_sys_delete_module+0x23/0x30
[  293.065856]  x64_sys_call+0x1a79/0x21c0
[  293.065864]  do_syscall_64+0xc7/0x4c0
[  293.065872]  ? __kasan_check_read+0x15/0x20
[  293.065878]  ? __call_rcu_common.constprop.0+0x24b/0x430
[  293.065887]  ? __fput+0x315/0x4d0
[  293.065894]  ? call_rcu+0x12/0x20
[  293.065901]  ? kmem_cache_free+0x2e8/0x4c0
[  293.065911]  ? __fput+0x315/0x4d0
[  293.065916]  ? fpregs_assert_state_consistent+0x7c/0x90
[  293.065928]  ? fput_close_sync+0xcb/0x170
[  293.065934]  ? __pfx_fput_close_sync+0x10/0x10
[  293.065944]  ? __kasan_check_read+0x15/0x20
[  293.065949]  ? fpregs_assert_state_consistent+0x7c/0x90
[  293.065957]  ? do_syscall_64+0x109/0x4c0
[  293.065963]  ? __kasan_check_read+0x15/0x20
[  293.065969]  ? fpregs_assert_state_consistent+0x7c/0x90
[  293.065977]  ? do_syscall_64+0x109/0x4c0
[  293.065984]  ? irqentry_exit+0x41/0x6e0
[  293.065992]  ? exc_page_fault+0x79/0xc0
[  293.065999]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  293.066007] RIP: 0033:0x7f3424f26c9b
[  293.066013] Code: 73 01 c3 48 8b 0d 95 21 0f 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 65 21 0f 00 f7 d8 64 89 01 48
[  293.066020] RSP: 002b:00007ffcbb299958 EFLAGS: 00000206 ORIG_RAX: 00000000000000b0
[  293.066029] RAX: ffffffffffffffda RBX: 000055d070bdf980 RCX: 00007f3424f26c9b
[  293.066034] RDX: 000000000000000a RSI: 0000000000000800 RDI: 000055d070bdf9e8
[  293.066038] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[  293.066042] R10: 00007f3424fbeac0 R11: 0000000000000206 R12: 00007ffcbb299bb0
[  293.066046] R13: 000055d070bdf2a0 R14: 00007ffcbb29b6c4 R15: 000055d070bdf980
[  293.066055]  </TASK>

[  293.094214] Allocated by task 1200:
[  293.095415]  kasan_save_stack+0x2c/0x60
[  293.095420]  kasan_save_track+0x18/0x40
[  293.095425]  kasan_save_alloc_info+0x3c/0x50
[  293.095429]  __kasan_kmalloc+0xb5/0xc0
[  293.095434]  __kmalloc_node_track_caller_noprof+0x209/0x630
[  293.095439]  devm_kmalloc+0x61/0x120
[  293.095444]  soc_tplg_dapm_graph_elems_load+0xd4/0x450 [snd_soc_core]
[  293.095513]  snd_soc_tplg_component_load+0x3a9/0x690 [snd_soc_core]
[  293.095582]  avs_load_topology+0x1c/0x30 [snd_soc_avs]
[  293.095618]  __avs_component_probe+0x8b/0x440 [snd_soc_avs]
[  293.095653]  avs_component_probe+0xcc/0x110 [snd_soc_avs]
[  293.095689]  snd_soc_component_probe+0x41/0x80 [snd_soc_core]
[  293.095759]  soc_probe_component+0x302/0x5a0 [snd_soc_core]
[  293.095828]  soc_card_bind+0x8fb/0x1600 [snd_soc_core]
[  293.095898]  snd_soc_add_component+0x30e/0x4b0 [snd_soc_core]
[  293.095967]  snd_soc_register_component+0x59/0x70 [snd_soc_core]
[  293.096036]  devm_snd_soc_register_component+0x5d/0xb0 [snd_soc_core]
[  293.096105]  pcm3168a_probe+0x28e/0x3d0 [snd_soc_pcm3168a]
[  293.096114]  pcm3168a_i2c_probe+0x35/0x40 [snd_soc_pcm3168a_i2c]
[  293.096120]  i2c_device_probe+0x29a/0x480
[  293.096128]  really_probe+0x160/0x560
[  293.096132]  __driver_probe_device+0xe6/0x210
[  293.096136]  driver_probe_device+0x4e/0x120
[  293.096141]  __driver_attach+0x153/0x310
[  293.096145]  bus_for_each_dev+0xf2/0x160
[  293.096151]  driver_attach+0x31/0x40
[  293.096155]  bus_add_driver+0x1bd/0x350
[  293.096159]  driver_register+0xad/0x1f0
[  293.096163]  i2c_register_driver+0x8f/0x120
[  293.096168]  0xffffffffc0562030
[  293.096172]  do_one_initcall+0x9f/0x3d0
[  293.096177]  do_init_module+0x1b0/0x4f0
[  293.096183]  load_module+0x3e52/0x3f90
[  293.096186]  init_module_from_file+0x175/0x1a0
[  293.096191]  idempotent_init_module+0x295/0x3e0
[  293.096195]  __x64_sys_finit_module+0x95/0x110
[  293.096199]  x64_sys_call+0x15da/0x21c0
[  293.096203]  do_syscall_64+0xc7/0x4c0
[  293.096207]  entry_SYSCALL_64_after_hwframe+0x76/0x7e

[  293.097393] Freed by task 1213:
[  293.098568]  kasan_save_stack+0x2c/0x60
[  293.098573]  kasan_save_track+0x18/0x40
[  293.098577]  kasan_save_free_info+0x3f/0x60
[  293.098581]  __kasan_slab_free+0x67/0x90
[  293.098586]  kfree+0x239/0x470
[  293.098590]  release_nodes+0x8f/0x180
[  293.098595]  devres_release_all+0xff/0x150
[  293.098600]  device_unbind_cleanup+0x1a/0x120
[  293.098604]  device_release_driver_internal+0x2d4/0x330
[  293.098609]  driver_detach+0x85/0xf0
[  293.098613]  bus_remove_driver+0xc4/0x180
[  293.098617]  driver_unregister+0x51/0x80
[  293.098622]  platform_driver_unregister+0x16/0x20
[  293.098627]  avs_pcm3168a_driver_exit+0x14/0xbe0 [snd_soc_avs_pcm3168a]
[  293.098632]  __do_sys_delete_module.constprop.0+0x258/0x440
[  293.098637]  __x64_sys_delete_module+0x23/0x30
[  293.098641]  x64_sys_call+0x1a79/0x21c0
[  293.098645]  do_syscall_64+0xc7/0x4c0
[  293.098650]  entry_SYSCALL_64_after_hwframe+0x76/0x7e

[  293.099809] The buggy address belongs to the object at ffff88812af23a00
                which belongs to the cache kmalloc-192 of size 192
[  293.102174] The buggy address is located 80 bytes inside of
                freed 192-byte region [ffff88812af23a00, ffff88812af23ac0)

[  293.105718] The buggy address belongs to the physical page:
[  293.106907] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0xffff88812af23100 pfn:0x12af22
[  293.106913] head: order:1 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
[  293.106916] flags: 0x17ffffc0000240(workingset|head|node=0|zone=2|lastcpupid=0x1fffff)
[  293.106922] page_type: f5(slab)
[  293.106928] raw: 0017ffffc0000240 ffff8881000423c0 ffffea0004ac7110 ffffea00048c7610
[  293.106933] raw: ffff88812af23100 0000000800200016 00000000f5000000 0000000000000000
[  293.106938] head: 0017ffffc0000240 ffff8881000423c0 ffffea0004ac7110 ffffea00048c7610
[  293.106943] head: ffff88812af23100 0000000800200016 00000000f5000000 0000000000000000
[  293.106947] head: 0017ffffc0000001 ffffea0004abc881 00000000ffffffff 00000000ffffffff
[  293.106952] head: ffffffffffffffff 0000000000000000 00000000ffffffff 0000000000000002
[  293.106955] page dumped because: kasan: bad access detected

[  293.108129] Memory state around the buggy address:
[  293.109314]  ffff88812af23900: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  293.110518]  ffff88812af23980: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
[  293.111715] >ffff88812af23a00: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  293.112914]                                                  ^
[  293.114119]  ffff88812af23a80: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
[  293.115344]  ffff88812af23b00: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
[  293.116569] ==================================================================
[  293.118115] Disabling lock debugging due to kernel taint
[  293.118139] snd_soc_core:snd_soc_get_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: failed to find rtd I2S0 Reference
[  293.118154] snd_soc_core:snd_soc_unregister_dai: snd_soc_avs 0000:00:1f.3: ASoC: Unregistered DAI 'I2S0 Reference-dai'
[  293.118163] snd_soc_core:snd_soc_get_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: failed to find rtd Audio I2S2
[  293.118172] snd_soc_core:snd_soc_unregister_dai: snd_soc_avs 0000:00:1f.3: ASoC: Unregistered DAI 'Audio I2S2-dai'
[  293.118181] snd_soc_core:snd_soc_get_pcm_runtime: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: failed to find rtd Audio I2S0
[  293.118189] snd_soc_core:snd_soc_unregister_dai: snd_soc_avs 0000:00:1f.3: ASoC: Unregistered DAI 'Audio I2S0-dai'
[  293.124734] snd_soc_core:snd_soc_unregister_card: avs_pcm3168a avs_pcm3168a.3.auto: ASoC: Unregistered card 'AVS I2S PCM3168A'

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users
  2026-04-26 14:53 ` [RFC][PATCH v4 0/2] " Cezary Rojewski
@ 2026-04-26 23:18   ` Kuninori Morimoto
  2026-04-28 16:22     ` Cezary Rojewski
  0 siblings, 1 reply; 6+ messages in thread
From: Kuninori Morimoto @ 2026-04-26 23:18 UTC (permalink / raw)
  To: Cezary Rojewski
  Cc: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
	linux-sound


Hi Cezary

> There is soc_tplg_remove_link() already, I believe introducing 
> soc_tplg_link_release(), an "unbalanced" function goes against the goal 
> of the patch.  Internal struct is a heavy hitter, I'd argue it alone 
> defeats the purpose of the patch.

Ah, yes indeed.

> Perhaps we can achieve the goal in multiple steps.  Simplify the code 
> implementing the feature by merging 2) and work from there if you 
> believe the readability still isn't where it should be.

Thanks.
Just I can do is indicate the idea only for topology.
My posted patch was not good enough, but happy if the idea (= use
devres_add() to remove rtd/dai-link) acceptable for you.

Thank you for your help !!

Best regards
---
Kuninori Morimoto

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users
  2026-04-26 23:18   ` Kuninori Morimoto
@ 2026-04-28 16:22     ` Cezary Rojewski
  0 siblings, 0 replies; 6+ messages in thread
From: Cezary Rojewski @ 2026-04-28 16:22 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
	linux-sound

On 2026-04-27 1:18 AM, Kuninori Morimoto wrote:
> 
> Hi Cezary
> 
>> There is soc_tplg_remove_link() already, I believe introducing
>> soc_tplg_link_release(), an "unbalanced" function goes against the goal
>> of the patch.  Internal struct is a heavy hitter, I'd argue it alone
>> defeats the purpose of the patch.
> 
> Ah, yes indeed.
> 
>> Perhaps we can achieve the goal in multiple steps.  Simplify the code
>> implementing the feature by merging 2) and work from there if you
>> believe the readability still isn't where it should be.
> 
> Thanks.
> Just I can do is indicate the idea only for topology.
> My posted patch was not good enough, but happy if the idea (= use
> devres_add() to remove rtd/dai-link) acceptable for you.
> 
> Thank you for your help !!
Before I send my patch, given your large impact in shaping the subject, 
would you like me to add Suggested-by: or Co-developed-by: (you) to the 
message?

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2026-04-28 16:22 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-22  3:03 [RFC][PATCH v4 0/2] ASoC: core: use Complete rebind cards by default for all users Kuninori Morimoto
2026-04-22  3:04 ` [RFC][PATCH v4 1/2] ASoC: topology: make sure to call snd_soc_remove_pcm_runtime() Kuninori Morimoto
2026-04-22  3:04 ` [RFC][PATCH v4 2/2] ASoC: core: use Complete rebind cards by default for all users Kuninori Morimoto
2026-04-26 14:53 ` [RFC][PATCH v4 0/2] " Cezary Rojewski
2026-04-26 23:18   ` Kuninori Morimoto
2026-04-28 16:22     ` Cezary Rojewski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox