ASoC: ti: davinci-mcasp: Add support for the OMAP4 version of McASP
There is a single McASP on OMAP4 (and OMAP5) which is configured to only support DIT playback mode on a single serializer. Add 0x200 offset to DAT port address as the TRM suggests it. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Link: https://lore.kernel.org/r/20210705194249.2385-4-peter.ujfalusi@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
5dcd276e15
Коммит
0238bcf80e
|
@ -96,6 +96,7 @@ enum {
|
||||||
MCASP_VERSION_2, /* DA8xx/OMAPL1x */
|
MCASP_VERSION_2, /* DA8xx/OMAPL1x */
|
||||||
MCASP_VERSION_3, /* TI81xx/AM33xx */
|
MCASP_VERSION_3, /* TI81xx/AM33xx */
|
||||||
MCASP_VERSION_4, /* DRA7xxx */
|
MCASP_VERSION_4, /* DRA7xxx */
|
||||||
|
MCASP_VERSION_OMAP, /* OMAP4/5 */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum mcbsp_clk_input_pin {
|
enum mcbsp_clk_input_pin {
|
||||||
|
|
|
@ -35,6 +35,7 @@ config SND_SOC_DAVINCI_MCASP
|
||||||
various Texas Instruments SoCs like:
|
various Texas Instruments SoCs like:
|
||||||
- daVinci devices
|
- daVinci devices
|
||||||
- Sitara line of SoCs (AM335x, AM438x, etc)
|
- Sitara line of SoCs (AM335x, AM438x, etc)
|
||||||
|
- OMAP4
|
||||||
- DRA7x devices
|
- DRA7x devices
|
||||||
- Keystone devices
|
- Keystone devices
|
||||||
- K3 devices (am654, j721e)
|
- K3 devices (am654, j721e)
|
||||||
|
|
|
@ -1794,6 +1794,12 @@ static struct davinci_mcasp_pdata dra7_mcasp_pdata = {
|
||||||
.version = MCASP_VERSION_4,
|
.version = MCASP_VERSION_4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct davinci_mcasp_pdata omap_mcasp_pdata = {
|
||||||
|
.tx_dma_offset = 0x200,
|
||||||
|
.rx_dma_offset = 0,
|
||||||
|
.version = MCASP_VERSION_OMAP,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct of_device_id mcasp_dt_ids[] = {
|
static const struct of_device_id mcasp_dt_ids[] = {
|
||||||
{
|
{
|
||||||
.compatible = "ti,dm646x-mcasp-audio",
|
.compatible = "ti,dm646x-mcasp-audio",
|
||||||
|
@ -1811,6 +1817,10 @@ static const struct of_device_id mcasp_dt_ids[] = {
|
||||||
.compatible = "ti,dra7-mcasp-audio",
|
.compatible = "ti,dra7-mcasp-audio",
|
||||||
.data = &dra7_mcasp_pdata,
|
.data = &dra7_mcasp_pdata,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.compatible = "ti,omap4-mcasp-audio",
|
||||||
|
.data = &omap_mcasp_pdata,
|
||||||
|
},
|
||||||
{ /* sentinel */ }
|
{ /* sentinel */ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
|
MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
|
||||||
|
@ -2350,10 +2360,17 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
|
dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
|
||||||
dma_data->filter_data = "tx";
|
dma_data->filter_data = "tx";
|
||||||
if (dat)
|
if (dat) {
|
||||||
dma_data->addr = dat->start;
|
dma_data->addr = dat->start;
|
||||||
else
|
/*
|
||||||
|
* According to the TRM there should be 0x200 offset added to
|
||||||
|
* the DAT port address
|
||||||
|
*/
|
||||||
|
if (mcasp->version == MCASP_VERSION_OMAP)
|
||||||
|
dma_data->addr += davinci_mcasp_txdma_offset(mcasp->pdata);
|
||||||
|
} else {
|
||||||
dma_data->addr = mem->start + davinci_mcasp_txdma_offset(mcasp->pdata);
|
dma_data->addr = mem->start + davinci_mcasp_txdma_offset(mcasp->pdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* RX is not valid in DIT mode */
|
/* RX is not valid in DIT mode */
|
||||||
|
@ -2418,7 +2435,10 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
||||||
ret = edma_pcm_platform_register(&pdev->dev);
|
ret = edma_pcm_platform_register(&pdev->dev);
|
||||||
break;
|
break;
|
||||||
case PCM_SDMA:
|
case PCM_SDMA:
|
||||||
ret = sdma_pcm_platform_register(&pdev->dev, "tx", "rx");
|
if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE)
|
||||||
|
ret = sdma_pcm_platform_register(&pdev->dev, "tx", "rx");
|
||||||
|
else
|
||||||
|
ret = sdma_pcm_platform_register(&pdev->dev, "tx", NULL);
|
||||||
break;
|
break;
|
||||||
case PCM_UDMA:
|
case PCM_UDMA:
|
||||||
ret = udma_pcm_platform_register(&pdev->dev);
|
ret = udma_pcm_platform_register(&pdev->dev);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче