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

« back to all changes in this revision

Viewing changes to alsa-kernel/soc/omap/omap3pandora.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:
28
28
#include <sound/core.h>
29
29
#include <sound/pcm.h>
30
30
#include <sound/soc.h>
31
 
#include <sound/soc-dapm.h>
32
31
 
33
32
#include <asm/mach-types.h>
 
33
#include <plat/mcbsp.h>
34
34
 
35
35
#include "omap-mcbsp.h"
36
36
#include "omap-pcm.h"
37
 
#include "../codecs/twl4030.h"
38
37
 
39
38
#define OMAP3_PANDORA_DAC_POWER_GPIO    118
40
39
#define OMAP3_PANDORA_AMP_POWER_GPIO    14
43
42
 
44
43
static struct regulator *omap3pandora_dac_reg;
45
44
 
46
 
static int omap3pandora_cmn_hw_params(struct snd_pcm_substream *substream,
47
 
        struct snd_pcm_hw_params *params, unsigned int fmt)
 
45
static int omap3pandora_hw_params(struct snd_pcm_substream *substream,
 
46
        struct snd_pcm_hw_params *params)
48
47
{
49
48
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
50
 
        struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
51
 
        struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
 
49
        struct snd_soc_dai *codec_dai = rtd->codec_dai;
 
50
        struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 
51
        int fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
 
52
                  SND_SOC_DAIFMT_CBS_CFS;
52
53
        int ret;
53
54
 
54
55
        /* Set codec DAI configuration */
91
92
        return 0;
92
93
}
93
94
 
94
 
static int omap3pandora_out_hw_params(struct snd_pcm_substream *substream,
95
 
        struct snd_pcm_hw_params *params)
96
 
{
97
 
        return omap3pandora_cmn_hw_params(substream, params,
98
 
                                          SND_SOC_DAIFMT_I2S |
99
 
                                          SND_SOC_DAIFMT_IB_NF |
100
 
                                          SND_SOC_DAIFMT_CBS_CFS);
101
 
}
102
 
 
103
 
static int omap3pandora_in_hw_params(struct snd_pcm_substream *substream,
104
 
        struct snd_pcm_hw_params *params)
105
 
{
106
 
        return omap3pandora_cmn_hw_params(substream, params,
107
 
                                          SND_SOC_DAIFMT_I2S |
108
 
                                          SND_SOC_DAIFMT_NB_NF |
109
 
                                          SND_SOC_DAIFMT_CBS_CFS);
110
 
}
111
 
 
112
95
static int omap3pandora_dac_event(struct snd_soc_dapm_widget *w,
113
96
        struct snd_kcontrol *k, int event)
114
97
{
183
166
        {"Mic Bias 2", NULL, "Mic (external)"},
184
167
};
185
168
 
186
 
static int omap3pandora_out_init(struct snd_soc_codec *codec)
 
