aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/pxa/tosa.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/pxa/tosa.c')
-rw-r--r--sound/soc/pxa/tosa.c78
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
37static 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
239static 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
253static int tosa_remove(struct snd_soc_card *card)
254{
255 gpio_free(TOSA_GPIO_L_MUTE);
256 return 0;
257}
258
259static struct snd_soc_card tosa = { 237static 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
267static struct platform_device *tosa_snd_device; 244static int __devinit tosa_probe(struct platform_device *pdev)
268
269static 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
290err_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
294static void __exit tosa_exit(void) 265static 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
299module_init(tosa_init); 274static struct platform_driver tosa_driver = {
300module_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
283module_platform_driver(tosa_driver);
301 284
302/* Module information */ 285/* Module information */
303MODULE_AUTHOR("Richard Purdie"); 286MODULE_AUTHOR("Richard Purdie");
304MODULE_DESCRIPTION("ALSA SoC Tosa"); 287MODULE_DESCRIPTION("ALSA SoC Tosa");
305MODULE_LICENSE("GPL"); 288MODULE_LICENSE("GPL");
289MODULE_ALIAS("platform:tosa-audio");