diff options
Diffstat (limited to 'sound/soc/pxa/tosa.c')
-rw-r--r-- | sound/soc/pxa/tosa.c | 78 |
1 files changed, 31 insertions, 47 deletions
diff --git a/sound/soc/pxa/tosa.c b/sound/soc/pxa/tosa.c index 620fc69ae63..564ef08a89f 100644 --- a/sound/soc/pxa/tosa.c +++ b/sound/soc/pxa/tosa.c | |||
@@ -34,8 +34,6 @@ | |||
34 | #include "../codecs/wm9712.h" | 34 | #include "../codecs/wm9712.h" |
35 | #include "pxa2xx-ac97.h" | 35 | #include "pxa2xx-ac97.h" |
36 | 36 | ||
37 | static struct snd_soc_card tosa; | ||
38 | |||
39 | #define TOSA_HP 0 | 37 | #define TOSA_HP 0 |
40 | #define TOSA_MIC_INT 1 | 38 | #define TOSA_MIC_INT 1 |
41 | #define TOSA_HEADSET 2 | 39 | #define TOSA_HEADSET 2 |
@@ -236,70 +234,56 @@ static struct snd_soc_dai_link tosa_dai[] = { | |||
236 | }, | 234 | }, |
237 | }; | 235 | }; |
238 | 236 | ||
239 | static int tosa_probe(struct snd_soc_card *card) | ||
240 | { | ||
241 | int ret; | ||
242 | |||
243 | ret = gpio_request(TOSA_GPIO_L_MUTE, "Headphone Jack"); | ||
244 | if (ret) | ||
245 | return ret; | ||
246 | ret = gpio_direction_output(TOSA_GPIO_L_MUTE, 0); | ||
247 | if (ret) | ||
248 | gpio_free(TOSA_GPIO_L_MUTE); | ||
249 | |||
250 | return ret; | ||
251 | } | ||
252 | |||
253 | static int tosa_remove(struct snd_soc_card *card) | ||
254 | { | ||
255 | gpio_free(TOSA_GPIO_L_MUTE); | ||
256 | return 0; | ||
257 | } | ||
258 | |||
259 | static struct snd_soc_card tosa = { | 237 | static struct snd_soc_card tosa = { |
260 | .name = "Tosa", | 238 | .name = "Tosa", |
239 | .owner = THIS_MODULE, | ||
261 | .dai_link = tosa_dai, | 240 | .dai_link = tosa_dai, |
262 | .num_links = ARRAY_SIZE(tosa_dai), | 241 | .num_links = ARRAY_SIZE(tosa_dai), |
263 | .probe = tosa_probe, | ||
264 | .remove = tosa_remove, | ||
265 | }; | 242 | }; |
266 | 243 | ||
267 | static struct platform_device *tosa_snd_device; | 244 | static int __devinit tosa_probe(struct platform_device *pdev) |
268 | |||
269 | static int __init tosa_init(void) | ||
270 | { | 245 | { |
246 | struct snd_soc_card *card = ⤩ | ||
271 | int ret; | 247 | int ret; |
272 | 248 | ||
273 | if (!machine_is_tosa()) | 249 | ret = gpio_request_one(TOSA_GPIO_L_MUTE, GPIOF_OUT_INIT_LOW, |
274 | return -ENODEV; | 250 | "Headphone Jack"); |
275 | 251 | if (ret) | |
276 | tosa_snd_device = platform_device_alloc("soc-audio", -1); | 252 | return ret; |
277 | if (!tosa_snd_device) { | ||
278 | ret = -ENOMEM; | ||
279 | goto err_alloc; | ||
280 | } | ||
281 | |||
282 | platform_set_drvdata(tosa_snd_device, &tosa); | ||
283 | ret = platform_device_add(tosa_snd_device); | ||
284 | |||
285 | if (!ret) | ||
286 | return 0; | ||
287 | 253 | ||
288 | platform_device_put(tosa_snd_device); | 254 | card->dev = &pdev->dev; |
289 | 255 | ||
290 | err_alloc: | 256 | ret = snd_soc_register_card(card); |
257 | if (ret) { | ||
258 | dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", | ||
259 | ret); | ||
260 | gpio_free(TOSA_GPIO_L_MUTE); | ||
261 | } | ||
291 | return ret; | 262 | return ret; |
292 | } | 263 | } |
293 | 264 | ||
294 | static void __exit tosa_exit(void) | 265 | static int __devexit tosa_remove(struct platform_device *pdev) |
295 | { | 266 | { |
296 | platform_device_unregister(tosa_snd_device); | 267 | struct snd_soc_card *card = platform_get_drvdata(pdev); |
268 | |||
269 | gpio_free(TOSA_GPIO_L_MUTE); | ||
270 | snd_soc_unregister_card(card); | ||
271 | return 0; | ||
297 | } | 272 | } |
298 | 273 | ||
299 | module_init(tosa_init); | 274 | static struct platform_driver tosa_driver = { |
300 | module_exit(tosa_exit); | 275 | .driver = { |
276 | .name = "tosa-audio", | ||
277 | .owner = THIS_MODULE, | ||
278 | }, | ||
279 | .probe = tosa_probe, | ||
280 | .remove = __devexit_p(tosa_remove), | ||
281 | }; | ||
282 | |||
283 | module_platform_driver(tosa_driver); | ||
301 | 284 | ||
302 | /* Module information */ | 285 | /* Module information */ |
303 | MODULE_AUTHOR("Richard Purdie"); | 286 | MODULE_AUTHOR("Richard Purdie"); |
304 | MODULE_DESCRIPTION("ALSA SoC Tosa"); | 287 | MODULE_DESCRIPTION("ALSA SoC Tosa"); |
305 | MODULE_LICENSE("GPL"); | 288 | MODULE_LICENSE("GPL"); |
289 | MODULE_ALIAS("platform:tosa-audio"); | ||