ALSA: asoc: machines - add Digital Audio Interface (DAI) control functions.
[pandora-kernel.git] / sound / soc / pxa / spitz.c
index d8b8372..6438579 100644 (file)
@@ -12,9 +12,6 @@
  *  Free Software Foundation;  either version 2 of the  License, or (at your
  *  option) any later version.
  *
- *  Revision history
- *    30th Nov 2005   Initial version.
- *
  */
 
 #include <linux/module.h>
@@ -54,60 +51,60 @@ static int spitz_spk_func;
 static void spitz_ext_control(struct snd_soc_codec *codec)
 {
        if (spitz_spk_func == SPITZ_SPK_ON)
-               snd_soc_dapm_set_endpoint(codec, "Ext Spk", 1);
+               snd_soc_dapm_enable_pin(codec, "Ext Spk");
        else
-               snd_soc_dapm_set_endpoint(codec, "Ext Spk", 0);
+               snd_soc_dapm_disable_pin(codec, "Ext Spk");
 
        /* set up jack connection */
        switch (spitz_jack_func) {
        case SPITZ_HP:
                /* enable and unmute hp jack, disable mic bias */
-               snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 1);
+               snd_soc_dapm_disable_pin(codec, "Headset Jack");
+               snd_soc_dapm_disable_pin(codec, "Mic Jack");
+               snd_soc_dapm_disable_pin(codec, "Line Jack");
+               snd_soc_dapm_enable_pin(codec, "Headphone Jack");
                set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
                set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
                break;
        case SPITZ_MIC:
                /* enable mic jack and bias, mute hp */
-               snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
+               snd_soc_dapm_disable_pin(codec, "Headphone Jack");
+               snd_soc_dapm_disable_pin(codec, "Headset Jack");
+               snd_soc_dapm_disable_pin(codec, "Line Jack");
+               snd_soc_dapm_enable_pin(codec, "Mic Jack");
                reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
                reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
                break;
        case SPITZ_LINE:
                /* enable line jack, disable mic bias and mute hp */
-               snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Line Jack", 1);
+               snd_soc_dapm_disable_pin(codec, "Headphone Jack");
+               snd_soc_dapm_disable_pin(codec, "Headset Jack");
+               snd_soc_dapm_disable_pin(codec, "Mic Jack");
+               snd_soc_dapm_enable_pin(codec, "Line Jack");
                reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
                reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
                break;
        case SPITZ_HEADSET:
                /* enable and unmute headset jack enable mic bias, mute L hp */
-               snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Mic Jack", 1);
-               snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Headset Jack", 1);
+               snd_soc_dapm_disable_pin(codec, "Headphone Jack");
+               snd_soc_dapm_enable_pin(codec, "Mic Jack");
+               snd_soc_dapm_disable_pin(codec, "Line Jack");
+               snd_soc_dapm_enable_pin(codec, "Headset Jack");
                reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
                set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
                break;
        case SPITZ_HP_OFF:
 
                /* jack removed, everything off */
-               snd_soc_dapm_set_endpoint(codec, "Headphone Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Headset Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Mic Jack", 0);
-               snd_soc_dapm_set_endpoint(codec, "Line Jack", 0);
+               snd_soc_dapm_disable_pin(codec, "Headphone Jack");
+               snd_soc_dapm_disable_pin(codec, "Headset Jack");
+               snd_soc_dapm_disable_pin(codec, "Mic Jack");
+               snd_soc_dapm_disable_pin(codec, "Line Jack");
                reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_L);
                reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_MUTE_R);
                break;
        }
-       snd_soc_dapm_sync_endpoints(codec);
+       snd_soc_dapm_sync(codec);
 }
 
 static int spitz_startup(struct snd_pcm_substream *substream)
@@ -124,8 +121,8 @@ static int spitz_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_codec_dai *codec_dai = rtd->dai->codec_dai;
-       struct snd_soc_cpu_dai *cpu_dai = rtd->dai->cpu_dai;
+       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
+       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
        unsigned int clk = 0;
        int ret = 0;
 
