ASoC: davinci-mcasp: Extract DMA channels directly from DT
Extract DMA channels directly from DT as they can not be found from platform resources anymore. This is a work-around until davinci audio driver is updated to use dmaengine. Signed-off-by: Jyri Sarha <jsarha@ti.com> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
256ba181cb
commit
4023fe6ff2
@ -18,6 +18,11 @@ Required properties:
|
|||||||
- serial-dir : A list of serializer pin mode. The list number should be equal
|
- serial-dir : A list of serializer pin mode. The list number should be equal
|
||||||
to "num-serializer" parameter. Each entry is a number indication
|
to "num-serializer" parameter. Each entry is a number indication
|
||||||
serializer pin direction. (0 - INACTIVE, 1 - TX, 2 - RX)
|
serializer pin direction. (0 - INACTIVE, 1 - TX, 2 - RX)
|
||||||
|
- dmas: two element list of DMA controller phandles and DMA request line
|
||||||
|
ordered pairs.
|
||||||
|
- dma-names: identifier string for each DMA request line in the dmas property.
|
||||||
|
These strings correspond 1:1 with the ordered pairs in dmas. The dma
|
||||||
|
identifiers must be "rx" and "tx".
|
||||||
|
|
||||||
Optional properties:
|
Optional properties:
|
||||||
|
|
||||||
|
@ -84,6 +84,8 @@ struct snd_platform_data {
|
|||||||
u8 version;
|
u8 version;
|
||||||
u8 txnumevt;
|
u8 txnumevt;
|
||||||
u8 rxnumevt;
|
u8 rxnumevt;
|
||||||
|
int tx_dma_channel;
|
||||||
|
int rx_dma_channel;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
@ -1047,6 +1047,7 @@ static struct snd_platform_data *davinci_mcasp_set_pdata_from_of(
|
|||||||
struct snd_platform_data *pdata = NULL;
|
struct snd_platform_data *pdata = NULL;
|
||||||
const struct of_device_id *match =
|
const struct of_device_id *match =
|
||||||
of_match_device(mcasp_dt_ids, &pdev->dev);
|
of_match_device(mcasp_dt_ids, &pdev->dev);
|
||||||
|
struct of_phandle_args dma_spec;
|
||||||
|
|
||||||
const u32 *of_serial_dir32;
|
const u32 *of_serial_dir32;
|
||||||
u8 *of_serial_dir;
|
u8 *of_serial_dir;
|
||||||
@ -1109,6 +1110,28 @@ static struct snd_platform_data *davinci_mcasp_set_pdata_from_of(
|
|||||||
pdata->serial_dir = of_serial_dir;
|
pdata->serial_dir = of_serial_dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = of_property_match_string(np, "dma-names", "tx");
|
||||||
|
if (ret < 0)
|
||||||
|
goto nodata;
|
||||||
|
|
||||||
|
ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
|
||||||
|
&dma_spec);
|
||||||
|
if (ret < 0)
|
||||||
|
goto nodata;
|
||||||
|
|
||||||
|
pdata->tx_dma_channel = dma_spec.args[0];
|
||||||
|
|
||||||
|
ret = of_property_match_string(np, "dma-names", "rx");
|
||||||
|
if (ret < 0)
|
||||||
|
goto nodata;
|
||||||
|
|
||||||
|
ret = of_parse_phandle_with_args(np, "dmas", "#dma-cells", ret,
|
||||||
|
&dma_spec);
|
||||||
|
if (ret < 0)
|
||||||
|
goto nodata;
|
||||||
|
|
||||||
|
pdata->rx_dma_channel = dma_spec.args[0];
|
||||||
|
|
||||||
ret = of_property_read_u32(np, "tx-num-evt", &val);
|
ret = of_property_read_u32(np, "tx-num-evt", &val);
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
pdata->txnumevt = val;
|
pdata->txnumevt = val;
|
||||||
@ -1213,15 +1236,11 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
|||||||
dma_data->sram_size = pdata->sram_size_playback;
|
dma_data->sram_size = pdata->sram_size_playback;
|
||||||
dma_data->dma_addr = dat->start + pdata->tx_dma_offset;
|
dma_data->dma_addr = dat->start + pdata->tx_dma_offset;
|
||||||
|
|
||||||
/* first TX, then RX */
|
|
||||||
res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
|
res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
|
||||||
if (!res) {
|
if (res)
|
||||||
dev_err(&pdev->dev, "no DMA resource\n");
|
dma_data->channel = res->start;
|
||||||
ret = -ENODEV;
|
else
|
||||||
goto err_release_clk;
|
dma_data->channel = pdata->tx_dma_channel;
|
||||||
}
|
|
||||||
|
|
||||||
dma_data->channel = res->start;
|
|
||||||
|
|
||||||
dma_data = &dev->dma_params[SNDRV_PCM_STREAM_CAPTURE];
|
dma_data = &dev->dma_params[SNDRV_PCM_STREAM_CAPTURE];
|
||||||
dma_data->asp_chan_q = pdata->asp_chan_q;
|
dma_data->asp_chan_q = pdata->asp_chan_q;
|
||||||
@ -1231,13 +1250,11 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
|||||||
dma_data->dma_addr = dat->start + pdata->rx_dma_offset;
|
dma_data->dma_addr = dat->start + pdata->rx_dma_offset;
|
||||||
|
|
||||||
res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
|
res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
|
||||||
if (!res) {
|
if (res)
|
||||||
dev_err(&pdev->dev, "no DMA resource\n");
|
dma_data->channel = res->start;
|
||||||
ret = -ENODEV;
|
else
|
||||||
goto err_release_clk;
|
dma_data->channel = pdata->rx_dma_channel;
|
||||||
}
|
|
||||||
|
|
||||||
dma_data->channel = res->start;
|
|
||||||
dev_set_drvdata(&pdev->dev, dev);
|
dev_set_drvdata(&pdev->dev, dev);
|
||||||
ret = snd_soc_register_component(&pdev->dev, &davinci_mcasp_component,
|
ret = snd_soc_register_component(&pdev->dev, &davinci_mcasp_component,
|
||||||
&davinci_mcasp_dai[pdata->op_mode], 1);
|
&davinci_mcasp_dai[pdata->op_mode], 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user