This patch won't revert cleanly, can you try the following hack on v5.4 to see if this improves the card registration? Thanks!
Yep, it works with the patch.
ok, thanks for testing! So that leaves us with two options:
a) remove the error handling after soc_dapm_add_routes() to be backwards compatible with Intel problematic machine drivers. Not really nice for everyone else.
b) remove this error conditionally so that legacy Intel solutions still work but new ones deal with errors upfront.
I am not sure if there's a 'clean' way to implement b), maybe with a Kconfig selected by some machine drivers? Morimito-san, any suggestions now that we've root caused the problem (copied again below for reference)?
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 88978a3036c4..796d14feab4d 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1076,8 +1076,8 @@ static int soc_probe_component(struct snd_soc_card *card, ret = snd_soc_dapm_add_routes(dapm, component->driver->dapm_routes, component->driver->num_dapm_routes); - if (ret < 0) - goto err_probe; + //if (ret < 0) + // goto err_probe;
/* see for_each_card_components */ list_add(&component->card_list, &card->component_dev_list); @@ -2065,13 +2065,13 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
ret = snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes, card->num_dapm_routes); - if (ret < 0) - goto probe_end; + //if (ret < 0) + // goto probe_end;
ret = snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes, - card->num_of_dapm_routes); - if (ret < 0) - goto probe_end; + card->num_of_dapm_routes); + //if (ret < 0) + // goto probe_end;
/* try to set some sane longname if DMI is available */ snd_soc_set_dmi_name(card, NULL);