summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@gmail.com>2010-11-03 15:04:45 +0800
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-11-03 09:08:20 -0400
commitc46e0079cec40b49fbdb86a088cfd50b250fef47 (patch)
treef63438e618de0262fd503b932cd10a6ca6685d46
parent29c798fecb9b846b363b0a02fa662ff42fc19426 (diff)
downloadlinux-3.10-c46e0079cec40b49fbdb86a088cfd50b250fef47.tar.gz
linux-3.10-c46e0079cec40b49fbdb86a088cfd50b250fef47.tar.bz2
linux-3.10-c46e0079cec40b49fbdb86a088cfd50b250fef47.zip
ASoC: Fix snd_soc_register_dais error handling
kzalloc for dai may fail at any iteration of the for loop, thus properly unregister already registered DAIs before return error. The error handling code in snd_soc_register_dais() already ensure all the DAIs are unregistered before return error, we can remove the error handling code to unregister DAIs in snd_soc_register_codec(). Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--sound/soc/soc-core.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 614a8b30d87..441285ade02 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3043,8 +3043,10 @@ int snd_soc_register_dais(struct device *dev,
for (i = 0; i < count; i++) {
dai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL);
- if (dai == NULL)
- return -ENOMEM;
+ if (dai == NULL) {
+ ret = -ENOMEM;
+ goto err;
+ }
/* create DAI component name */
dai->name = fmt_multiple_name(dev, &dai_drv[i]);
@@ -3263,9 +3265,6 @@ int snd_soc_register_codec(struct device *dev,
return 0;
error:
- for (i--; i >= 0; i--)
- snd_soc_unregister_dai(dev);
-
if (codec->reg_cache)
kfree(codec->reg_cache);
kfree(codec->name);