[ALSA] soc - Preliminary ac97 drivers for Toshiba e800 PDAs
[pandora-kernel.git] / sound / soc / pxa / e800_wm9712.c
1 /*
2  * e800-wm9712.c  --  SoC audio for e800
3  *
4  * Based on tosa.c
5  *
6  * Copyright 2007 (c) Ian Molton <spyro@f2s.com>
7  *
8  *  This program is free software; you can redistribute  it and/or modify it
9  *  under  the terms of  the GNU General  Public License as published by the
10  *  Free Software Foundation; version 2 ONLY.
11  *
12  */
13
14 #include <linux/module.h>
15 #include <linux/moduleparam.h>
16 #include <linux/device.h>
17
18 #include <sound/core.h>
19 #include <sound/pcm.h>
20 #include <sound/soc.h>
21 #include <sound/soc-dapm.h>
22
23 #include <asm/mach-types.h>
24 #include <asm/arch/pxa-regs.h>
25 #include <asm/arch/hardware.h>
26 #include <asm/arch/audio.h>
27
28 #include "../codecs/wm9712.h"
29 #include "pxa2xx-pcm.h"
30 #include "pxa2xx-ac97.h"
31
32 static struct snd_soc_machine e800;
33
34 static struct snd_soc_dai_link e800_dai[] = {
35 {
36         .name = "AC97 Aux",
37         .stream_name = "AC97 Aux",
38         .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
39         .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
40 },
41 };
42
43 static struct snd_soc_machine e800 = {
44         .name = "Toshiba e800",
45         .dai_link = e800_dai,
46         .num_links = ARRAY_SIZE(e800_dai),
47 };
48
49 static struct snd_soc_device e800_snd_devdata = {
50         .machine = &e800,
51         .platform = &pxa2xx_soc_platform,
52         .codec_dev = &soc_codec_dev_wm9712,
53 };
54
55 static struct platform_device *e800_snd_device;
56
57 static int __init e800_init(void)
58 {
59         int ret;
60
61         if (!machine_is_e800())
62                 return -ENODEV;
63
64         e800_snd_device = platform_device_alloc("soc-audio", -1);
65         if (!e800_snd_device)
66                 return -ENOMEM;
67
68         platform_set_drvdata(e800_snd_device, &e800_snd_devdata);
69         e800_snd_devdata.dev = &e800_snd_device->dev;
70         ret = platform_device_add(e800_snd_device);
71
72         if (ret)
73                 platform_device_put(e800_snd_device);
74
75         return ret;
76 }
77
78 static void __exit e800_exit(void)
79 {
80         platform_device_unregister(e800_snd_device);
81 }
82
83 module_init(e800_init);
84 module_exit(e800_exit);
85
86 /* Module information */
87 MODULE_AUTHOR("Ian Molton <spyro@f2s.com>");
88 MODULE_DESCRIPTION("ALSA SoC driver for e800");
89 MODULE_LICENSE("GPL");