diff options
author | 2009-06-03 17:44:49 +0200 | |
---|---|---|
committer | 2009-06-04 13:24:08 +0100 | |
commit | e3509ff0fb9df53e45cd68488e3b463a80455db7 (patch) | |
tree | 9d13f9747af6107ca194e1be142db2a7041f5c18 | |
parent | ASoC: Fix build error in twl4030.c (diff) | |
download | linux-e3509ff0fb9df53e45cd68488e3b463a80455db7.tar.gz linux-e3509ff0fb9df53e45cd68488e3b463a80455db7.tar.bz2 linux-e3509ff0fb9df53e45cd68488e3b463a80455db7.zip |
ASoC: fix NULL pointer dereference in soc_suspend()
In case the initalization of an soc_device failed, there is no codec
associated with it. soc_suspend() will still dereference the pointer
and cause an Ooops when entering the sleep mode.
This happens on our board with a multi-target kernel image when booted
on a machine without audio circuits.
This patch makes the code bail out very early in this special case.
Signed-off-by: Daniel Mack <daniel@caiaq.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | sound/soc/soc-core.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 4aa8e2d35061..3f44150d8e30 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -628,6 +628,12 @@ static int soc_suspend(struct platform_device *pdev, pm_message_t state) struct snd_soc_codec *codec = card->codec; int i; + /* If the initialization of this soc device failed, there is no codec + * associated with it. Just bail out in this case. + */ + if (!codec) + return 0; + /* Due to the resume being scheduled into a workqueue we could * suspend before that's finished - wait for it to complete. */ |