diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2020-05-12 00:01:27 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2020-05-12 19:14:38 +0300 |
commit | c9aeda1c94973f835b3d1b6c785a414caaf935c3 (patch) | |
tree | 54c2eedfeadf6b0a4a871f56db4f348fdf5e0407 /sound/soc/pxa/mmp-sspa.c | |
parent | e0b9024d2c8851b18b953823204278602bf73086 (diff) | |
download | linux-c9aeda1c94973f835b3d1b6c785a414caaf935c3.tar.xz |
ASoC: mmp-sspa: Get rid of dma_params and phys_base
This makes things simpler. There's no reason not to just embed the struct
snd_dmaengine_dai_dma_data in struct sspa_priv and do away with an
unnecessary kmalloc(). While at that, we can initialize the
snd_dmaengine_dai_dma_data structures earlier.
Let's also stop offsetting the source/destination of the DMA transfer by
phys_base. Firstly, it's never set and is always zero. Secondly, the
hardware actually ignores it, at least on a MMP2 and MMP3.
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
Link: https://lore.kernel.org/r/20200511210134.1224532-5-lkundrak@v3.sk
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/pxa/mmp-sspa.c')
-rw-r--r-- | sound/soc/pxa/mmp-sspa.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/sound/soc/pxa/mmp-sspa.c b/sound/soc/pxa/mmp-sspa.c index 90a9bc81be80..421ffa9fa7b1 100644 --- a/sound/soc/pxa/mmp-sspa.c +++ b/sound/soc/pxa/mmp-sspa.c @@ -29,7 +29,8 @@ */ struct sspa_priv { struct ssp_device *sspa; - struct snd_dmaengine_dai_dma_data *dma_params; + struct snd_dmaengine_dai_dma_data playback_dma_data; + struct snd_dmaengine_dai_dma_data capture_dma_data; struct clk *audio_clk; struct clk *sysclk; int dai_fmt; @@ -250,11 +251,8 @@ static int mmp_sspa_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { - struct snd_soc_pcm_runtime *rtd = substream->private_data; - struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0); struct sspa_priv *sspa_priv = snd_soc_dai_get_drvdata(dai); struct ssp_device *sspa = sspa_priv->sspa; - struct snd_dmaengine_dai_dma_data *dma_params; u32 sspa_ctrl; if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) @@ -293,11 +291,6 @@ static int mmp_sspa_hw_params(struct snd_pcm_substream *substream, mmp_sspa_write_reg(sspa, SSPA_RXFIFO_UL, 0x0); } - dma_params = &sspa_priv->dma_params[substream->stream]; - dma_params->addr = substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? - (sspa->phys_base + SSPA_TXD) : - (sspa->phys_base + SSPA_RXD); - snd_soc_dai_set_dma_data(cpu_dai, substream, dma_params); return 0; } @@ -351,6 +344,10 @@ static int mmp_sspa_probe(struct snd_soc_dai *dai) { struct sspa_priv *priv = dev_get_drvdata(dai->dev); + snd_soc_dai_init_dma_data(dai, + &priv->playback_dma_data, + &priv->capture_dma_data); + snd_soc_dai_set_drvdata(dai, priv); return 0; @@ -407,12 +404,6 @@ static int asoc_mmp_sspa_probe(struct platform_device *pdev) if (priv->sspa == NULL) return -ENOMEM; - priv->dma_params = devm_kcalloc(&pdev->dev, - 2, sizeof(struct snd_dmaengine_dai_dma_data), - GFP_KERNEL); - if (priv->dma_params == NULL) - return -ENOMEM; - priv->sspa->mmio_base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(priv->sspa->mmio_base)) return PTR_ERR(priv->sspa->mmio_base); @@ -434,6 +425,10 @@ static int asoc_mmp_sspa_probe(struct platform_device *pdev) priv->dai_fmt = (unsigned int) -1; platform_set_drvdata(pdev, priv); + /* You know, these addresses are actually ignored. */ + priv->playback_dma_data.addr = SSPA_TXD; + priv->capture_dma_data.addr = SSPA_RXD; + return devm_snd_soc_register_component(&pdev->dev, &mmp_sspa_component, &mmp_sspa_dai, 1); } |