Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[sfrench/cifs-2.6.git] / sound / soc / fsl / fsl_dma.c
index 5326c5addd1c0a43fe6d8157cf8c317ee2610695..78871de35086c80043e72940093aec8ce27dcbcb 100644 (file)
@@ -37,6 +37,8 @@
 #include "fsl_dma.h"
 #include "fsl_ssi.h"   /* For the offset of stx0 and srx0 */
 
+#define DRV_NAME "fsl_dma"
+
 /*
  * The formats that the DMA controller supports, which is anything
  * that is 8, 16, or 32 bits.
@@ -56,7 +58,7 @@
                            SNDRV_PCM_FMTBIT_U32_LE     | \
                            SNDRV_PCM_FMTBIT_U32_BE)
 struct dma_object {
-       struct snd_soc_platform_driver dai;
+       struct snd_soc_component_driver dai;
        dma_addr_t ssi_stx_phys;
        dma_addr_t ssi_srx_phys;
        unsigned int ssi_fifo_depth;
@@ -203,7 +205,8 @@ static irqreturn_t fsl_dma_isr(int irq, void *dev_id)
        struct fsl_dma_private *dma_private = dev_id;
        struct snd_pcm_substream *substream = dma_private->substream;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct device *dev = rtd->platform->dev;
+       struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
+       struct device *dev = component->dev;
        struct ccsr_dma_channel __iomem *dma_channel = dma_private->dma_channel;
        irqreturn_t ret = IRQ_NONE;
        u32 sr, sr2 = 0;
@@ -385,9 +388,10 @@ static int fsl_dma_open(struct snd_pcm_substream *substream)
 {
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct device *dev = rtd->platform->dev;
+       struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
+       struct device *dev = component->dev;
        struct dma_object *dma =
-               container_of(rtd->platform->driver, struct dma_object, dai);
+               container_of(component->driver, struct dma_object, dai);
        struct fsl_dma_private *dma_private;
        struct ccsr_dma_channel __iomem *dma_channel;
        dma_addr_t ld_buf_phys;
@@ -539,7 +543,8 @@ static int fsl_dma_hw_params(struct snd_pcm_substream *substream,
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct fsl_dma_private *dma_private = runtime->private_data;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct device *dev = rtd->platform->dev;
+       struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
+       struct device *dev = component->dev;
 
        /* Number of bits per sample */
        unsigned int sample_bits =
@@ -702,7 +707,8 @@ static snd_pcm_uframes_t fsl_dma_pointer(struct snd_pcm_substream *substream)
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct fsl_dma_private *dma_private = runtime->private_data;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct device *dev = rtd->platform->dev;
+       struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
+       struct device *dev = component->dev;
        struct ccsr_dma_channel __iomem *dma_channel = dma_private->dma_channel;
        dma_addr_t position;
        snd_pcm_uframes_t frames;
@@ -799,9 +805,10 @@ static int fsl_dma_close(struct snd_pcm_substream *substream)
        struct snd_pcm_runtime *runtime = substream->runtime;
        struct fsl_dma_private *dma_private = runtime->private_data;
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
-       struct device *dev = rtd->platform->dev;
+       struct snd_soc_component *component = snd_soc_rtdcom_lookup(rtd, DRV_NAME);
+       struct device *dev = component->dev;
        struct dma_object *dma =
-               container_of(rtd->platform->driver, struct dma_object, dai);
+               container_of(component->driver, struct dma_object, dai);
 
        if (dma_private) {
                if (dma_private->irq)
@@ -908,6 +915,7 @@ static int fsl_soc_dma_probe(struct platform_device *pdev)
                return -ENOMEM;
        }
 
+       dma->dai.name = DRV_NAME;
        dma->dai.ops = &fsl_dma_ops;
        dma->dai.pcm_new = fsl_dma_new;
        dma->dai.pcm_free = fsl_dma_free_dma_buffers;
@@ -925,7 +933,7 @@ static int fsl_soc_dma_probe(struct platform_device *pdev)
 
        of_node_put(ssi_np);
 
-       ret = snd_soc_register_platform(&pdev->dev, &dma->dai);
+       ret = devm_snd_soc_register_component(&pdev->dev, &dma->dai, NULL, 0);
        if (ret) {
                dev_err(&pdev->dev, "could not register platform\n");
                kfree(dma);
@@ -944,7 +952,6 @@ static int fsl_soc_dma_remove(struct platform_device *pdev)
 {
        struct dma_object *dma = dev_get_drvdata(&pdev->dev);
 
-       snd_soc_unregister_platform(&pdev->dev);
        iounmap(dma->channel);
        irq_dispose_mapping(dma->irq);
        kfree(dma);