[alsa-devel] [PATCH v2] ASoC: remove a card from the list, if instantiation failed
If instantiation of a card failed, we still have to remove it from the card list on unregistration. This fixes an Oops on Migo-R, triggering, when after a failed firmware load attempt the driver modules are removed and re-inserted again.
Signed-off-by: Guennadi Liakhovetski g.liakhovetski@gmx.de ---
Mark, is this more like what you mean?
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index c8b0556..f63b59a 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1232,26 +1232,25 @@ static int soc_remove(struct platform_device *pdev) struct snd_soc_platform *platform = card->platform; struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
- if (!card->instantiated) - return 0; + if (card->instantiated) { + run_delayed_work(&card->delayed_work);
- run_delayed_work(&card->delayed_work); + if (platform->remove) + platform->remove(pdev);
- if (platform->remove) - platform->remove(pdev); + if (codec_dev->remove) + codec_dev->remove(pdev);
- if (codec_dev->remove) - codec_dev->remove(pdev); + for (i = 0; i < card->num_links; i++) { + struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; + if (cpu_dai->remove) + cpu_dai->remove(pdev, cpu_dai); + }
- for (i = 0; i < card->num_links; i++) { - struct snd_soc_dai *cpu_dai = card->dai_link[i].cpu_dai; - if (cpu_dai->remove) - cpu_dai->remove(pdev, cpu_dai); + if (card->remove) + card->remove(pdev); }
- if (card->remove) - card->remove(pdev); - snd_soc_unregister_card(card);
return 0;
On Thu, Mar 18, 2010 at 08:23:33AM +0100, Guennadi Liakhovetski wrote:
If instantiation of a card failed, we still have to remove it from the card list on unregistration. This fixes an Oops on Migo-R, triggering, when after a failed firmware load attempt the driver modules are removed and re-inserted again.
Signed-off-by: Guennadi Liakhovetski g.liakhovetski@gmx.de
Mark, is this more like what you mean?
Yes, it is. I'll need to apply this and test later when I've got a chance.
On Thu, Mar 18, 2010 at 08:23:33AM +0100, Guennadi Liakhovetski wrote:
If instantiation of a card failed, we still have to remove it from the card list on unregistration. This fixes an Oops on Migo-R, triggering, when after a failed firmware load attempt the driver modules are removed and re-inserted again.
Signed-off-by: Guennadi Liakhovetski g.liakhovetski@gmx.de
Applied, thanks.
participants (2)
-
Guennadi Liakhovetski
-
Mark Brown