ASoC: davinci-mcasp: Support for combined tx/rx interrupt line
Some SoC, like da850/OMAP-L138 uses one common interrupt request for TX/RX events. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
97bf6af1f9
Коммит
5a1b8a80da
|
@ -364,6 +364,20 @@ static irqreturn_t davinci_mcasp_rx_irq_handler(int irq, void *data)
|
|||
return IRQ_RETVAL(handled_mask);
|
||||
}
|
||||
|
||||
static irqreturn_t davinci_mcasp_common_irq_handler(int irq, void *data)
|
||||
{
|
||||
struct davinci_mcasp *mcasp = (struct davinci_mcasp *)data;
|
||||
irqreturn_t ret = IRQ_NONE;
|
||||
|
||||
if (mcasp->substreams[SNDRV_PCM_STREAM_PLAYBACK])
|
||||
ret = davinci_mcasp_tx_irq_handler(irq, data);
|
||||
|
||||
if (mcasp->substreams[SNDRV_PCM_STREAM_CAPTURE])
|
||||
ret |= davinci_mcasp_rx_irq_handler(irq, data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||
unsigned int fmt)
|
||||
{
|
||||
|
@ -1441,6 +1455,22 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
|||
|
||||
mcasp->dev = &pdev->dev;
|
||||
|
||||
irq = platform_get_irq_byname(pdev, "common");
|
||||
if (irq >= 0) {
|
||||
irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_common\n",
|
||||
dev_name(&pdev->dev));
|
||||
ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
|
||||
davinci_mcasp_common_irq_handler,
|
||||
IRQF_ONESHOT, irq_name, mcasp);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "common IRQ request failed\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
mcasp->irq_request[SNDRV_PCM_STREAM_PLAYBACK] = XUNDRN;
|
||||
mcasp->irq_request[SNDRV_PCM_STREAM_CAPTURE] = ROVRN;
|
||||
}
|
||||
|
||||
irq = platform_get_irq_byname(pdev, "rx");
|
||||
if (irq >= 0) {
|
||||
irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx\n",
|
||||
|
|
Загрузка…
Ссылка в новой задаче