Blame view
sound/soc/au1x/db1200.c
4.98 KB
05ae32318 MIPS/SOUND: Alche... |
1 |
/* |
f869d42e5 MIPS: Alchemy: Im... |
2 |
* DB1200/DB1300/DB1550 ASoC audio fabric support code. |
05ae32318 MIPS/SOUND: Alche... |
3 |
* |
adbc7a5a6 ASoC: au1x: updat... |
4 |
* (c) 2008-2011 Manuel Lauss <manuel.lauss@googlemail.com> |
05ae32318 MIPS/SOUND: Alche... |
5 6 7 8 9 10 11 12 13 14 15 |
* */ #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/timer.h> #include <linux/interrupt.h> #include <linux/platform_device.h> #include <sound/core.h> #include <sound/pcm.h> #include <sound/soc.h> |
05ae32318 MIPS/SOUND: Alche... |
16 17 18 19 |
#include <asm/mach-au1x00/au1000.h> #include <asm/mach-au1x00/au1xxx_psc.h> #include <asm/mach-au1x00/au1xxx_dbdma.h> #include <asm/mach-db1x00/bcsr.h> |
05ae32318 MIPS/SOUND: Alche... |
20 21 |
#include "../codecs/wm8731.h" #include "psc.h" |
adbc7a5a6 ASoC: au1x: updat... |
22 23 24 25 26 27 28 |
static struct platform_device_id db1200_pids[] = { { .name = "db1200-ac97", .driver_data = 0, }, { .name = "db1200-i2s", .driver_data = 1, |
64cd04d0c MIPS: Alchemy: Ba... |
29 30 31 32 33 34 |
}, { .name = "db1300-ac97", .driver_data = 2, }, { .name = "db1300-i2s", .driver_data = 3, |
f869d42e5 MIPS: Alchemy: Im... |
35 36 37 38 39 40 |
}, { .name = "db1550-ac97", .driver_data = 4, }, { .name = "db1550-i2s", .driver_data = 5, |
adbc7a5a6 ASoC: au1x: updat... |
41 42 43 |
}, {}, }; |
05ae32318 MIPS/SOUND: Alche... |
44 45 46 47 48 |
/*------------------------- AC97 PART ---------------------------*/ static struct snd_soc_dai_link db1200_ac97_dai = { .name = "AC97", .stream_name = "AC97 HiFi", |
f0fba2ad1 ASoC: multi-compo... |
49 |
.codec_dai_name = "ac97-hifi", |
ffc4fdbbe ASoC: fix au1x pl... |
50 51 52 |
.cpu_dai_name = "au1xpsc_ac97.1", .platform_name = "au1xpsc-pcm.1", .codec_name = "ac97-codec.1", |
05ae32318 MIPS/SOUND: Alche... |
53 54 55 56 |
}; static struct snd_soc_card db1200_ac97_machine = { .name = "DB1200_AC97", |
662d4e5c2 ASoC: au1x: Add .... |
57 |
.owner = THIS_MODULE, |
05ae32318 MIPS/SOUND: Alche... |
58 59 |
.dai_link = &db1200_ac97_dai, .num_links = 1, |
05ae32318 MIPS/SOUND: Alche... |
60 |
}; |
64cd04d0c MIPS: Alchemy: Ba... |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
static struct snd_soc_dai_link db1300_ac97_dai = { .name = "AC97", .stream_name = "AC97 HiFi", .codec_dai_name = "wm9712-hifi", .cpu_dai_name = "au1xpsc_ac97.1", .platform_name = "au1xpsc-pcm.1", .codec_name = "wm9712-codec.1", }; static struct snd_soc_card db1300_ac97_machine = { .name = "DB1300_AC97", .dai_link = &db1300_ac97_dai, .num_links = 1, }; |
f869d42e5 MIPS: Alchemy: Im... |
75 76 77 78 79 |
static struct snd_soc_card db1550_ac97_machine = { .name = "DB1550_AC97", .dai_link = &db1200_ac97_dai, .num_links = 1, }; |
05ae32318 MIPS/SOUND: Alche... |
80 81 82 83 84 |
/*------------------------- I2S PART ---------------------------*/ static int db1200_i2s_startup(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = substream->private_data; |
f0fba2ad1 ASoC: multi-compo... |
85 86 |
struct snd_soc_dai *codec_dai = rtd->codec_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
05ae32318 MIPS/SOUND: Alche... |
87 88 89 |
int ret; /* WM8731 has its own 12MHz crystal */ |
9745e824a ASoC: Support non... |
90 |
snd_soc_dai_set_sysclk(codec_dai, WM8731_SYSCLK_XTAL, |
05ae32318 MIPS/SOUND: Alche... |
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
12000000, SND_SOC_CLOCK_IN); /* codec is bitclock and lrclk master */ ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); if (ret < 0) goto out; ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); if (ret < 0) goto out; ret = 0; out: return ret; } static struct snd_soc_ops db1200_i2s_wm8731_ops = { .startup = db1200_i2s_startup, }; static struct snd_soc_dai_link db1200_i2s_dai = { .name = "WM8731", .stream_name = "WM8731 PCM", |
ffc4fdbbe ASoC: fix au1x pl... |
116 117 118 |
.codec_dai_name = "wm8731-hifi", .cpu_dai_name = "au1xpsc_i2s.1", .platform_name = "au1xpsc-pcm.1", |
99b59f3cc ASoC: Remove -cod... |
119 |
.codec_name = "wm8731.0-001b", |
05ae32318 MIPS/SOUND: Alche... |
120 121 122 123 124 |
.ops = &db1200_i2s_wm8731_ops, }; static struct snd_soc_card db1200_i2s_machine = { .name = "DB1200_I2S", |
662d4e5c2 ASoC: au1x: Add .... |
125 |
.owner = THIS_MODULE, |
05ae32318 MIPS/SOUND: Alche... |
126 127 |
.dai_link = &db1200_i2s_dai, .num_links = 1, |
05ae32318 MIPS/SOUND: Alche... |
128 |
}; |
64cd04d0c MIPS: Alchemy: Ba... |
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
static struct snd_soc_dai_link db1300_i2s_dai = { .name = "WM8731", .stream_name = "WM8731 PCM", .codec_dai_name = "wm8731-hifi", .cpu_dai_name = "au1xpsc_i2s.2", .platform_name = "au1xpsc-pcm.2", .codec_name = "wm8731.0-001b", .ops = &db1200_i2s_wm8731_ops, }; static struct snd_soc_card db1300_i2s_machine = { .name = "DB1300_I2S", .dai_link = &db1300_i2s_dai, .num_links = 1, }; |
f869d42e5 MIPS: Alchemy: Im... |
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
static struct snd_soc_dai_link db1550_i2s_dai = { .name = "WM8731", .stream_name = "WM8731 PCM", .codec_dai_name = "wm8731-hifi", .cpu_dai_name = "au1xpsc_i2s.3", .platform_name = "au1xpsc-pcm.3", .codec_name = "wm8731.0-001b", .ops = &db1200_i2s_wm8731_ops, }; static struct snd_soc_card db1550_i2s_machine = { .name = "DB1550_I2S", .dai_link = &db1550_i2s_dai, .num_links = 1, }; |
05ae32318 MIPS/SOUND: Alche... |
159 |
/*------------------------- COMMON PART ---------------------------*/ |
adbc7a5a6 ASoC: au1x: updat... |
160 161 162 |
static struct snd_soc_card *db1200_cards[] __devinitdata = { &db1200_ac97_machine, &db1200_i2s_machine, |
64cd04d0c MIPS: Alchemy: Ba... |
163 164 |
&db1300_ac97_machine, &db1300_i2s_machine, |
f869d42e5 MIPS: Alchemy: Im... |
165 166 |
&db1550_ac97_machine, &db1550_i2s_machine, |
adbc7a5a6 ASoC: au1x: updat... |
167 |
}; |
05ae32318 MIPS/SOUND: Alche... |
168 |
|
adbc7a5a6 ASoC: au1x: updat... |
169 |
static int __devinit db1200_audio_probe(struct platform_device *pdev) |
05ae32318 MIPS/SOUND: Alche... |
170 |
{ |
adbc7a5a6 ASoC: au1x: updat... |
171 172 |
const struct platform_device_id *pid = platform_get_device_id(pdev); struct snd_soc_card *card; |
05ae32318 MIPS/SOUND: Alche... |
173 |
|
adbc7a5a6 ASoC: au1x: updat... |
174 175 176 177 |
card = db1200_cards[pid->driver_data]; card->dev = &pdev->dev; return snd_soc_register_card(card); } |
05ae32318 MIPS/SOUND: Alche... |
178 |
|
adbc7a5a6 ASoC: au1x: updat... |
179 180 181 182 183 184 |
static int __devexit db1200_audio_remove(struct platform_device *pdev) { struct snd_soc_card *card = platform_get_drvdata(pdev); snd_soc_unregister_card(card); return 0; } |
05ae32318 MIPS/SOUND: Alche... |
185 |
|
adbc7a5a6 ASoC: au1x: updat... |
186 187 188 189 190 191 192 193 194 195 |
static struct platform_driver db1200_audio_driver = { .driver = { .name = "db1200-ac97", .owner = THIS_MODULE, .pm = &snd_soc_pm_ops, }, .id_table = db1200_pids, .probe = db1200_audio_probe, .remove = __devexit_p(db1200_audio_remove), }; |
05ae32318 MIPS/SOUND: Alche... |
196 |
|
8a124f9cc ASoC: Convert au1... |
197 |
module_platform_driver(db1200_audio_driver); |
05ae32318 MIPS/SOUND: Alche... |
198 199 |
MODULE_LICENSE("GPL"); |
f869d42e5 MIPS: Alchemy: Im... |
200 |
MODULE_DESCRIPTION("DB1200/DB1300/DB1550 ASoC audio support"); |
05ae32318 MIPS/SOUND: Alche... |
201 |
MODULE_AUTHOR("Manuel Lauss"); |