~ubuntu-branches/ubuntu/precise/alsa-driver/precise

« back to all changes in this revision

Viewing changes to alsa-kernel/soc/pxa/tosa.c

  • Committer: Bazaar Package Importer
  • Author(s): Luke Yelavich
  • Date: 2011-02-21 18:06:40 UTC
  • mfrom: (1.1.15 upstream)
  • Revision ID: james.westby@ubuntu.com-20110221180640-a8p2yxtvgf7xbxub
Tags: 1.0.24+dfsg-0ubuntu1
* New upstream release
* Refreshed patches:
  - distinguish_kernel_makefile_and_source_dirs.patch
  - debian_dfsg_configure.patch
* debian/control: Update Vcs-bzr field to point to new branch location

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include <sound/core.h>
27
27
#include <sound/pcm.h>
28
28
#include <sound/soc.h>
29
 
#include <sound/soc-dapm.h>
30
29
 
31
30
#include <asm/mach-types.h>
32
31
#include <mach/tosa.h>
33
32
#include <mach/audio.h>
34
33
 
35
34
#include "../codecs/wm9712.h"
36
 
#include "pxa2xx-pcm.h"
37
35
#include "pxa2xx-ac97.h"
38
36
 
39
37
static struct snd_soc_card tosa;
50
48
 
51
49
static void tosa_ext_control(struct snd_soc_codec *codec)
52
50
{
 
51
        struct snd_soc_dapm_context *dapm = &codec->dapm;
 
52
 
53
53
        /* set up jack connection */
54
54
        switch (tosa_jack_func) {
55
55
        case TOSA_HP:
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");
59
59
                break;
60
60
        case TOSA_MIC_INT:
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");
64
64
                break;
65
65
        case TOSA_HEADSET:
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");
69
69
                break;
70
70
        }
71
71
 
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");
74
74
        else
75
 
                snd_soc_dapm_disable_pin(codec, "Speaker");
 
75
                snd_soc_dapm_disable_pin(dapm, "Speaker");
76
76
 
77
 
        snd_soc_dapm_sync(codec);
 
77
        snd_soc_dapm_sync(dapm);
78
78
}
79
79
 
80
80
static int tosa_startup(struct snd_pcm_substream *substream)
81
81
{
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;
 
84
 
 
85
        mutex_lock(&codec->mutex);
84
86
 
85
87
        /* check the jack status at stream startup */
86
88
        tosa_ext_control(codec);
 
89
 
 
90
        mutex_unlock(&codec->mutex);
 
91
 
87
92
        return 0;
88
93
}
89
94
 
184
189
                tosa_set_spk),
185
190
};
186
191
 
187
 
static int tosa_ac97_init(struct snd_soc_codec *codec)
 
192
static int tosa_ac97_init(struct snd_soc_pcm_runtime *rtd)
188
193
{
 
194
        struct snd_soc_codec *codec = rtd->codec;
 
195
        struct snd_soc_dapm_context *dapm = &codec->dapm;
189
196
        int err;
190
197
 
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");
193
200
 
194
201
        /* add tosa specific controls */
195
202
        err = snd_soc_add_controls(codec, tosa_controls,
198
205
                return err;
199
206
 
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));
203
210
 
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));
206
213
 
207
 
        snd_soc_dapm_sync(codec);
 
214
        snd_soc_dapm_sync(dapm);
208
215
        return 0;
209
216
}
210
217
 
212
219
{
213
220
        .name = "AC97",
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,
219
228
},
220
229
{
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,
226
237
},
227
238
};
248
259
 
249
260
static struct snd_soc_card tosa = {
250
261
        .name = "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,
256
266
};
257
267
 
258
 
static struct snd_soc_device tosa_snd_devdata = {
259
 
        .card = &tosa,
260
 
        .codec_dev = &soc_codec_dev_wm9712,
261
 
};
262
 
 
263
268
static struct platform_device *tosa_snd_device;
264
269
 
265
270
static int __init tosa_init(void)
275
280
                goto err_alloc;
276
281
        }
277
282
 
278
 
        platform_set_drvdata(tosa_snd_device, &tosa_snd_devdata);
279
 
        tosa_snd_devdata.dev = &tosa_snd_device->dev;
 
283
        platform_set_drvdata(tosa_snd_device, &tosa);
280
284
        ret = platform_device_add(tosa_snd_device);
281
285
 
282
286
        if (!ret)