@@ -144,25 +141,25 @@ static int spitz_hw_params(struct snd_pcm_substream *substream,
        }
 
        /* set codec DAI configuration */
-       ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
+       ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
                SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
        if (ret < 0)
                return ret;
 
        /* set cpu DAI configuration */
-       ret = cpu_dai->dai_ops.set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
+       ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
                SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
        if (ret < 0)
                return ret;
 
        /* set the codec system clock for DAC and ADC */
-       ret = codec_dai->dai_ops.set_sysclk(codec_dai, WM8750_SYSCLK, clk,
+       ret = snd_soc_dai_set_sysclk(codec_dai, WM8750_SYSCLK, clk,
                SND_SOC_CLOCK_IN);
        if (ret < 0)
                return ret;
 
        /* set the I2S system clock as input (unused) */
-       ret = cpu_dai->dai_ops.set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
+       ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, 0,
                SND_SOC_CLOCK_IN);
        if (ret < 0)
                return ret;
@@ -250,7 +247,7 @@ static const struct snd_soc_dapm_widget wm8750_dapm_widgets[] = {
 };
 
 /* Spitz machine audio_map */
-static const char *audio_map[][3] = {
+static const struct snd_soc_dapm_route audio_map[] = {
 
        /* headphone connected to LOUT1, ROUT1 */
        {"Headphone Jack", NULL, "LOUT1"},
@@ -269,8 +266,6 @@ static const char *audio_map[][3] = {
 
        /* line is connected to input 1 - no bias */
        {"LINPUT1", NULL, "Line Jack"},
-
-       {NULL, NULL, NULL},
 };
 
 static const char *jack_function[] = {"Headphone", "Mic", "Line", "Headset",
@@ -296,13 +291,13 @@ static int spitz_wm8750_init(struct snd_soc_codec *codec)
        int i, err;
 
        /* NC codec pins */
-       snd_soc_dapm_set_endpoint(codec, "RINPUT1", 0);
-       snd_soc_dapm_set_endpoint(codec, "LINPUT2", 0);
-       snd_soc_dapm_set_endpoint(codec, "RINPUT2", 0);
-       snd_soc_dapm_set_endpoint(codec, "LINPUT3", 0);
-       snd_soc_dapm_set_endpoint(codec, "RINPUT3", 0);
-       snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
-       snd_soc_dapm_set_endpoint(codec, "MONO", 0);
+       snd_soc_dapm_disable_pin(codec, "RINPUT1");
+       snd_soc_dapm_disable_pin(codec, "LINPUT2");
+       snd_soc_dapm_disable_pin(codec, "RINPUT2");
+       snd_soc_dapm_disable_pin(codec, "LINPUT3");
+       snd_soc_dapm_disable_pin(codec, "RINPUT3");
+       snd_soc_dapm_disable_pin(codec, "OUT3");
+       snd_soc_dapm_disable_pin(codec, "MONO");
 
        /* Add spitz specific controls */
        for (i = 0; i < ARRAY_SIZE(wm8750_spitz_controls); i++) {
@@ -313,15 +308,13 @@ static int spitz_wm8750_init(struct snd_soc_codec *codec)
        }
 
        /* Add spitz specific widgets */
-       for (i = 0; i < ARRAY_SIZE(wm8750_dapm_widgets); i++)
-               snd_soc_dapm_new_control(codec, &wm8750_dapm_widgets[i]);
+       snd_soc_dapm_new_controls(codec, wm8750_dapm_widgets,
+                                 ARRAY_SIZE(wm8750_dapm_widgets));
 
-       /* Set up spitz specific audio path audio_map */
-       for (i = 0; audio_map[i][0] != NULL; i++)
-               snd_soc_dapm_connect_input(codec, audio_map[i][0],
-                       audio_map[i][1], audio_map[i][2]);
+       /* Set up spitz specific audio paths */
+       snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
 
-       snd_soc_dapm_sync_endpoints(codec);
+       snd_soc_dapm_sync(codec);
        return 0;
 }