]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - sound/soc/omap/sdp3430.c
ASoC: multi-component - ASoC Multi-Component Support
[mv-sheeva.git] / sound / soc / omap / sdp3430.c
index 3c85c0f92823b82a87affec967b663966c279f4d..76ce77b91844871f53481afbab751dc394e51bc8 100644 (file)
 #include <mach/gpio.h>
 #include <plat/mcbsp.h>
 
+/* Register descriptions for twl4030 codec part */
+#include <linux/mfd/twl4030-codec.h>
+
 #include "omap-mcbsp.h"
 #include "omap-pcm.h"
-#include "../codecs/twl4030.h"
 
 /* TWL4030 PMBR1 Register */
 #define TWL4030_INTBR_PMBR1            0x0D
@@ -51,8 +53,8 @@ static int sdp3430_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -94,8 +96,8 @@ static int sdp3430_hw_voice_params(struct snd_pcm_substream *substream,
        struct snd_pcm_hw_params *params)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
        int ret;
 
        /* Set codec DAI configuration */
@@ -186,8 +188,9 @@ static const struct snd_soc_dapm_route audio_map[] = {
        {"Headset Stereophone", NULL, "HSOR"},
 };
 
-static int sdp3430_twl4030_init(struct snd_soc_codec *codec)
+static int sdp3430_twl4030_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        int ret;
 
        /* Add SDP3430 specific widgets */
@@ -225,7 +228,7 @@ static int sdp3430_twl4030_init(struct snd_soc_codec *codec)
                return ret;
 
        /* Headset jack detection */
-       ret = snd_soc_jack_new(&snd_soc_sdp3430, "Headset Jack",
+       ret = snd_soc_jack_new(codec, "Headset Jack",
                                SND_JACK_HEADSET, &hs_jack);
        if (ret)
                return ret;
@@ -241,14 +244,15 @@ static int sdp3430_twl4030_init(struct snd_soc_codec *codec)
        return ret;
 }
 
-static int sdp3430_twl4030_voice_init(struct snd_soc_codec *codec)
+static int sdp3430_twl4030_voice_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
        unsigned short reg;
 
        /* Enable voice interface */
-       reg = codec->read(codec, TWL4030_REG_VOICE_IF);
+       reg = codec->driver->read(codec, TWL4030_REG_VOICE_IF);
        reg |= TWL4030_VIF_DIN_EN | TWL4030_VIF_DOUT_EN | TWL4030_VIF_EN;
-       codec->write(codec, TWL4030_REG_VOICE_IF, reg);
+       codec->driver->write(codec, TWL4030_REG_VOICE_IF, reg);
 
        return 0;
 }
@@ -259,16 +263,20 @@ static struct snd_soc_dai_link sdp3430_dai[] = {
        {
                .name = "TWL4030 I2S",
                .stream_name = "TWL4030 Audio",
-               .cpu_dai = &omap_mcbsp_dai[0],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_HIFI],
+               .cpu_dai_name = "omap-mcbsp-dai.1",
+               .codec_dai_name = "twl4030-hifi",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .init = sdp3430_twl4030_init,
                .ops = &sdp3430_ops,
        },
        {
                .name = "TWL4030 PCM",
                .stream_name = "TWL4030 Voice",
-               .cpu_dai = &omap_mcbsp_dai[1],
-               .codec_dai = &twl4030_dai[TWL4030_DAI_VOICE],
+               .cpu_dai_name = "omap-mcbsp-dai.2",
+               .codec_dai_name = "twl4030-voice",
+               .platform_name = "omap-pcm-audio",
+               .codec_name = "twl4030-codec",
                .init = sdp3430_twl4030_voice_init,
                .ops = &sdp3430_voice_ops,
        },
@@ -277,25 +285,10 @@ static struct snd_soc_dai_link sdp3430_dai[] = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_sdp3430 = {
        .name = "SDP3430",
-       .platform = &omap_soc_platform,
        .dai_link = sdp3430_dai,
        .num_links = ARRAY_SIZE(sdp3430_dai),
 };
 
-/* twl4030 setup */
-static struct twl4030_setup_data twl4030_setup = {
-       .ramp_delay_value = 3,
-       .sysclk = 26000,
-       .hs_extmute = 1,
-};
-
-/* Audio subsystem */
-static struct snd_soc_device sdp3430_snd_devdata = {
-       .card = &snd_soc_sdp3430,
-       .codec_dev = &soc_codec_dev_twl4030,
-       .codec_data = &twl4030_setup,
-};
-
 static struct platform_device *sdp3430_snd_device;
 
 static int __init sdp3430_soc_init(void)
@@ -315,10 +308,7 @@ static int __init sdp3430_soc_init(void)
                return -ENOMEM;
        }
 
-       platform_set_drvdata(sdp3430_snd_device, &sdp3430_snd_devdata);
-       sdp3430_snd_devdata.dev = &sdp3430_snd_device->dev;
-       *(unsigned int *)sdp3430_dai[0].cpu_dai->private_data = 1; /* McBSP2 */
-       *(unsigned int *)sdp3430_dai[1].cpu_dai->private_data = 2; /* McBSP3 */
+       platform_set_drvdata(sdp3430_snd_device, &snd_soc_sdp3430);
 
        /* Set TWL4030 GPIO6 as EXTMUTE signal */
        twl_i2c_read_u8(TWL4030_MODULE_INTBR, &pin_mux,