mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 00:52:01 +00:00
ASoC: davinci-mcasp: Deprecate the use of davinci-pcm in favor of edma-pcm
The edma-pcm performs as good as the old davinci-pcm and it's use does not require the 'ping-pong' mode of davinci-pcm, which was introduced to overcome under/over flow issues when using davinci-pcm. Keep the SND_DAVINCI_SOC config option to select the SND_EDMA_SOC to avoid regression in audio support. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
62731d33c4
commit
9759e7ef53
@ -1,15 +1,16 @@
|
||||
config SND_DAVINCI_SOC
|
||||
tristate "SoC Audio for TI DAVINCI"
|
||||
tristate
|
||||
depends on ARCH_DAVINCI
|
||||
select SND_EDMA_SOC
|
||||
|
||||
config SND_EDMA_SOC
|
||||
tristate "SoC Audio for Texas Instruments chips using eDMA (AM33XX/43XX)"
|
||||
tristate "SoC Audio for Texas Instruments chips using eDMA"
|
||||
depends on SOC_AM33XX || SOC_AM43XX || ARCH_DAVINCI
|
||||
select SND_SOC_GENERIC_DMAENGINE_PCM
|
||||
help
|
||||
Say Y or M here if you want audio support for TI SoC which uses eDMA.
|
||||
The following line of SoCs are supported by this platform driver:
|
||||
- daVinci devices
|
||||
- AM335x
|
||||
- AM437x/AM438x
|
||||
|
||||
@ -18,7 +19,7 @@ config SND_DAVINCI_SOC_I2S
|
||||
|
||||
config SND_DAVINCI_SOC_MCASP
|
||||
tristate "Multichannel Audio Serial Port (McASP) support"
|
||||
depends on SND_DAVINCI_SOC || SND_OMAP_SOC || SND_EDMA_SOC
|
||||
depends on SND_OMAP_SOC || SND_EDMA_SOC
|
||||
help
|
||||
Say Y or M here if you want to have support for McASP IP found in
|
||||
various Texas Instruments SoCs like:
|
||||
@ -46,7 +47,7 @@ config SND_AM33XX_SOC_EVM
|
||||
|
||||
config SND_DAVINCI_SOC_EVM
|
||||
tristate "SoC Audio support for DaVinci DM6446, DM355 or DM365 EVM"
|
||||
depends on SND_DAVINCI_SOC && I2C
|
||||
depends on SND_EDMA_SOC && I2C
|
||||
depends on MACH_DAVINCI_EVM || MACH_DAVINCI_DM355_EVM || MACH_DAVINCI_DM365_EVM
|
||||
select SND_DAVINCI_SOC_GENERIC_EVM
|
||||
help
|
||||
@ -74,7 +75,7 @@ endchoice
|
||||
|
||||
config SND_DM6467_SOC_EVM
|
||||
tristate "SoC Audio support for DaVinci DM6467 EVM"
|
||||
depends on SND_DAVINCI_SOC && MACH_DAVINCI_DM6467_EVM && I2C
|
||||
depends on SND_EDMA_SOC && MACH_DAVINCI_DM6467_EVM && I2C
|
||||
select SND_DAVINCI_SOC_GENERIC_EVM
|
||||
select SND_SOC_SPDIF
|
||||
|
||||
@ -83,7 +84,7 @@ config SND_DM6467_SOC_EVM
|
||||
|
||||
config SND_DA830_SOC_EVM
|
||||
tristate "SoC Audio support for DA830/OMAP-L137 EVM"
|
||||
depends on SND_DAVINCI_SOC && MACH_DAVINCI_DA830_EVM && I2C
|
||||
depends on SND_EDMA_SOC && MACH_DAVINCI_DA830_EVM && I2C
|
||||
select SND_DAVINCI_SOC_GENERIC_EVM
|
||||
|
||||
help
|
||||
@ -92,7 +93,7 @@ config SND_DA830_SOC_EVM
|
||||
|
||||
config SND_DA850_SOC_EVM
|
||||
tristate "SoC Audio support for DA850/OMAP-L138 EVM"
|
||||
depends on SND_DAVINCI_SOC && MACH_DAVINCI_DA850_EVM && I2C
|
||||
depends on SND_EDMA_SOC && MACH_DAVINCI_DA850_EVM && I2C
|
||||
select SND_DAVINCI_SOC_GENERIC_EVM
|
||||
help
|
||||
Say Y if you want to add support for SoC audio on TI
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/platform_data/davinci_asp.h>
|
||||
|
||||
#include <sound/asoundef.h>
|
||||
#include <sound/core.h>
|
||||
@ -36,7 +37,6 @@
|
||||
#include <sound/dmaengine_pcm.h>
|
||||
#include <sound/omap-pcm.h>
|
||||
|
||||
#include "davinci-pcm.h"
|
||||
#include "edma-pcm.h"
|
||||
#include "davinci-mcasp.h"
|
||||
|
||||
@ -65,7 +65,6 @@ struct davinci_mcasp_context {
|
||||
};
|
||||
|
||||
struct davinci_mcasp {
|
||||
struct davinci_pcm_dma_params dma_params[2];
|
||||
struct snd_dmaengine_dai_dma_data dma_data[2];
|
||||
void __iomem *base;
|
||||
u32 fifo_base;
|
||||
@ -82,6 +81,7 @@ struct davinci_mcasp {
|
||||
u16 bclk_lrclk_ratio;
|
||||
int streams;
|
||||
u32 irq_request[2];
|
||||
int dma_request[2];
|
||||
|
||||
int sysclk_freq;
|
||||
bool bclk_master;
|
||||
@ -643,7 +643,6 @@ static int davinci_config_channel_size(struct davinci_mcasp *mcasp,
|
||||
static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
|
||||
int period_words, int channels)
|
||||
{
|
||||
struct davinci_pcm_dma_params *dma_params = &mcasp->dma_params[stream];
|
||||
struct snd_dmaengine_dai_dma_data *dma_data = &mcasp->dma_data[stream];
|
||||
int i;
|
||||
u8 tx_ser = 0;
|
||||
@ -711,10 +710,8 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
|
||||
* For example if three serializers are enabled the DMA
|
||||
* need to transfer three words per DMA request.
|
||||
*/
|
||||
dma_params->fifo_level = active_serializers;
|
||||
dma_data->maxburst = active_serializers;
|
||||
} else {
|
||||
dma_params->fifo_level = 0;
|
||||
dma_data->maxburst = 0;
|
||||
}
|
||||
return 0;
|
||||
@ -746,7 +743,6 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
|
||||
/* Configure the burst size for platform drivers */
|
||||
if (numevt == 1)
|
||||
numevt = 0;
|
||||
dma_params->fifo_level = numevt;
|
||||
dma_data->maxburst = numevt;
|
||||
|
||||
return 0;
|
||||
@ -872,8 +868,6 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *cpu_dai)
|
||||
{
|
||||
struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(cpu_dai);
|
||||
struct davinci_pcm_dma_params *dma_params =
|
||||
&mcasp->dma_params[substream->stream];
|
||||
int word_length;
|
||||
int channels = params_channels(params);
|
||||
int period_size = params_period_size(params);
|
||||
@ -914,31 +908,26 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
|
||||
switch (params_format(params)) {
|
||||
case SNDRV_PCM_FORMAT_U8:
|
||||
case SNDRV_PCM_FORMAT_S8:
|
||||
dma_params->data_type = 1;
|
||||
word_length = 8;
|
||||
break;
|
||||
|
||||
case SNDRV_PCM_FORMAT_U16_LE:
|
||||
case SNDRV_PCM_FORMAT_S16_LE:
|
||||
dma_params->data_type = 2;
|
||||
word_length = 16;
|
||||
break;
|
||||
|
||||
case SNDRV_PCM_FORMAT_U24_3LE:
|
||||
case SNDRV_PCM_FORMAT_S24_3LE:
|
||||
dma_params->data_type = 3;
|
||||
word_length = 24;
|
||||
break;
|
||||
|
||||
case SNDRV_PCM_FORMAT_U24_LE:
|
||||
case SNDRV_PCM_FORMAT_S24_LE:
|
||||
dma_params->data_type = 4;
|
||||
word_length = 24;
|
||||
break;
|
||||
|
||||
case SNDRV_PCM_FORMAT_U32_LE:
|
||||
case SNDRV_PCM_FORMAT_S32_LE:
|
||||
dma_params->data_type = 4;
|
||||
word_length = 32;
|
||||
break;
|
||||
|
||||
@ -947,11 +936,6 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (mcasp->version == MCASP_VERSION_2 && !dma_params->fifo_level)
|
||||
dma_params->acnt = 4;
|
||||
else
|
||||
dma_params->acnt = dma_params->data_type;
|
||||
|
||||
davinci_config_channel_size(mcasp, word_length);
|
||||
|
||||
if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE)
|
||||
@ -1055,17 +1039,8 @@ static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
|
||||
{
|
||||
struct davinci_mcasp *mcasp = snd_soc_dai_get_drvdata(dai);
|
||||
|
||||
if (mcasp->version >= MCASP_VERSION_3) {
|
||||
/* Using dmaengine PCM */
|
||||
dai->playback_dma_data =
|
||||
&mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
|
||||
dai->capture_dma_data =
|
||||
&mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
|
||||
} else {
|
||||
/* Using davinci-pcm */
|
||||
dai->playback_dma_data = mcasp->dma_params;
|
||||
dai->capture_dma_data = mcasp->dma_params;
|
||||
}
|
||||
dai->playback_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
|
||||
dai->capture_dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1184,28 +1159,24 @@ static const struct snd_soc_component_driver davinci_mcasp_component = {
|
||||
static struct davinci_mcasp_pdata dm646x_mcasp_pdata = {
|
||||
.tx_dma_offset = 0x400,
|
||||
.rx_dma_offset = 0x400,
|
||||
.asp_chan_q = EVENTQ_0,
|
||||
.version = MCASP_VERSION_1,
|
||||
};
|
||||
|
||||
static struct davinci_mcasp_pdata da830_mcasp_pdata = {
|
||||
.tx_dma_offset = 0x2000,
|
||||
.rx_dma_offset = 0x2000,
|
||||
.asp_chan_q = EVENTQ_0,
|
||||
.version = MCASP_VERSION_2,
|
||||
};
|
||||
|
||||
static struct davinci_mcasp_pdata am33xx_mcasp_pdata = {
|
||||
.tx_dma_offset = 0,
|
||||
.rx_dma_offset = 0,
|
||||
.asp_chan_q = EVENTQ_0,
|
||||
.version = MCASP_VERSION_3,
|
||||
};
|
||||
|
||||
static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
|
||||
.tx_dma_offset = 0x200,
|
||||
.rx_dma_offset = 0x284,
|
||||
.asp_chan_q = EVENTQ_0,
|
||||
.version = MCASP_VERSION_4,
|
||||
};
|
||||
|
||||
@ -1382,12 +1353,12 @@ nodata:
|
||||
|
||||
static int davinci_mcasp_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct davinci_pcm_dma_params *dma_params;
|
||||
struct snd_dmaengine_dai_dma_data *dma_data;
|
||||
struct resource *mem, *ioarea, *res, *dat;
|
||||
struct davinci_mcasp_pdata *pdata;
|
||||
struct davinci_mcasp *mcasp;
|
||||
char *irq_name;
|
||||
int *dma;
|
||||
int irq;
|
||||
int ret;
|
||||
|
||||
@ -1521,59 +1492,45 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
||||
if (dat)
|
||||
mcasp->dat_port = true;
|
||||
|
||||
dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_PLAYBACK];
|
||||
dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
|
||||
dma_params->asp_chan_q = pdata->asp_chan_q;
|
||||
dma_params->ram_chan_q = pdata->ram_chan_q;
|
||||
dma_params->sram_pool = pdata->sram_pool;
|
||||
dma_params->sram_size = pdata->sram_size_playback;
|
||||
if (dat)
|
||||
dma_params->dma_addr = dat->start;
|
||||
dma_data->addr = dat->start;
|
||||
else
|
||||
dma_params->dma_addr = mem->start + pdata->tx_dma_offset;
|
||||
|
||||
/* Unconditional dmaengine stuff */
|
||||
dma_data->addr = dma_params->dma_addr;
|
||||
dma_data->addr = mem->start + pdata->tx_dma_offset;
|
||||
|
||||
dma = &mcasp->dma_request[SNDRV_PCM_STREAM_PLAYBACK];
|
||||
res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
|
||||
if (res)
|
||||
dma_params->channel = res->start;
|
||||
*dma = res->start;
|
||||
else
|
||||
dma_params->channel = pdata->tx_dma_channel;
|
||||
*dma = pdata->tx_dma_channel;
|
||||
|
||||
/* dmaengine filter data for DT and non-DT boot */
|
||||
if (pdev->dev.of_node)
|
||||
dma_data->filter_data = "tx";
|
||||
else
|
||||
dma_data->filter_data = &dma_params->channel;
|
||||
dma_data->filter_data = dma;
|
||||
|
||||
/* RX is not valid in DIT mode */
|
||||
if (mcasp->op_mode != DAVINCI_MCASP_DIT_MODE) {
|
||||
dma_params = &mcasp->dma_params[SNDRV_PCM_STREAM_CAPTURE];
|
||||
dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_CAPTURE];
|
||||
dma_params->asp_chan_q = pdata->asp_chan_q;
|
||||
dma_params->ram_chan_q = pdata->ram_chan_q;
|
||||
dma_params->sram_pool = pdata->sram_pool;
|
||||
dma_params->sram_size = pdata->sram_size_capture;
|
||||
if (dat)
|
||||
dma_params->dma_addr = dat->start;
|
||||
dma_data->addr = dat->start;
|
||||
else
|
||||
dma_params->dma_addr = mem->start + pdata->rx_dma_offset;
|
||||
|
||||
/* Unconditional dmaengine stuff */
|
||||
dma_data->addr = dma_params->dma_addr;
|
||||
dma_data->addr = mem->start + pdata->rx_dma_offset;
|
||||
|
||||
dma = &mcasp->dma_request[SNDRV_PCM_STREAM_CAPTURE];
|
||||
res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
|
||||
if (res)
|
||||
dma_params->channel = res->start;
|
||||
*dma = res->start;
|
||||
else
|
||||
dma_params->channel = pdata->rx_dma_channel;
|
||||
*dma = pdata->rx_dma_channel;
|
||||
|
||||
/* dmaengine filter data for DT and non-DT boot */
|
||||
if (pdev->dev.of_node)
|
||||
dma_data->filter_data = "rx";
|
||||
else
|
||||
dma_data->filter_data = &dma_params->channel;
|
||||
dma_data->filter_data = dma;
|
||||
}
|
||||
|
||||
if (mcasp->version < MCASP_VERSION_3) {
|
||||
@ -1596,17 +1553,11 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
||||
goto err;
|
||||
|
||||
switch (mcasp->version) {
|
||||
#if IS_BUILTIN(CONFIG_SND_DAVINCI_SOC) || \
|
||||
(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
|
||||
IS_MODULE(CONFIG_SND_DAVINCI_SOC))
|
||||
case MCASP_VERSION_1:
|
||||
case MCASP_VERSION_2:
|
||||
ret = davinci_soc_platform_register(&pdev->dev);
|
||||
break;
|
||||
#endif
|
||||
#if IS_BUILTIN(CONFIG_SND_EDMA_SOC) || \
|
||||
(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
|
||||
IS_MODULE(CONFIG_SND_EDMA_SOC))
|
||||
case MCASP_VERSION_1:
|
||||
case MCASP_VERSION_2:
|
||||
case MCASP_VERSION_3:
|
||||
ret = edma_pcm_platform_register(&pdev->dev);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user