169
static int omap3pandora_out_init(struct snd_soc_pcm_runtime *rtd)
187
170
{
 
171
        struct snd_soc_codec *codec = rtd->codec;
 
172
        struct snd_soc_dapm_context *dapm = &codec->dapm;
188
173
        int ret;
189
174
 
190
175
        /* All TWL4030 output pins are floating */
191
 
        snd_soc_dapm_nc_pin(codec, "OUTL");
192
 
        snd_soc_dapm_nc_pin(codec, "OUTR");
193
 
        snd_soc_dapm_nc_pin(codec, "EARPIECE");
194
 
        snd_soc_dapm_nc_pin(codec, "PREDRIVEL");
195
 
        snd_soc_dapm_nc_pin(codec, "PREDRIVER");
196
 
        snd_soc_dapm_nc_pin(codec, "HSOL");
197
 
        snd_soc_dapm_nc_pin(codec, "HSOR");
198
 
        snd_soc_dapm_nc_pin(codec, "CARKITL");
199
 
        snd_soc_dapm_nc_pin(codec, "CARKITR");
200
 
        snd_soc_dapm_nc_pin(codec, "HFL");
201
 
        snd_soc_dapm_nc_pin(codec, "HFR");
202
 
        snd_soc_dapm_nc_pin(codec, "VIBRA");
 
176
        snd_soc_dapm_nc_pin(dapm, "EARPIECE");
 
177
        snd_soc_dapm_nc_pin(dapm, "PREDRIVEL");
 
178
        snd_soc_dapm_nc_pin(dapm, "PREDRIVER");
 
179
        snd_soc_dapm_nc_pin(dapm, "HSOL");
 
180
        snd_soc_dapm_nc_pin(dapm, "HSOR");
 
181
        snd_soc_dapm_nc_pin(dapm, "CARKITL");
 
182
        snd_soc_dapm_nc_pin(dapm, "CARKITR");
 
183
        snd_soc_dapm_nc_pin(dapm, "HFL");
 
184
        snd_soc_dapm_nc_pin(dapm, "HFR");
 
185
        snd_soc_dapm_nc_pin(dapm, "VIBRA");
203
186
 
204
 
        ret = snd_soc_dapm_new_controls(codec, omap3pandora_out_dapm_widgets,
 
187
        ret = snd_soc_dapm_new_controls(dapm, omap3pandora_out_dapm_widgets,
205
188
                                ARRAY_SIZE(omap3pandora_out_dapm_widgets));
206
189
        if (ret < 0)
207
190
                return ret;
208
191
 
209
 
        snd_soc_dapm_add_routes(codec, omap3pandora_out_map,
 
192
        snd_soc_dapm_add_routes(dapm, omap3pandora_out_map,
210
193
                ARRAY_SIZE(omap3pandora_out_map));
211
194
 
212
 
        return snd_soc_dapm_sync(codec);
 
195
        return snd_soc_dapm_sync(dapm);
213
196
}
214
197
 
215
 
static int omap3pandora_in_init(struct snd_soc_codec *codec)
 
198
static int omap3pandora_in_init(struct snd_soc_pcm_runtime *rtd)
216
199
{
 
200
        struct snd_soc_codec *codec = rtd->codec;
 
201
        struct snd_soc_dapm_context *dapm = &codec->dapm;
217
202
        int ret;
218
203
 
219
204
        /* Not comnnected */
220
 
        snd_soc_dapm_nc_pin(codec, "HSMIC");
221
 
        snd_soc_dapm_nc_pin(codec, "CARKITMIC");
222
 
        snd_soc_dapm_nc_pin(codec, "DIGIMIC0");
223
 
        snd_soc_dapm_nc_pin(codec, "DIGIMIC1");
 
205
        snd_soc_dapm_nc_pin(dapm, "HSMIC");
 
206
        snd_soc_dapm_nc_pin(dapm, "CARKITMIC");
 
207
        snd_soc_dapm_nc_pin(dapm, "DIGIMIC0");
 
208
        snd_soc_dapm_nc_pin(dapm, "DIGIMIC1");
224
209
 
225
 
        ret = snd_soc_dapm_new_controls(codec, omap3pandora_in_dapm_widgets,
 
210
        ret = snd_soc_dapm_new_controls(dapm, omap3pandora_in_dapm_widgets,
226
211
                                ARRAY_SIZE(omap3pandora_in_dapm_widgets));
227
212
        if (ret < 0)
228
213
                return ret;
229
214
 
230
 
        snd_soc_dapm_add_routes(codec, omap3pandora_in_map,
 
215
        snd_soc_dapm_add_routes(dapm, omap3pandora_in_map,
231
216
                ARRAY_SIZE(omap3pandora_in_map));
232
217
 
233
 
        return snd_soc_dapm_sync(codec);
 
218
        return snd_soc_dapm_sync(dapm);
234
219
}
235
220
 
236
 
static struct snd_soc_ops omap3pandora_out_ops = {
237
 
        .hw_params = omap3pandora_out_hw_params,
238
 
};
239
 
 
240
 
static struct snd_soc_ops omap3pandora_in_ops = {
241
 
        .hw_params = omap3pandora_in_hw_params,
 
221
static struct snd_soc_ops omap3pandora_ops = {
 
222
        .hw_params = omap3pandora_hw_params,
242
223
};
243
224
 
244
225
/* Digital audio interface glue - connects codec <--> CPU */
246
227
        {
247
228
                .name = "PCM1773",
248
229
                .stream_name = "HiFi Out",
249
 
                .cpu_dai = &omap_mcbsp_dai[0],
250
 
                .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
251
 
                .ops = &omap3pandora_out_ops,
 
230
                .cpu_dai_name = "omap-mcbsp-dai.1",
 
231
                .codec_dai_name = "twl4030-hifi",
 
232
                .platform_name = "omap-pcm-audio",
 
233
                .codec_name = "twl4030-codec",
 
234
                .ops = &omap3pandora_ops,
252
235
                .init = omap3pandora_out_init,
253
236
        }, {
254
237
                .name = "TWL4030",
255
238
                .stream_name = "Line/Mic In",
256
 
                .cpu_dai = &omap_mcbsp_dai[1],
257
 
                .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
258
 
                .ops = &omap3pandora_in_ops,
 
239
                .cpu_dai_name = "omap-mcbsp-dai.3",
 
240
                .codec_dai_name = "twl4030-hifi",
 
241
                .platform_name = "omap-pcm-audio",
 
242
                .codec_name = "twl4030-codec",
 
243
                .ops = &omap3pandora_ops,
259
244
                .init = omap3pandora_in_init,
260
245
        }
261
246
};
263
248
/* SoC card */
264
249
static struct snd_soc_card snd_soc_card_omap3pandora = {
265
250
        .name = "omap3pandora",
266
 
        .platform = &omap_soc_platform,
267
251
        .dai_link = omap3pandora_dai,
268
252
        .num_links = ARRAY_SIZE(omap3pandora_dai),
269
253
};
270
254
 
271
 
/* Audio subsystem */
272
 
static struct snd_soc_device omap3pandora_snd_data = {
273
 
        .card = &snd_soc_card_omap3pandora,
274
 
        .codec_dev = &soc_codec_dev_twl4030,
275
 
};
276
 
 
277
255
static struct platform_device *omap3pandora_snd_device;
278
256
 
279
257
static int __init omap3pandora_soc_init(void)
316
294
                goto fail1;
317
295
        }
318
296
 
319
 
        platform_set_drvdata(omap3pandora_snd_device, &omap3pandora_snd_data);
320
 
        omap3pandora_snd_data.dev = &omap3pandora_snd_device->dev;
321
 
        *(unsigned int *)omap_mcbsp_dai[0].private_data = 1; /* McBSP2 */
322
 
        *(unsigned int *)omap_mcbsp_dai[1].private_data = 3; /* McBSP4 */
 
297
        platform_set_drvdata(omap3pandora_snd_device, &snd_soc_card_omap3pandora);
323
298
 
324
299
        ret = platform_device_add(omap3pandora_snd_device);
325
300
        if (ret) {
332
307
                pr_err(PREFIX "Failed to get DAC regulator from %s: %ld\n",
333
308
                        dev_name(&omap3pandora_snd_device->dev),
334
309
                        PTR_ERR(omap3pandora_dac_reg));
 
310
                ret = PTR_ERR(omap3pandora_dac_reg);
335
311
                goto fail3;
336
312
        }
337
313