aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/omap/omap3pandora.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/omap/omap3pandora.c')
-rw-r--r--sound/soc/omap/omap3pandora.c82
1 files changed, 40 insertions, 42 deletions
diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c
index 9eecac135bbb..8047c521e318 100644
--- a/sound/soc/omap/omap3pandora.c
+++ b/sound/soc/omap/omap3pandora.c
@@ -28,13 +28,12 @@
28#include <sound/core.h> 28#include <sound/core.h>
29#include <sound/pcm.h> 29#include <sound/pcm.h>
30#include <sound/soc.h> 30#include <sound/soc.h>
31#include <sound/soc-dapm.h>
32 31
33#include <asm/mach-types.h> 32#include <asm/mach-types.h>
33#include <plat/mcbsp.h>
34 34
35#include "omap-mcbsp.h" 35#include "omap-mcbsp.h"
36#include "omap-pcm.h" 36#include "omap-pcm.h"
37#include "../codecs/twl4030.h"
38 37
39#define OMAP3_PANDORA_DAC_POWER_GPIO 118 38#define OMAP3_PANDORA_DAC_POWER_GPIO 118
40#define OMAP3_PANDORA_AMP_POWER_GPIO 14 39#define OMAP3_PANDORA_AMP_POWER_GPIO 14
@@ -47,8 +46,8 @@ static int omap3pandora_hw_params(struct snd_pcm_substream *substream,
47 struct snd_pcm_hw_params *params) 46 struct snd_pcm_hw_params *params)
48{ 47{
49 struct snd_soc_pcm_runtime *rtd = substream->private_data; 48 struct snd_soc_pcm_runtime *rtd = substream->private_data;
50 struct snd_soc_dai *codec_dai = rtd->dai->codec_dai; 49 struct snd_soc_dai *codec_dai = rtd->codec_dai;
51 struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; 50 struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
52 int fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | 51 int fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
53 SND_SOC_DAIFMT_CBS_CFS; 52 SND_SOC_DAIFMT_CBS_CFS;
54 int ret; 53 int ret;
@@ -167,52 +166,56 @@ static const struct snd_soc_dapm_route omap3pandora_in_map[] = {
167 {"Mic Bias 2", NULL, "Mic (external)"}, 166 {"Mic Bias 2", NULL, "Mic (external)"},
168}; 167};
169 168
170static int omap3pandora_out_init(struct snd_soc_codec *codec) 169static int omap3pandora_out_init(struct snd_soc_pcm_runtime *rtd)
171{ 170{
171 struct snd_soc_codec *codec = rtd->codec;
172 struct snd_soc_dapm_context *dapm = &codec->dapm;
172 int ret; 173 int ret;
173 174
174 /* All TWL4030 output pins are floating */ 175 /* All TWL4030 output pins are floating */
175 snd_soc_dapm_nc_pin(codec, "EARPIECE"); 176 snd_soc_dapm_nc_pin(dapm, "EARPIECE");
176 snd_soc_dapm_nc_pin(codec, "PREDRIVEL"); 177 snd_soc_dapm_nc_pin(dapm, "PREDRIVEL");
177 snd_soc_dapm_nc_pin(codec, "PREDRIVER"); 178 snd_soc_dapm_nc_pin(dapm, "PREDRIVER");
178 snd_soc_dapm_nc_pin(codec, "HSOL"); 179 snd_soc_dapm_nc_pin(dapm, "HSOL");
179 snd_soc_dapm_nc_pin(codec, "HSOR"); 180 snd_soc_dapm_nc_pin(dapm, "HSOR");
180 snd_soc_dapm_nc_pin(codec, "CARKITL"); 181 snd_soc_dapm_nc_pin(dapm, "CARKITL");
181 snd_soc_dapm_nc_pin(codec, "CARKITR"); 182 snd_soc_dapm_nc_pin(dapm, "CARKITR");
182 snd_soc_dapm_nc_pin(codec, "HFL"); 183 snd_soc_dapm_nc_pin(dapm, "HFL");
183 snd_soc_dapm_nc_pin(codec, "HFR"); 184 snd_soc_dapm_nc_pin(dapm, "HFR");
184 snd_soc_dapm_nc_pin(codec, "VIBRA"); 185 snd_soc_dapm_nc_pin(dapm, "VIBRA");
185 186
186 ret = snd_soc_dapm_new_controls(codec, omap3pandora_out_dapm_widgets, 187 ret = snd_soc_dapm_new_controls(dapm, omap3pandora_out_dapm_widgets,
187 ARRAY_SIZE(omap3pandora_out_dapm_widgets)); 188 ARRAY_SIZE(omap3pandora_out_dapm_widgets));
188 if (ret < 0) 189 if (ret < 0)
189 return ret; 190 return ret;
190 191
191 snd_soc_dapm_add_routes(codec, omap3pandora_out_map, 192 snd_soc_dapm_add_routes(dapm, omap3pandora_out_map,
192 ARRAY_SIZE(omap3pandora_out_map)); 193 ARRAY_SIZE(omap3pandora_out_map));
193 194
194 return snd_soc_dapm_sync(codec); 195 return snd_soc_dapm_sync(dapm);
195} 196}
196 197
197static int omap3pandora_in_init(struct snd_soc_codec *codec) 198static int omap3pandora_in_init(struct snd_soc_pcm_runtime *rtd)
198{ 199{
200 struct snd_soc_codec *codec = rtd->codec;
201 struct snd_soc_dapm_context *dapm = &codec->dapm;
199 int ret; 202 int ret;
200 203
201 /* Not comnnected */ 204 /* Not comnnected */
202 snd_soc_dapm_nc_pin(codec, "HSMIC"); 205 snd_soc_dapm_nc_pin(dapm, "HSMIC");
203 snd_soc_dapm_nc_pin(codec, "CARKITMIC"); 206 snd_soc_dapm_nc_pin(dapm, "CARKITMIC");
204 snd_soc_dapm_nc_pin(codec, "DIGIMIC0"); 207 snd_soc_dapm_nc_pin(dapm, "DIGIMIC0");
205 snd_soc_dapm_nc_pin(codec, "DIGIMIC1"); 208 snd_soc_dapm_nc_pin(dapm, "DIGIMIC1");
206 209
207 ret = snd_soc_dapm_new_controls(codec, omap3pandora_in_dapm_widgets, 210 ret = snd_soc_dapm_new_controls(dapm, omap3pandora_in_dapm_widgets,
208 ARRAY_SIZE(omap3pandora_in_dapm_widgets)); 211 ARRAY_SIZE(omap3pandora_in_dapm_widgets));
209 if (ret < 0) 212 if (ret < 0)
210 return ret; 213 return ret;
211 214
212 snd_soc_dapm_add_routes(codec, omap3pandora_in_map, 215 snd_soc_dapm_add_routes(dapm, omap3pandora_in_map,
213 ARRAY_SIZE(omap3pandora_in_map)); 216 ARRAY_SIZE(omap3pandora_in_map));
214 217
215 return snd_soc_dapm_sync(codec); 218 return snd_soc_dapm_sync(dapm);
216} 219}
217 220
218static struct snd_soc_ops omap3pandora_ops = { 221static struct snd_soc_ops omap3pandora_ops = {
@@ -224,15 +227,19 @@ static struct snd_soc_dai_link omap3pandora_dai[] = {
224 { 227 {
225 .name = "PCM1773", 228 .name = "PCM1773",
226 .stream_name = "HiFi Out", 229 .stream_name = "HiFi Out",
227 .cpu_dai = &omap_mcbsp_dai[0], 230 .cpu_dai_name = "omap-mcbsp-dai.1",
228 .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI], 231 .codec_dai_name = "twl4030-hifi",
232 .platform_name = "omap-pcm-audio",
233 .codec_name = "twl4030-codec",
229 .ops = &omap3pandora_ops, 234 .ops = &omap3pandora_ops,
230 .init = omap3pandora_out_init, 235 .init = omap3pandora_out_init,
231 }, { 236 }, {
232 .name = "TWL4030", 237 .name = "TWL4030",
233 .stream_name = "Line/Mic In", 238 .stream_name = "Line/Mic In",
234 .cpu_dai = &omap_mcbsp_dai[1], 239 .cpu_dai_name = "omap-mcbsp-dai.3",
235 .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI], 240 .codec_dai_name = "twl4030-hifi",
241 .platform_name = "omap-pcm-audio",
242 .codec_name = "twl4030-codec",
236 .ops = &omap3pandora_ops, 243 .ops = &omap3pandora_ops,
237 .init = omap3pandora_in_init, 244 .init = omap3pandora_in_init,
238 } 245 }
@@ -241,17 +248,10 @@ static struct snd_soc_dai_link omap3pandora_dai[] = {
241/* SoC card */ 248/* SoC card */
242static struct snd_soc_card snd_soc_card_omap3pandora = { 249static struct snd_soc_card snd_soc_card_omap3pandora = {
243 .name = "omap3pandora", 250 .name = "omap3pandora",
244 .platform = &omap_soc_platform,
245 .dai_link = omap3pandora_dai, 251 .dai_link = omap3pandora_dai,
246 .num_links = ARRAY_SIZE(omap3pandora_dai), 252 .num_links = ARRAY_SIZE(omap3pandora_dai),
247}; 253};
248 254
249/* Audio subsystem */
250static struct snd_soc_device omap3pandora_snd_data = {
251 .card = &snd_soc_card_omap3pandora,
252 .codec_dev = &soc_codec_dev_twl4030,
253};
254
255static struct platform_device *omap3pandora_snd_device; 255static struct platform_device *omap3pandora_snd_device;
256 256
257static int __init omap3pandora_soc_init(void) 257static int __init omap3pandora_soc_init(void)
@@ -294,10 +294,7 @@ static int __init omap3pandora_soc_init(void)
294 goto fail1; 294 goto fail1;
295 } 295 }
296 296
297 platform_set_drvdata(omap3pandora_snd_device, &omap3pandora_snd_data); 297 platform_set_drvdata(omap3pandora_snd_device, &snd_soc_card_omap3pandora);
298 omap3pandora_snd_data.dev = &omap3pandora_snd_device->dev;
299 *(unsigned int *)omap_mcbsp_dai[0].private_data = 1; /* McBSP2 */
300 *(unsigned int *)omap_mcbsp_dai[1].private_data = 3; /* McBSP4 */
301 298
302 ret = platform_device_add(omap3pandora_snd_device); 299 ret = platform_device_add(omap3pandora_snd_device);
303 if (ret) { 300 if (ret) {
@@ -310,6 +307,7 @@ static int __init omap3pandora_soc_init(void)
310 pr_err(PREFIX "Failed to get DAC regulator from %s: %ld\n", 307 pr_err(PREFIX "Failed to get DAC regulator from %s: %ld\n",
311 dev_name(&omap3pandora_snd_device->dev), 308 dev_name(&omap3pandora_snd_device->dev),
312 PTR_ERR(omap3pandora_dac_reg)); 309 PTR_ERR(omap3pandora_dac_reg));
310 ret = PTR_ERR(omap3pandora_dac_reg);
313 goto fail3; 311 goto fail3;
314 } 312 }
315 313