On Friday 07 October 2011 11:48:01 Mark Brown wrote:
This might be true for machines, which adds jack functionality. We are now calling snd_soc_dapm_new_widgets before adding jack pins. Also machines passing their DAPM widgets/routes via snd_soc_card are safe from this issue.
No, it should never be needed by anything.
Could be, but day before yesterday the sdp4430 was fine. I've pulled yesterday morning, and welcomed me with a kernel crash at boot time.
For machines, which does not add jacks the snd_soc_dapm_new_widgets will be not called at all, which will eventually leads to a crash.
in soc-core.c: soc_post_component_init() the dai->init called, but there's no additional snd_soc_dapm_new_widgets call to make sure that the new widgets added by the machine driver are instantiated.
We could either go round every single machine driver in the kernel modifying them or we could make sure it's handled in the core - I know which of those seems better to me!
For sure fixing this in core is the best place. Try to boot smartq_wm8987, s3c24xx_simtec_tlv320aic23, s3c24xx_simtec_hermes, jive_wm8750, h1940_uda1380, etc. Lots of the machine drivers are calling soc_dapm_sync after adding widgets. They will crash. If we want to fix this in core we need to remove the soc_dapm_sync from _init calls, and add the snd_soc_dapm_new_widgets post dai_link->init call in soc_post_component_init of soc-core.c.
Having the soc_dapm_sync without calling snd_soc_dapm_new_widgets after adding new widgets will trigger this.
As I said: sdp4430 strated to crash yesterday morning - without any change in the sdp4430 driver.
-- Péter