mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
ASoC: dwc: Fix PIO mode initialization
We can no longer rely on the return value of devm_snd_dmaengine_pcm_register(...) to check if the DMA handle is declared in the DT. Previously this check activated PIO mode but currently dma_request_chan returns either a valid channel or -EPROBE_DEFER. In order to activate PIO mode check instead if the interrupt line is declared. This reflects better what is documented in the DT bindings (see Documentation/devicetree/bindings/sound/ designware-i2s.txt). Also, initialize use_pio variable which was never being set causing PIO mode to never work. Signed-off-by: Jose Abreu <joabreu@synopsys.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
a5de5b74a5
commit
6fce983f9b
1 changed files with 11 additions and 14 deletions
|
@ -681,22 +681,19 @@ static int dw_i2s_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
if (!pdata) {
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret == -EPROBE_DEFER) {
|
||||
dev_err(&pdev->dev,
|
||||
"failed to register PCM, deferring probe\n");
|
||||
return ret;
|
||||
} else if (ret) {
|
||||
dev_err(&pdev->dev,
|
||||
"Could not register DMA PCM: %d\n"
|
||||
"falling back to PIO mode\n", ret);
|
||||
if (irq >= 0) {
|
||||
ret = dw_pcm_register(pdev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev,
|
||||
"Could not register PIO PCM: %d\n",
|
||||
dev->use_pio = true;
|
||||
} else {
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL,
|
||||
0);
|
||||
dev->use_pio = false;
|
||||
}
|
||||
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "could not register pcm: %d\n",
|
||||
ret);
|
||||
goto err_clk_disable;
|
||||
}
|
||||
goto err_clk_disable;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue