|
@@ -18,6 +18,7 @@
|
|
|
#include <linux/ioport.h>
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
+#include <sound/dmaengine_pcm.h>
|
|
|
#include <sound/soc.h>
|
|
|
#include <sound/spear_dma.h>
|
|
|
#include <sound/spear_spdif.h>
|
|
@@ -36,6 +37,8 @@ struct spdif_out_dev {
|
|
|
struct spdif_out_params saved_params;
|
|
|
u32 running;
|
|
|
void __iomem *io_base;
|
|
|
+ struct snd_dmaengine_dai_dma_data dma_params_tx;
|
|
|
+ struct snd_dmaengine_pcm_config config;
|
|
|
};
|
|
|
|
|
|
static void spdif_out_configure(struct spdif_out_dev *host)
|
|
@@ -245,7 +248,8 @@ static int spdif_soc_dai_probe(struct snd_soc_dai *dai)
|
|
|
{
|
|
|
struct spdif_out_dev *host = snd_soc_dai_get_drvdata(dai);
|
|
|
|
|
|
- dai->playback_dma_data = &host->dma_params;
|
|
|
+ host->dma_params_tx.filter_data = &host->dma_params;
|
|
|
+ dai->playback_dma_data = &host->dma_params_tx;
|
|
|
|
|
|
return snd_soc_add_dai_controls(dai, spdif_out_controls,
|
|
|
ARRAY_SIZE(spdif_out_controls));
|
|
@@ -304,7 +308,6 @@ static int spdif_out_probe(struct platform_device *pdev)
|
|
|
host->dma_params.addr = res->start + SPDIF_OUT_FIFO_DATA;
|
|
|
host->dma_params.max_burst = 16;
|
|
|
host->dma_params.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
|
|
- host->dma_params.filter = pdata->filter;
|
|
|
|
|
|
dev_set_drvdata(&pdev->dev, host);
|
|
|
|
|
@@ -313,7 +316,8 @@ static int spdif_out_probe(struct platform_device *pdev)
|
|
|
if (ret)
|
|
|
return ret;
|
|
|
|
|
|
- return devm_spear_pcm_platform_register(&pdev->dev);
|
|
|
+ return devm_spear_pcm_platform_register(&pdev->dev, &host->config,
|
|
|
+ pdata->filter);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_PM
|