diff options
author | Martin Povišer <povik+lin@cutebit.org> | 2023-02-24 16:33:02 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2023-02-24 16:31:20 +0000 |
commit | fb1847cc460c127b12720119eae5f438ffc62e85 (patch) | |
tree | 871f8e51b58a9c08223ebf0a6e68bbcb52b4bd50 | |
parent | d8b3e396088d787771f19fd3b7949e080dc31d6f (diff) |
ASoC: apple: mca: Improve handling of unavailable DMA channels
When we fail to obtain a DMA channel, don't return a blanket -EINVAL,
instead return the original error code if there's one. This makes
deferring work as it should. Also don't print an error message for
-EPROBE_DEFER.
Fixes: 4ec8179c212f ("ASoC: apple: mca: Postpone requesting of DMA channels")
Signed-off-by: Martin Povišer <povik+lin@cutebit.org>
Link: https://lore.kernel.org/r/20230224153302.45365-3-povik+lin@cutebit.org
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/apple/mca.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sound/soc/apple/mca.c b/sound/soc/apple/mca.c index aea08c7b2ee8..64750db9b963 100644 --- a/sound/soc/apple/mca.c +++ b/sound/soc/apple/mca.c @@ -950,10 +950,17 @@ static int mca_pcm_new(struct snd_soc_component *component, chan = mca_request_dma_channel(cl, i); if (IS_ERR_OR_NULL(chan)) { + mca_pcm_free(component, rtd->pcm); + + if (chan && PTR_ERR(chan) == -EPROBE_DEFER) + return PTR_ERR(chan); + dev_err(component->dev, "unable to obtain DMA channel (stream %d cluster %d): %pe\n", i, cl->no, chan); - mca_pcm_free(component, rtd->pcm); - return -EINVAL; + + if (!chan) + return -EINVAL; + return PTR_ERR(chan); } cl->dma_chans[i] = chan; |