Bug 216641

Summary: Intel ASoC sound broken again
Product: Drivers Reporter: Jason M. (jason)
Component: Sound(ALSA)Assignee: Jaroslav Kysela (perex)
Status: NEW ---    
Severity: normal    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 6.0.5-300.fc37.x86_64 Subsystem:
Regression: Yes Bisected commit-id:

Description Jason M. 2022-10-30 17:22:18 UTC
I don't see any crashes, tracebacks, or other errors yet.

[   16.928454] kbl_r5514_5663_max kbl_r5514_5663_max: ASoC: CPU DAI spi-PRP0001:00 not registered
[   16.928561] platform kbl_r5514_5663_max: deferred probe pending


Worked up to at least 5.19.16.

At least two others have reported the same issue:
https://github.com/jmontleon/pixelbook-fedora/issues/47
Comment 1 Jason M. 2022-10-31 23:24:25 UTC
Sound works up to 5.19.17 and is broken by 6.0-rc1. It's also broken in 6.1-rc.
Comment 2 Jason M. 2022-11-01 02:23:53 UTC
Pulling out these commits gets it working again.
586fb2641371cf7f23a401ab1c79b17e3ec457f4 "ASoC: soc-core.c: fixup snd_soc_of_get_dai_link_cpus()"
1892a991886ace2c3450bec801df2cf4028a803a "ASoC: core: Make snd_soc_unregister_card() return void"
df4d27b19b892f464685ea45fa6132dd1a2b6864 "ASoC: Introduce 'fixup_controls' card method"
6c076273a326cc5b5162451aacf7b7744bb03c66 "ASoC: core: Always send the CPU DAI a direct clock specifier"
8c8a0f01c7c52f9037b6859ff5234ea5acf572d6 "ASoC: core: Pass legacy_dai_naming flag directly"
8ad0b83e0079564989ccbe5b864cc265a0f5a14d "ASoC: soc-core: remove always-false path"

I am having trouble narrowing it down further. There are so many interwoven commits it's difficult to cleanly revert anything.
Comment 3 Jason M. 2022-11-02 15:53:09 UTC
There may be a flipped legacy_dai_naming value somewhere, possibly from the non_legacy_dai_naming->legacy_dai_naming change.

Doing this causes it to work.

diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index e824ff1a9fc0..f4a11f8f53bf 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -2488,7 +2488,7 @@ static int snd_soc_register_dais(struct snd_soc_component *component,
 
        for (i = 0; i < count; i++) {
                dai = snd_soc_register_dai(component, dai_drv + i, count == 1 &&
-                                          component->driver->legacy_dai_naming);
+                                          !component->driver->legacy_dai_naming);
                if (dai == NULL) {
                        ret = -ENOMEM;
                        goto err;
Comment 4 Artem S. Tashkinov 2022-11-03 11:08:59 UTC
Please email Kuninori Morimoto kuninori.morimoto.gx at renesas dot com.

He's on bugzilla, I cannot CC him.
Comment 5 Artem S. Tashkinov 2022-11-03 11:09:42 UTC
I meant to say "He's _not_ on Bugzilla", sorry.