On Thu, Nov 25, 2010 at 03:14:03PM +0800, Axel Lin wrote: > Fix imx_phycore_init() error path and imx_phycore_exit() to properly free > allocated resources. > > Signed-off-by: Axel Lin <axel.lin@xxxxxxxxx> Acked-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > --- > sound/soc/imx/phycore-ac97.c | 28 +++++++++++++++++++++------- > 1 files changed, 21 insertions(+), 7 deletions(-) > > diff --git a/sound/soc/imx/phycore-ac97.c b/sound/soc/imx/phycore-ac97.c > index db157f7..a7deb5c 100644 > --- a/sound/soc/imx/phycore-ac97.c > +++ b/sound/soc/imx/phycore-ac97.c > @@ -42,6 +42,7 @@ static struct snd_soc_card imx_phycore = { > .num_links = ARRAY_SIZE(imx_phycore_dai_ac97), > }; > > +static struct platform_device *imx_phycore_snd_ac97_device; > static struct platform_device *imx_phycore_snd_device; > > static int __init imx_phycore_init(void) > @@ -52,29 +53,42 @@ static int __init imx_phycore_init(void) > /* return happy. We might run on a totally different machine */ > return 0; > > - imx_phycore_snd_device = platform_device_alloc("soc-audio", -1); > - if (!imx_phycore_snd_device) > + imx_phycore_snd_ac97_device = platform_device_alloc("soc-audio", -1); > + if (!imx_phycore_snd_ac97_device) > return -ENOMEM; > > - platform_set_drvdata(imx_phycore_snd_device, &imx_phycore); > - ret = platform_device_add(imx_phycore_snd_device); > + platform_set_drvdata(imx_phycore_snd_ac97_device, &imx_phycore); > + ret = platform_device_add(imx_phycore_snd_ac97_device); > + if (ret) > + goto fail1; > > imx_phycore_snd_device = platform_device_alloc("wm9712-codec", -1); > - if (!imx_phycore_snd_device) > - return -ENOMEM; > + if (!imx_phycore_snd_device) { > + ret = -ENOMEM; > + goto fail2; > + } > ret = platform_device_add(imx_phycore_snd_device); > > if (ret) { > printk(KERN_ERR "ASoC: Platform device allocation failed\n"); > - platform_device_put(imx_phycore_snd_device); > + goto fail3; > } > > + return 0; > + > +fail3: > + platform_device_put(imx_phycore_snd_device); > +fail2: > + platform_device_del(imx_phycore_snd_ac97_device); > +fail1: > + platform_device_put(imx_phycore_snd_ac97_device); > return ret; > } > > static void __exit imx_phycore_exit(void) > { > platform_device_unregister(imx_phycore_snd_device); > + platform_device_unregister(imx_phycore_snd_ac97_device); > } > > late_initcall(imx_phycore_init); > -- > 1.7.2 > > > > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel