mirror of https://gitee.com/openkylin/linux.git
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:
parent
97bf6af1f9
commit
5a1b8a80da
|
@ -364,6 +364,20 @@ static irqreturn_t davinci_mcasp_rx_irq_handler(int irq, void *data)
|
||||||
return IRQ_RETVAL(handled_mask);
|
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,
|
static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||||
unsigned int fmt)
|
unsigned int fmt)
|
||||||
{
|
{
|
||||||
|
@ -1441,6 +1455,22 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
mcasp->dev = &pdev->dev;
|
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");
|
irq = platform_get_irq_byname(pdev, "rx");
|
||||||
if (irq >= 0) {
|
if (irq >= 0) {
|
||||||
irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx\n",
|
irq_name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%s_rx\n",
|
||||||
|
|
Loading…
Reference in New Issue