]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - sound/soc/s6000/s6105-ipcam.c
Merge branch 'master' into tk71
[mv-sheeva.git] / sound / soc / s6000 / s6105-ipcam.c
index c1b40ac22c052b22a986dac52435291529ad2bfd..5890e431852f1cc5d0f0d663595a0543db14a66c 100644 (file)
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/soc.h>
-#include <sound/soc-dapm.h>
 
 #include <variant/dmac.h>
 
-#include "../codecs/tlv320aic3x.h"
 #include "s6000-pcm.h"
 #include "s6000-i2s.h"
 
@@ -32,8 +30,8 @@ static int s6105_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 = 0;
 
        /* set codec DAI configuration */
@@ -107,6 +105,7 @@ static int output_type_put(struct snd_kcontrol *kcontrol,
                           struct snd_ctl_elem_value *ucontrol)
 {
        struct snd_soc_codec *codec = kcontrol->private_data;
+       struct snd_soc_dapm_context *dapm = &codec->dapm;
        unsigned int val = (ucontrol->value.enumerated.item[0] != 0);
        char *differential = "Audio Out Differential";
        char *stereo = "Audio Out Stereo";
@@ -114,10 +113,10 @@ static int output_type_put(struct snd_kcontrol *kcontrol,
        if (kcontrol->private_value == val)
                return 0;
        kcontrol->private_value = val;
-       snd_soc_dapm_disable_pin(codec, val ? differential : stereo);
-       snd_soc_dapm_sync(codec);
-       snd_soc_dapm_enable_pin(codec, val ? stereo : differential);
-       snd_soc_dapm_sync(codec);
+       snd_soc_dapm_disable_pin(dapm, val ? differential : stereo);
+       snd_soc_dapm_sync(dapm);
+       snd_soc_dapm_enable_pin(dapm, val ? stereo : differential);
+       snd_soc_dapm_sync(dapm);
 
        return 1;
 }
@@ -134,38 +133,41 @@ static const struct snd_kcontrol_new audio_out_mux = {
 };
 
 /* Logic for a aic3x as connected on the s6105 ip camera ref design */
-static int s6105_aic3x_init(struct snd_soc_codec *codec)
+static int s6105_aic3x_init(struct snd_soc_pcm_runtime *rtd)
 {
+       struct snd_soc_codec *codec = rtd->codec;
+       struct snd_soc_dapm_context *dapm = &codec->dapm;
+
        /* Add s6105 specific widgets */
-       snd_soc_dapm_new_controls(codec, aic3x_dapm_widgets,
+       snd_soc_dapm_new_controls(dapm, aic3x_dapm_widgets,
                                  ARRAY_SIZE(aic3x_dapm_widgets));
 
        /* Set up s6105 specific audio path audio_map */
-       snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
+       snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map));
 
        /* not present */
-       snd_soc_dapm_nc_pin(codec, "MONO_LOUT");
-       snd_soc_dapm_nc_pin(codec, "LINE2L");
-       snd_soc_dapm_nc_pin(codec, "LINE2R");
+       snd_soc_dapm_nc_pin(dapm, "MONO_LOUT");
+       snd_soc_dapm_nc_pin(dapm, "LINE2L");
+       snd_soc_dapm_nc_pin(dapm, "LINE2R");
 
        /* not connected */
-       snd_soc_dapm_nc_pin(codec, "MIC3L"); /* LINE2L on this chip */
-       snd_soc_dapm_nc_pin(codec, "MIC3R"); /* LINE2R on this chip */
-       snd_soc_dapm_nc_pin(codec, "LLOUT");
-       snd_soc_dapm_nc_pin(codec, "RLOUT");
-       snd_soc_dapm_nc_pin(codec, "HPRCOM");
+       snd_soc_dapm_nc_pin(dapm, "MIC3L"); /* LINE2L on this chip */
+       snd_soc_dapm_nc_pin(dapm, "MIC3R"); /* LINE2R on this chip */
+       snd_soc_dapm_nc_pin(dapm, "LLOUT");
+       snd_soc_dapm_nc_pin(dapm, "RLOUT");
+       snd_soc_dapm_nc_pin(dapm, "HPRCOM");
 
        /* always connected */
-       snd_soc_dapm_enable_pin(codec, "Audio In");
+       snd_soc_dapm_enable_pin(dapm, "Audio In");
 
        /* must correspond to audio_out_mux.private_value initializer */
-       snd_soc_dapm_disable_pin(codec, "Audio Out Differential");
-       snd_soc_dapm_sync(codec);
-       snd_soc_dapm_enable_pin(codec, "Audio Out Stereo");
+       snd_soc_dapm_disable_pin(dapm, "Audio Out Differential");
+       snd_soc_dapm_sync(dapm);
+       snd_soc_dapm_enable_pin(dapm, "Audio Out Stereo");
 
-       snd_soc_dapm_sync(codec);
+       snd_soc_dapm_sync(dapm);
 
-       snd_ctl_add(codec->card, snd_ctl_new1(&audio_out_mux, codec));
+       snd_ctl_add(codec->card->snd_card, snd_ctl_new1(&audio_out_mux, codec));
 
        return 0;
 }
@@ -174,8 +176,10 @@ static int s6105_aic3x_init(struct snd_soc_codec *codec)
 static struct snd_soc_dai_link s6105_dai = {
        .name = "TLV320AIC31",
        .stream_name = "AIC31",
-       .cpu_dai = &s6000_i2s_dai,
-       .codec_dai = &aic3x_dai,
+       .cpu_dai_name = "s6000-i2s",
+       .codec_dai_name = "tlv320aic3x-hifi",
+       .platform_name = "s6000-pcm-audio",
+       .codec_name = "tlv320aic3x-codec.0-001a",
        .init = s6105_aic3x_init,
        .ops = &s6105_ops,
 };
@@ -183,22 +187,10 @@ static struct snd_soc_dai_link s6105_dai = {
 /* s6105 audio machine driver */
 static struct snd_soc_card snd_soc_card_s6105 = {
        .name = "Stretch IP Camera",
-       .platform = &s6000_soc_platform,
        .dai_link = &s6105_dai,
        .num_links = 1,
 };
 
-/* s6105 audio private data */
-static struct aic3x_setup_data s6105_aic3x_setup = {
-};
-
-/* s6105 audio subsystem */
-static struct snd_soc_device s6105_snd_devdata = {
-       .card = &snd_soc_card_s6105,
-       .codec_dev = &soc_codec_dev_aic3x,
-       .codec_data = &s6105_aic3x_setup,
-};
-
 static struct s6000_snd_platform_data __initdata s6105_snd_data = {
        .wide           = 0,
        .channel_in     = 0,
@@ -227,8 +219,7 @@ static int __init s6105_init(void)
        if (!s6105_snd_device)
                return -ENOMEM;
 
-       platform_set_drvdata(s6105_snd_device, &s6105_snd_devdata);
-       s6105_snd_devdata.dev = &s6105_snd_device->dev;
+       platform_set_drvdata(s6105_snd_device, &snd_soc_card_s6105);
        platform_device_add_data(s6105_snd_device, &s6105_snd_data,
                                 sizeof(s6105_snd_data));