]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - sound/soc/davinci/davinci-vcif.c
ASoC: multi-component - ASoC Multi-Component Support
[mv-sheeva.git] / sound / soc / davinci / davinci-vcif.c
index 03f3feb0fe2f39077e51a16f08ae35066637828a..ea232f6a2c21912e408a69ea2d1f8df28e4552dd 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/module.h>
 #include <linux/device.h>
 #include <linux/delay.h>
+#include <linux/slab.h>
 #include <linux/io.h>
 #include <linux/mfd/davinci_voicecodec.h>
 
@@ -35,7 +36,6 @@
 
 #include "davinci-pcm.h"
 #include "davinci-i2s.h"
-#include "davinci-vcif.h"
 
 #define MOD_REG_BIT(val, mask, set) do { \
        if (set) { \
@@ -54,7 +54,7 @@ static void davinci_vcif_start(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct davinci_vcif_dev *davinci_vcif_dev =
-                                       rtd->dai->cpu_dai->private_data;
+                       snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct davinci_vc *davinci_vc = davinci_vcif_dev->davinci_vc;
        u32 w;
 
@@ -73,7 +73,7 @@ static void davinci_vcif_stop(struct snd_pcm_substream *substream)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct davinci_vcif_dev *davinci_vcif_dev =
-                                       rtd->dai->cpu_dai->private_data;
+                       snd_soc_dai_get_drvdata(rtd->cpu_dai);
        struct davinci_vc *davinci_vc = davinci_vcif_dev->davinci_vc;
        u32 w;
 
@@ -91,12 +91,15 @@ static int davinci_vcif_hw_params(struct snd_pcm_substream *substream,
                                  struct snd_pcm_hw_params *params,
                                  struct snd_soc_dai *dai)
 {
-       struct davinci_vcif_dev *davinci_vcif_dev = dai->private_data;
+       struct davinci_vcif_dev *davinci_vcif_dev = snd_soc_dai_get_drvdata(dai);
        struct davinci_vc *davinci_vc = davinci_vcif_dev->davinci_vc;
        struct davinci_pcm_dma_params *dma_params =
                        &davinci_vcif_dev->dma_params[substream->stream];
        u32 w;
 
+       dai->capture_dma_data = davinci_vcif_dev->dma_params;
+       dai->playback_dma_data = davinci_vcif_dev->dma_params;
+
        /* Restart the codec before setup */
        davinci_vcif_stop(substream);
        davinci_vcif_start(substream);
@@ -178,8 +181,7 @@ static struct snd_soc_dai_ops davinci_vcif_dai_ops = {
        .hw_params      = davinci_vcif_hw_params,
 };
 
-struct snd_soc_dai davinci_vcif_dai = {
-       .name = "davinci-vcif",
+static struct snd_soc_dai_driver davinci_vcif_dai = {
        .playback = {
                .channels_min = 1,
                .channels_max = 2,
@@ -193,7 +195,6 @@ struct snd_soc_dai davinci_vcif_dai = {
        .ops = &davinci_vcif_dai_ops,
 
 };
-EXPORT_SYMBOL_GPL(davinci_vcif_dai);
 
 static int davinci_vcif_probe(struct platform_device *pdev)
 {
@@ -202,7 +203,7 @@ static int davinci_vcif_probe(struct platform_device *pdev)
        int ret;
 
        davinci_vcif_dev = kzalloc(sizeof(struct davinci_vcif_dev), GFP_KERNEL);
-       if (!davinci_vc) {
+       if (!davinci_vcif_dev) {
                dev_dbg(&pdev->dev,
                        "could not allocate memory for private data\n");
                return -ENOMEM;
@@ -221,11 +222,9 @@ static int davinci_vcif_probe(struct platform_device *pdev)
        davinci_vcif_dev->dma_params[SNDRV_PCM_STREAM_CAPTURE].dma_addr =
                                        davinci_vc->davinci_vcif.dma_rx_addr;
 
-       davinci_vcif_dai.dev = &pdev->dev;
-       davinci_vcif_dai.dma_data = davinci_vcif_dev->dma_params;
-       davinci_vcif_dai.private_data = davinci_vcif_dev;
+       dev_set_drvdata(&pdev->dev, davinci_vcif_dev);
 
-       ret = snd_soc_register_dai(&davinci_vcif_dai);
+       ret = snd_soc_register_dai(&pdev->dev, &davinci_vcif_dai);
        if (ret != 0) {
                dev_err(&pdev->dev, "could not register dai\n");
                goto fail;
@@ -241,7 +240,7 @@ fail:
 
 static int davinci_vcif_remove(struct platform_device *pdev)
 {
-       snd_soc_unregister_dai(&davinci_vcif_dai);
+       snd_soc_unregister_dai(&pdev->dev);
 
        return 0;
 }
@@ -250,7 +249,7 @@ static struct platform_driver davinci_vcif_driver = {
        .probe          = davinci_vcif_probe,
        .remove         = davinci_vcif_remove,
        .driver         = {
-               .name   = "davinci_vcif",
+               .name   = "davinci-vcif",
                .owner  = THIS_MODULE,
        },
 };