ASoC: fill in snd_soc_pcm_runtime.card before calling snd_soc_dai_link.init()
authorJanusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Wed, 2 Feb 2011 20:11:41 +0000 (21:11 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 2 Feb 2011 20:52:06 +0000 (20:52 +0000)
The .card member of the snd_soc_pcm_runtime structure pointed to by the
snd_soc_dai_link.init() argument used to be initialized before the
function being called. This has changed, probably unintentionally,
after recent refactorings. Since the function implementations are free
to make use of this pointer, move its assignment back before the
function is called to avoid NULL pointer dereferences.

Created and tested on Amstrad Delta againts linux-2.6.38-rc2

Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/soc-core.c

index c4b60610beb002b04f1e8d81aeb12bc8c9f2b82c..c3f6f1e72790ccc730c60ec9d984e79402cab365 100644 (file)
@@ -1449,6 +1449,7 @@ static int soc_post_component_init(struct snd_soc_card *card,
                rtd = &card->rtd_aux[num];
                name = aux_dev->name;
        }
+       rtd->card = card;
 
        /* machine controls, routes and widgets are not prefixed */
        temp = codec->name_prefix;
@@ -1471,7 +1472,6 @@ static int soc_post_component_init(struct snd_soc_card *card,
 
        /* register the rtd device */
        rtd->codec = codec;
-       rtd->card = card;
        rtd->dev.parent = card->dev;
        rtd->dev.release = rtd_release;
        rtd->dev.init_name = name;