diff options
| author | Axel Lin <axel.lin@gmail.com> | 2010-11-24 09:24:01 -0500 |
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-25 16:15:49 -0500 |
| commit | 25436180ee8bed6740f29d92c2030c759885c147 (patch) | |
| tree | 4ee596f9884dad0a3eee165e8f96e29d08a52ad1 | |
| parent | fe99b55994f08d321cc5f621c3634b1de4961d01 (diff) | |
ASoC: Fix resource reclaim for osk5912
In current implementation, there are resources leak in the error path.
This patch properly reclaims the allocated resources in the error path.
Also adds a missing clk_put in osk_soc_exit.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Acked-by: Jarkko Nikula <jhnikula@gmail.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
| -rw-r--r-- | sound/soc/omap/osk5912.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/sound/soc/omap/osk5912.c b/sound/soc/omap/osk5912.c index f0e66255642..65ae00e976e 100644 --- a/sound/soc/omap/osk5912.c +++ b/sound/soc/omap/osk5912.c | |||
| @@ -177,7 +177,8 @@ static int __init osk_soc_init(void) | |||
| 177 | tlv320aic23_mclk = clk_get(dev, "mclk"); | 177 | tlv320aic23_mclk = clk_get(dev, "mclk"); |
| 178 | if (IS_ERR(tlv320aic23_mclk)) { | 178 | if (IS_ERR(tlv320aic23_mclk)) { |
| 179 | printk(KERN_ERR "Could not get mclk clock\n"); | 179 | printk(KERN_ERR "Could not get mclk clock\n"); |
| 180 | return -ENODEV; | 180 | err = PTR_ERR(tlv320aic23_mclk); |
| 181 | goto err2; | ||
| 181 | } | 182 | } |
| 182 | 183 | ||
| 183 | /* | 184 | /* |
| @@ -188,7 +189,7 @@ static int __init osk_soc_init(void) | |||
| 188 | if (clk_set_rate(tlv320aic23_mclk, CODEC_CLOCK)) { | 189 | if (clk_set_rate(tlv320aic23_mclk, CODEC_CLOCK)) { |
| 189 | printk(KERN_ERR "Cannot set MCLK for AIC23 CODEC\n"); | 190 | printk(KERN_ERR "Cannot set MCLK for AIC23 CODEC\n"); |
| 190 | err = -ECANCELED; | 191 | err = -ECANCELED; |
| 191 | goto err1; | 192 | goto err3; |
| 192 | } | 193 | } |
| 193 | } | 194 | } |
| 194 | 195 | ||
| @@ -196,9 +197,12 @@ static int __init osk_soc_init(void) | |||
| 196 | (uint) clk_get_rate(tlv320aic23_mclk), CODEC_CLOCK); | 197 | (uint) clk_get_rate(tlv320aic23_mclk), CODEC_CLOCK); |
| 197 | 198 | ||
| 198 | return 0; | 199 | return 0; |
| 199 | err1: | 200 | |
| 201 | err3: | ||
| 200 | clk_put(tlv320aic23_mclk); | 202 | clk_put(tlv320aic23_mclk); |
| 203 | err2: | ||
| 201 | platform_device_del(osk_snd_device); | 204 | platform_device_del(osk_snd_device); |
| 205 | err1: | ||
| 202 | platform_device_put(osk_snd_device); | 206 | platform_device_put(osk_snd_device); |
| 203 | 207 | ||
| 204 | return err; | 208 | return err; |
| @@ -207,6 +211,7 @@ err1: | |||
| 207 | 211 | ||
| 208 | static void __exit osk_soc_exit(void) | 212 | static void __exit osk_soc_exit(void) |
| 209 | { | 213 | { |
| 214 | clk_put(tlv320aic23_mclk); | ||
| 210 | platform_device_unregister(osk_snd_device); | 215 | platform_device_unregister(osk_snd_device); |
| 211 | } | 216 | } |
| 212 | 217 | ||
