ASoC: TWL4030: Module unloading fix
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>
Thu, 4 Feb 2010 07:10:10 +0000 (09:10 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 4 Feb 2010 10:49:04 +0000 (10:49 +0000)
The module unloading path had several problems:
- it freed up the private structure twice
- it freed up the codec structure, which was allocated as part
  of the private structure
- it did not freed up the reg_cache
- it did not unregistered the dais and the codec

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/twl4030.c

index e0106a5fd40b5c2c3766abbb614223cea538d4f0..b32aeb38e3a6e4d0e1f46d0cdee8e29034ebd8ba 100644 (file)
@@ -2152,8 +2152,6 @@ static int twl4030_soc_remove(struct platform_device *pdev)
        twl4030_set_bias_level(codec, SND_SOC_BIAS_OFF);
        snd_soc_free_pcms(socdev);
        snd_soc_dapm_free(socdev);
-       kfree(codec->private_data);
-       kfree(codec);
 
        return 0;
 }
@@ -2237,6 +2235,9 @@ static int __devexit twl4030_codec_remove(struct platform_device *pdev)
 {
        struct twl4030_priv *twl4030 = platform_get_drvdata(pdev);
 
+       snd_soc_unregister_dais(&twl4030_dai[0], ARRAY_SIZE(twl4030_dai));
+       snd_soc_unregister_codec(&twl4030->codec);
+       kfree(twl4030->codec.reg_cache);
        kfree(twl4030);
 
        twl4030_codec = NULL;