diff options
-rw-r--r-- | sound/soc/atmel/sam9g20_wm8731.c | 51 |
1 files changed, 22 insertions, 29 deletions
diff --git a/sound/soc/atmel/sam9g20_wm8731.c b/sound/soc/atmel/sam9g20_wm8731.c index c88351488f45..228ca6a8e77b 100644 --- a/sound/soc/atmel/sam9g20_wm8731.c +++ b/sound/soc/atmel/sam9g20_wm8731.c | |||
@@ -195,22 +195,15 @@ static struct snd_soc_card snd_soc_at91sam9g20ek = { | |||
195 | .set_bias_level = at91sam9g20ek_set_bias_level, | 195 | .set_bias_level = at91sam9g20ek_set_bias_level, |
196 | }; | 196 | }; |
197 | 197 | ||
198 | static struct platform_device *at91sam9g20ek_snd_device; | 198 | static int __devinit at91sam9g20ek_audio_probe(struct platform_device *pdev) |
199 | |||
200 | static int __init at91sam9g20ek_init(void) | ||
201 | { | 199 | { |
202 | struct clk *pllb; | 200 | struct clk *pllb; |
201 | struct snd_soc_card *card = &snd_soc_at91sam9g20ek; | ||
203 | int ret; | 202 | int ret; |
204 | 203 | ||
205 | if (!(machine_is_at91sam9g20ek() || machine_is_at91sam9g20ek_2mmc())) | 204 | if (!(machine_is_at91sam9g20ek() || machine_is_at91sam9g20ek_2mmc())) |
206 | return -ENODEV; | 205 | return -ENODEV; |
207 | 206 | ||
208 | ret = atmel_ssc_set_audio(0); | ||
209 | if (ret != 0) { | ||
210 | pr_err("Failed to set SSC 0 for audio: %d\n", ret); | ||
211 | return ret; | ||
212 | } | ||
213 | |||
214 | /* | 207 | /* |
215 | * Codec MCLK is supplied by PCK0 - set it up. | 208 | * Codec MCLK is supplied by PCK0 - set it up. |
216 | */ | 209 | */ |
@@ -236,26 +229,14 @@ static int __init at91sam9g20ek_init(void) | |||
236 | 229 | ||
237 | clk_set_rate(mclk, MCLK_RATE); | 230 | clk_set_rate(mclk, MCLK_RATE); |
238 | 231 | ||
239 | at91sam9g20ek_snd_device = platform_device_alloc("soc-audio", -1); | 232 | card->dev = &pdev->dev; |
240 | if (!at91sam9g20ek_snd_device) { | 233 | ret = snd_soc_register_card(card); |
241 | printk(KERN_ERR "ASoC: Platform device allocation failed\n"); | ||
242 | ret = -ENOMEM; | ||
243 | goto err_mclk; | ||
244 | } | ||
245 | |||
246 | platform_set_drvdata(at91sam9g20ek_snd_device, | ||
247 | &snd_soc_at91sam9g20ek); | ||
248 | |||
249 | ret = platform_device_add(at91sam9g20ek_snd_device); | ||
250 | if (ret) { | 234 | if (ret) { |
251 | printk(KERN_ERR "ASoC: Platform device allocation failed\n"); | 235 | printk(KERN_ERR "ASoC: snd_soc_register_card() failed\n"); |
252 | goto err_device_add; | ||
253 | } | 236 | } |
254 | 237 | ||
255 | return ret; | 238 | return ret; |
256 | 239 | ||
257 | err_device_add: | ||
258 | platform_device_put(at91sam9g20ek_snd_device); | ||
259 | err_mclk: | 240 | err_mclk: |
260 | clk_put(mclk); | 241 | clk_put(mclk); |
261 | mclk = NULL; | 242 | mclk = NULL; |
@@ -263,18 +244,30 @@ err: | |||
263 | return ret; | 244 | return ret; |
264 | } | 245 | } |
265 | 246 | ||
266 | static void __exit at91sam9g20ek_exit(void) | 247 | static int __devexit at91sam9g20ek_audio_remove(struct platform_device *pdev) |
267 | { | 248 | { |
268 | platform_device_unregister(at91sam9g20ek_snd_device); | 249 | struct snd_soc_card *card = platform_get_drvdata(pdev); |
269 | at91sam9g20ek_snd_device = NULL; | 250 | |
251 | snd_soc_unregister_card(card); | ||
270 | clk_put(mclk); | 252 | clk_put(mclk); |
271 | mclk = NULL; | 253 | mclk = NULL; |
254 | |||
255 | return 0; | ||
272 | } | 256 | } |
273 | 257 | ||
274 | module_init(at91sam9g20ek_init); | 258 | static struct platform_driver at91sam9g20ek_audio_driver = { |
275 | module_exit(at91sam9g20ek_exit); | 259 | .driver = { |
260 | .name = "at91sam9g20ek-audio", | ||
261 | .owner = THIS_MODULE, | ||
262 | }, | ||
263 | .probe = at91sam9g20ek_audio_probe, | ||
264 | .remove = __devexit_p(at91sam9g20ek_audio_remove), | ||
265 | }; | ||
266 | |||
267 | module_platform_driver(at91sam9g20ek_audio_driver); | ||
276 | 268 | ||
277 | /* Module information */ | 269 | /* Module information */ |
278 | MODULE_AUTHOR("Sedji Gaouaou <sedji.gaouaou@atmel.com>"); | 270 | MODULE_AUTHOR("Sedji Gaouaou <sedji.gaouaou@atmel.com>"); |
279 | MODULE_DESCRIPTION("ALSA SoC AT91SAM9G20EK_WM8731"); | 271 | MODULE_DESCRIPTION("ALSA SoC AT91SAM9G20EK_WM8731"); |
272 | MODULE_ALIAS("platform:at91sam9g20ek-audio"); | ||
280 | MODULE_LICENSE("GPL"); | 273 | MODULE_LICENSE("GPL"); |