51
49
static void tosa_ext_control(struct snd_soc_codec *codec)
51
struct snd_soc_dapm_context *dapm = &codec->dapm;
53
53
/* set up jack connection */
54
54
switch (tosa_jack_func) {
56
snd_soc_dapm_disable_pin(codec, "Mic (Internal)");
57
snd_soc_dapm_enable_pin(codec, "Headphone Jack");
58
snd_soc_dapm_disable_pin(codec, "Headset Jack");
56
snd_soc_dapm_disable_pin(dapm, "Mic (Internal)");
57
snd_soc_dapm_enable_pin(dapm, "Headphone Jack");
58
snd_soc_dapm_disable_pin(dapm, "Headset Jack");
61
snd_soc_dapm_enable_pin(codec, "Mic (Internal)");
62
snd_soc_dapm_disable_pin(codec, "Headphone Jack");
63
snd_soc_dapm_disable_pin(codec, "Headset Jack");
61
snd_soc_dapm_enable_pin(dapm, "Mic (Internal)");
62
snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
63
snd_soc_dapm_disable_pin(dapm, "Headset Jack");
66
snd_soc_dapm_disable_pin(codec, "Mic (Internal)");
67
snd_soc_dapm_disable_pin(codec, "Headphone Jack");
68
snd_soc_dapm_enable_pin(codec, "Headset Jack");
66
snd_soc_dapm_disable_pin(dapm, "Mic (Internal)");
67
snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
68
snd_soc_dapm_enable_pin(dapm, "Headset Jack");
72
72
if (tosa_spk_func == TOSA_SPK_ON)
73
snd_soc_dapm_enable_pin(codec, "Speaker");
73
snd_soc_dapm_enable_pin(dapm, "Speaker");
75
snd_soc_dapm_disable_pin(codec, "Speaker");
75
snd_soc_dapm_disable_pin(dapm, "Speaker");
77
snd_soc_dapm_sync(codec);
77
snd_soc_dapm_sync(dapm);
80
80
static int tosa_startup(struct snd_pcm_substream *substream)
82
82
struct snd_soc_pcm_runtime *rtd = substream->private_data;
83
struct snd_soc_codec *codec = rtd->socdev->card->codec;
83
struct snd_soc_codec *codec = rtd->codec;
85
mutex_lock(&codec->mutex);
85
87
/* check the jack status at stream startup */
86
88
tosa_ext_control(codec);
90
mutex_unlock(&codec->mutex);
187
static int tosa_ac97_init(struct snd_soc_codec *codec)
192
static int tosa_ac97_init(struct snd_soc_pcm_runtime *rtd)
194
struct snd_soc_codec *codec = rtd->codec;
195
struct snd_soc_dapm_context *dapm = &codec->dapm;
191
snd_soc_dapm_nc_pin(codec, "OUT3");
192
snd_soc_dapm_nc_pin(codec, "MONOOUT");
198
snd_soc_dapm_nc_pin(dapm, "OUT3");
199
snd_soc_dapm_nc_pin(dapm, "MONOOUT");
194
201
/* add tosa specific controls */
195
202
err = snd_soc_add_controls(codec, tosa_controls,
200
207
/* add tosa specific widgets */
201
snd_soc_dapm_new_controls(codec, tosa_dapm_widgets,
208
snd_soc_dapm_new_controls(dapm, tosa_dapm_widgets,
202
209
ARRAY_SIZE(tosa_dapm_widgets));
204
211
/* set up tosa specific audio path audio_map */
205
snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
212
snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
207
snd_soc_dapm_sync(codec);
214
snd_soc_dapm_sync(dapm);
214
221
.stream_name = "AC97 HiFi",
215
.cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
216
.codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI],
222
.cpu_dai_name = "pxa-ac97.0",
223
.codec_dai_name = "wm9712-hifi",
224
.platform_name = "pxa-pcm-audio",
225
.codec_name = "wm9712-codec",
217
226
.init = tosa_ac97_init,
218
227
.ops = &tosa_ops,
221
230
.name = "AC97 Aux",
222
231
.stream_name = "AC97 Aux",
223
.cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
224
.codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX],
232
.cpu_dai_name = "pxa-ac97.1",
233
.codec_dai_name = "wm9712-aux",
234
.platform_name = "pxa-pcm-audio",
235
.codec_name = "wm9712-codec",
225
236
.ops = &tosa_ops,
249
260
static struct snd_soc_card tosa = {
251
.platform = &pxa2xx_soc_platform,
252
262
.dai_link = tosa_dai,
253
263
.num_links = ARRAY_SIZE(tosa_dai),
254
264
.probe = tosa_probe,
255
265
.remove = tosa_remove,
258
static struct snd_soc_device tosa_snd_devdata = {
260
.codec_dev = &soc_codec_dev_wm9712,
263
268
static struct platform_device *tosa_snd_device;
265
270
static int __init tosa_init(void)